ESP32-Dobot-Steuerung

Dokumentation der Änderungen am MicroPython-Programm für Taster, LEDs und die Kommunikation mit der Dobot-Befehlskette.

Versionen 1.0 bis 1.3.8

Zweck des Programms

Das Programm läuft auf einem ESP32 und kommuniziert über die USB-COM-Schnittstelle mit dem Dobot-Steuerprogramm auf dem PC.

Anschlussbelegung

GPIOSignalNachricht beziehungsweise Funktion
25Taster PausePAUSE
26Taster WeiterWEITER
27Taster HaltHALT
33Taster StatusSTATUS
18Taster FreigabeFREIGABE
32Taster Frei 2FREI_2
2Blaue LEDLeuchtet nach Empfang von PC_BEREIT
19Gelbe LEDSimulierter Ausgang LED_gelb
Tasterlogik: Die Taster sind zwischen GPIO und GND angeschlossen. Durch Pin.PULL_UP bedeutet der Wert 0: Taster gedrückt.

Versionsübersicht

VersionSchwerpunktStatus
1.0Erste Erweiterung um Signalüberwachung und zufällige LED-SimulationFehlerhaft
1.1Initialisierung und Sendefunktion korrigiertLED-Thread im Test unzuverlässig
1.2LED-Simulation ohne zusätzlichen ThreadHistorischer stabiler Stand
1.3Allgemeine PC-Befehle, Rückmeldungen und StatusabfragenGrundlage der aktuellen Entwicklung
1.3.1–1.3.5Zwischenstände zur Diagnose des seriellen EmpfangsDurch 1.3.6 ersetzt
1.3.6Zuverlässiger Empfang über sys.stdin und blaue EmpfangsanzeigePraktisch getestet
1.3.7Abschließendes Semikolon bei parametrierten Befehlen erlaubtPraktisch getestet
1.3.8GPIO 18 sendet passend zur Befehlskette FREIGABEAktueller, praktisch getesteter Stand

Version 1.0

Erweiterungen

Vorgesehenes Nachrichtenformat

WERT;LED_gelb;1
WERT;LED_gelb;0

Festgestellte Probleme

  • Die Dictionaries letzte_rohwerte, stabile_werte und aenderungszeiten wurden vor dem ersten Aufruf von ueberwache() nicht initialisiert.
  • Dadurch trat der Fehler KeyError: LED_gelb auf.
  • In ueberwache() wurde irrtümlich sende_zeile() aufgerufen, obwohl die vorhandene Funktion zeile_senden() heißt.
  • Der Simulationsthread sendete die LED-Meldung selbst, obwohl dies bereits Aufgabe von ueberwache() sein sollte.
  • Die Module _thread, random und time wurden teilweise doppelt importiert.

Version 1.1

Korrekturen

Wichtige Startreihenfolge

ueberwachung_initialisieren()
zeile_senden("ESP32_BEREIT")
simulation_led_aendert_sich(30, 60)

Verbleibendes Problem

Im praktischen Test änderte die gelbe LED ihren Zustand nicht mehr zuverlässig. Als wahrscheinlichste Ursache wurde der zusätzliche MicroPython-Thread betrachtet. Ein Thread kann auf dem ESP32 ohne gut sichtbare Fehlermeldung beendet werden oder sich ungünstig mit der seriellen Ein- und Ausgabe verhalten.

Version 1.2

Wesentliche Änderung

Die LED-Simulation verwendet keinen zusätzlichen Thread mehr. Stattdessen arbeitet sie nicht blockierend in der bereits vorhandenen Hauptschleife.

Neue Funktionen

Aktuelle Hauptschleife

while True:
    tasten_pruefen()
    simulation_led_pruefen()
    ueberwache()
    pc_nachrichten_lesen()
    time.sleep_ms(SCHLEIFENPAUSE_MS)

Signalweg der gelben LED

  1. simulation_led_pruefen() ändert den Pinzustand.
  2. ueberwache() erkennt die Änderung.
  3. zeile_senden() sendet den neuen Zustand an den PC.
led_gelb.value(not led_gelb.value())

WERT;LED_gelb;1
WERT;LED_gelb;0
Vorteil: Die Simulation blockiert weder die Tasterabfrage noch den Empfang von PC-Nachrichten und benötigt keinen zweiten Ausführungsthread.

