Zweck des Programms
Das Programm läuft auf einem ESP32 und kommuniziert über die USB-COM-Schnittstelle mit dem Dobot-Steuerprogramm auf dem PC.
- Sechs Taster senden Steuerbefehle und Freigabemeldungen.
- Eine blaue LED zeigt die bestätigte PC-Verbindung an.
- Eine gelbe LED dient als simulierter, veränderlicher Ausgang.
- Änderungen überwachter Signale werden als
WERT;Name;Wertan den PC gesendet. - Nachrichten vom PC werden ohne Blockieren eingelesen.
Anschlussbelegung
| GPIO | Signal | Nachricht beziehungsweise Funktion |
|---|---|---|
| 25 | Taster Pause | PAUSE |
| 26 | Taster Weiter | WEITER |
| 27 | Taster Halt | HALT |
| 33 | Taster Status | STATUS |
| 18 | Taster Freigabe | FREIGABE |
| 32 | Taster Frei 2 | FREI_2 |
| 2 | Blaue LED | Leuchtet nach Empfang von PC_BEREIT |
| 19 | Gelbe LED | Simulierter Ausgang LED_gelb |
Pin.PULL_UP bedeutet der Wert 0: Taster gedrückt.Versionsübersicht
| Version | Schwerpunkt | Status |
|---|---|---|
| 1.0 | Erste Erweiterung um Signalüberwachung und zufällige LED-Simulation | Fehlerhaft |
| 1.1 | Initialisierung und Sendefunktion korrigiert | LED-Thread im Test unzuverlässig |
| 1.2 | LED-Simulation ohne zusätzlichen Thread | Historischer stabiler Stand |
| 1.3 | Allgemeine PC-Befehle, Rückmeldungen und Statusabfragen | Grundlage der aktuellen Entwicklung |
| 1.3.1–1.3.5 | Zwischenstände zur Diagnose des seriellen Empfangs | Durch 1.3.6 ersetzt |
| 1.3.6 | Zuverlässiger Empfang über sys.stdin und blaue Empfangsanzeige | Praktisch getestet |
| 1.3.7 | Abschließendes Semikolon bei parametrierten Befehlen erlaubt | Praktisch getestet |
| 1.3.8 | GPIO 18 sendet passend zur Befehlskette FREIGABE | Aktueller, praktisch getesteter Stand |
Version 1.0
Erweiterungen
- Neue gelbe LED an GPIO 19.
- Dictionary
UEBERWACHTE_SIGNALEzur allgemeinen Überwachung von Ein- und Ausgängen. - Neue Funktion
ueberwache(), die Signaländerungen erkennt. - Neue Funktion
simulation_led_aendert_sich(min_sekunden, max_sekunden). - Die LED-Simulation lief in einem eigenen MicroPython-Thread.
- Die gelbe LED sollte nach zufälligen Zeitabständen ihren Zustand ändern.
Vorgesehenes Nachrichtenformat
WERT;LED_gelb;1
WERT;LED_gelb;0
Festgestellte Probleme
- Die Dictionaries
letzte_rohwerte,stabile_werteundaenderungszeitenwurden vor dem ersten Aufruf vonueberwache()nicht initialisiert. - Dadurch trat der Fehler
KeyError: LED_gelbauf. - In
ueberwache()wurde irrtümlichsende_zeile()aufgerufen, obwohl die vorhandene Funktionzeile_senden()heißt. - Der Simulationsthread sendete die LED-Meldung selbst, obwohl dies bereits Aufgabe von
ueberwache()sein sollte. - Die Module
_thread,randomundtimewurden teilweise doppelt importiert.
Version 1.1
Korrekturen
- Neue Funktion
ueberwachung_initialisieren(). - Die Anfangszustände aller überwachten Signale werden vor dem Start der Hauptschleife gespeichert.
sende_zeile()wurde zuzeile_senden()korrigiert.- Der Simulationsthread verändert nur noch den Pinzustand.
- Die Meldung über die Änderung wird ausschließlich von
ueberwache()erzeugt. - Doppelte Importe wurden entfernt.
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
simulation_led_aendert_sich(min_sekunden, max_sekunden)legt den Zeitbereich fest und berechnet den ersten Schaltzeitpunkt.simulation_led_pruefen()prüft bei jedem Schleifendurchlauf, ob der nächste zufällige Schaltzeitpunkt erreicht wurde.- Nach jeder Änderung berechnet das Programm einen neuen zufälligen Zeitpunkt.
Aktuelle Hauptschleife
while True:
tasten_pruefen()
simulation_led_pruefen()
ueberwache()
pc_nachrichten_lesen()
time.sleep_ms(SCHLEIFENPAUSE_MS)
Signalweg der gelben LED
simulation_led_pruefen()ändert den Pinzustand.ueberwache()erkennt die Änderung.zeile_senden()sendet den neuen Zustand an den PC.
led_gelb.value(not led_gelb.value())
WERT;LED_gelb;1
WERT;LED_gelb;0
Kommunikationsrichtungen
| Richtung | Funktion | Beispiel |
|---|---|---|
| ESP32 → PC | zeile_senden() | zeile_senden("FREIGABE") |
| PC → ESP32 | pc_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
PINGwird mitPONGbeantwortet.LED_GELB_EINundLED_GELB_AUSschalten die LED und bestätigen die Ausführung.- LED-Änderungen werden als
WERT;LED_gelb;0beziehungsweiseWERT;LED_gelb;1übertragen. SIMULATION_LED_START;2;5;startet die zufälligen Wechsel.SIMULATION_LED_STOPbeendet sie zuverlässig.HILFEliefert die unterstützte Befehlsliste.ESP32_STATUSmeldet 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
FREIGABEund setztwarte_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
| Datei | Bedeutung |
|---|---|
esp32_dobot_steuerung_v1.py | Ursprünglicher Stand 1.0 mit Fehlern. |
esp32_dobot_steuerung_v1_1.py | Korrigierter Stand 1.1 mit Thread-Simulation. |
esp32_dobot_steuerung_v1_2.py | Historischer Stand 1.2 ohne zusätzlichen Thread. |
esp32_dobot_steuerung_v1_3.py | Aktive Entwicklungsdatei; interne Version derzeit 1.3.8. |
esp32_dobot_steuerung.py | Dateiname der aktiven Version auf dem ESP32. |
main.py | Startet das Steuerprogramm per import esp32_dobot_steuerung. |