Forum: Mikrocontroller und Digitale Elektronik ESP32-MQTT-Client-Broker-OTA


von Matthias G. (matthias1102)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!
Anbei ein kleines Projekt für den ESP32 zusammen mit einen 
Funk-Türklingel von Grundig. Programmiert wird über die 
Arduino-Oberfläche. Ziel des Ganzen ist, einen batteriebetriebenen 
Klingelknopf über MQTT zu melden. Nach der Untersuchung des Empfängers 
der Funk-Türklingel habe ich ein Signal finden können (am 
Schiebeschalter) der die LED des Empfängers blinken lässt. Mit einer 
Amplitude von 3V werden dort 10 Impulse erzeugt damit die LED blinkt. 
Der Empfänger wird normalerweise mit 2xAA-Batterien betrieben. Statt der 
Batterien erfolgt die Stromversorgung des Empfängers jedoch über den 
3V3-Pin des ESP32. Der gefundene LED-Anschluß des Empfängers wird bei 
mir direkt mit IO4 verbunden. Nun einen Ausschnitt für den USB-Anschluss 
des ESP32 ins Gehäuse des Funk-Empfängers einbringen und den ESP32 im 
Gehäuse befestigen, Platz genug ist. Das wars mit der Hardware, mehr ist 
nicht zu tun. Damit alles OTA-fähig wird muss beim ersten Mal natürlich 
über USB geflasht werden, danach kann die Netzwerkschnittstelle via OTA 
benutzt werden. Bevor die Software auf den ESP32 geladen wird müssen die 
Zugangsdaten des lokalen WLAN's eingetragen werden (SSID und PASSWORD).
Software: Nach dem Einbinden der notwendigen Libraries erfolgt in 
"setup()"  die Initialisierung der ser. Schnittstelle, danach die 
Anmeldung ans lokale WLAN. Mit 'mqtt.subscribe(...)' erfolgt das 
Aufsetzen des MQTT-Brokers und -Subscribers. Mit dem 
'mqtt.subscribe("#",...)' erfolgt die Anmedung des Brokers für ALLE 
Nachrichten die über MQTT laufen ('#' ist ein Wildcard). Statt dem '#' 
können natürlich auch bestimmte 'topics' eingetragen werden. Beispiel: 
'tele/Bell2MQTT/SENSOR'. Wer rumprobieren will startet ein Programm das 
MQTT-Nachrichten empfangen und anzeigen kann (z.B. 'MQTT-Explorer' für 
den PC oder 'MQTT Terminal' für das Smartphone). Wird ein solches 
Programm benutzt, ist die Netzwerkadresse des ESP anzugeben und die 
Anmeldedaten zum WLAN. Zeilen 53 bis 57 weisen picoMQTT an, alle 
MQTT-Nachrichten ('#') entgegen zu nehmen. In Zeile 61 wird dann der 
Service gestartet (das ist der 'Broker'). In 'loop()' wird zunächst 
picoMQTT bedient und anschließend der Klingelknopf abgefragt und ggf. 
eine MQTT-Nachricht mit 'topic' 'tele/Bell2MQTT/SENSOR' und payload 
'Doorbell rings #...' erzeugt. Danach muss mit 'delay(6000)' gewartet 
werden bis alle 10 Impulse der LED-Ansteuerung erfolgten. Zum Schluß 
wird dann die OTA-Fähigkeit sicher gestellt. Denkbar ist auch noch eine 
ganz andere Anwendung: ESP batteriebetrieben mit direkter Anbindung des 
Klingelknopfes ohne Funk-Türklingel. Dazu müsste der ESP32 durch einen 
stromsparenderen ESP8266 ersetzt werden. Das ganze Gedöns um OTA fliegt 
raus (dazu müsste ja der ESP dauernd laufen was bei Batteriebetrieb 
nicht möglich ist) ebenso alles um 'mqtt.subscribe("#"..)'. MQTT-Broker 
ist nicht möglich (Hinweis: 'deepsleep()'). Die letzte Anweisung in der 
'loop()' sollte dann ein 'deepsleep()' sein damit sich der ESP schlafen 
legt. Der physisch Klingelknopf wird dann nicht mit IO4 sondern mit 
'RST' und 'GND' verbunden. Reset weckt den ESP auf und alles wird einmal 
durchlaufen, bis zum 'deepsleep()'. Das der Quellcode entsprechen 
angepasst werden muss versteht sich hoffentlich von selbst, ist aber 
sicher kein Hexenwerk.
Das Tasten prellen sollte man im Hinterkopf behalten. Auch muss 
sichergestellt werden, daß die MQTT-Nachricht komplett raus ist bevor 
der ESP schlafen gelegt wird (siehe Doku 'picoMQTT').
Nachteil dieser Lösung ist, daß der ESP die MQTT-Broker-Funktion nicht 
übernehmen kann und das der ESP verhältnismäßig lange in Betrieb sein 
muss um die MQTT-Nachricht über das LAN abzusetzen. Eine bessere Lösung 
wäre dann die WLAN-Verbindung nicht über das HTTP-Protokoll (wie MQTT 
das macht) abzuwickeln sondern über ESPnow, von Espressiv entwickelt und 
wegen der kurzen Übertragungszeiten deutlich besser geeignet als HTTP. 
Dann aber müsste ein ESPnow nach MQTT Server aufgestzt werden. Der 
könnte allerdings dann auch die MQTT-Broker-Funktion übernehmen und, da 
im Haus, mit einem Netzteil als Stromquelle versorgt werden. Und da der 
dann sowieso läuft kann man dem Teil auch noch ein Bluetooth-BLE-Gateway 
aufs Auge drücken.
Das wars. Viel Spass damit!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.