Kommunikationsrichtungen

RichtungFunktionBeispiel
ESP32 → PCzeile_senden()zeile_senden("FREIGABE")
PC → ESP32pc_nachrichten_lesen()PC_BEREIT

Das PC-Programm sendet Texte mit:

esp32.senden("LED_GELB_EIN")

Version 1.3 bis 1.3.8

Verarbeitung von PC-Befehlen

Die in Version 1.2 noch geplante allgemeine Befehlsverarbeitung ist inzwischen umgesetzt. Version 1.3.8 verarbeitet folgende Befehle:

PC_BEREIT
PING
LED_GELB_EIN
LED_GELB_AUS
LED_GELB_UMSCHALTEN
LED_GELB_STATUS
SIMULATION_LED_START;min;max
SIMULATION_LED_STOP
ESP32_STATUS
HILFE

Unbekannte Befehle werden eindeutig beantwortet:

UNBEKANNTER_BEFEHL;Befehl

Serieller Empfang

Die Zwischenstände 1.3.1 bis 1.3.5 dienten dazu, den Empfang über die MicroPython-Konsole praktisch zu untersuchen. Ein direkter zweiter Zugriff auf UART(0) erwies sich als ungeeignet, weil diese Schnittstelle bereits vom REPL verwendet wird.

Seit Version 1.3.6 liest das dauerhaft gestartete ESP32-Programm die Zeichen nicht blockierend über sys.stdin. Die Datei wird auf dem ESP32 als esp32_dobot_steuerung.py gespeichert und durch folgende main.py automatisch gestartet:

import esp32_dobot_steuerung

Blaue Empfangsanzeige

Nach PC_BEREIT leuchtet die blaue LED als Verbindungsanzeige. Bei jeder vollständig empfangenen PC-Nachricht wechselt sie für 200 ms in den entgegengesetzten Zustand und kehrt danach zurück. Eine leuchtende LED erlischt beim Empfang deshalb kurz.

Parametrierte Befehle in Version 1.3.7

Abschließende leere Parameter werden ignoriert. Beide Schreibweisen sind gleichwertig:

SIMULATION_LED_START;2;5
SIMULATION_LED_START;2;5;

Freigabe-Taster in Version 1.3.8

Der Taster an GPIO 18 sendet nun FREIGABE statt FREI_1. Damit setzt er die Befehlskette unmittelbar fort, wenn diese mit warte_bis("FREIGABE") auf die Freigabe wartet.

Praktisch bestätigte Tests bis Version 1.3.8

  • PING wird mit PONG beantwortet.
  • LED_GELB_EIN und LED_GELB_AUS schalten die LED und bestätigen die Ausführung.
  • LED-Änderungen werden als WERT;LED_gelb;0 beziehungsweise WERT;LED_gelb;1 übertragen.
  • SIMULATION_LED_START;2;5; startet die zufälligen Wechsel.
  • SIMULATION_LED_STOP beendet sie zuverlässig.
  • HILFE liefert die unterstützte Befehlsliste.
  • ESP32_STATUS meldet Version, LED-Zustände und Simulationsstatus.
  • Alle sechs Taster senden beim Drücken genau eine Meldung. Gedrückthalten und Loslassen erzeugen keine weitere Meldung.
  • Der Taster an GPIO 18 sendet FREIGABE und setzt warte_bis("FREIGABE") zuverlässig fort.
  • Der Halt-Taster stoppte eine problematische Dobot-Bewegung sofort.
  • Der einmalige Ablauf aus Sicherheitshub, HOME, Freigabe, Fahrt zu Position B und Programmende wurde vollständig und ohne beschädigte Rückmeldungen ausgeführt.

Dateinamen

DateiBedeutung
esp32_dobot_steuerung_v1.pyUrsprünglicher Stand 1.0 mit Fehlern.
esp32_dobot_steuerung_v1_1.pyKorrigierter Stand 1.1 mit Thread-Simulation.
esp32_dobot_steuerung_v1_2.pyHistorischer Stand 1.2 ohne zusätzlichen Thread.
esp32_dobot_steuerung_v1_3.pyAktive Entwicklungsdatei; interne Version derzeit 1.3.8.
esp32_dobot_steuerung.pyDateiname der aktiven Version auf dem ESP32.
main.pyStartet das Steuerprogramm per import esp32_dobot_steuerung.