Home » ESP32
Archiv der Kategorie: ESP32
Starten mit WEMOS LOLIIN ESP32
Basiert auf dem Artikel „Smarte Helfer selbst gebaut“ im CT Heft Nr. 2018/2 S. 64ff.
Software-Links dazu.
Sehr guten Einstieg in den ESP32 bietet auch: https://youtu.be/xPlN_Tk3VLQ
Schritt 1: Arduino IDE herunter laden
Schritt 2: ESP32 SW-Ausrüstung in Arduino-IDE einspielen
Dazu ist es einfacher die Installation via „Board-Manager“ durchzuführen: Anleitung (aus der Espressive Page)
Anleitung Backup: Dazu unter Preferences ‚Additional Board Managers‘ den hier https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json eintragen (mehrere solche URL würden mit Komma separiert). Dann „Boards Manager“ aus „Tools > Board menu“ öffnen „esp32 platform“ installieren.
Schritt 3: CT Software Libraries einspielen
Vorgehen gemäss Heft. SW Links unter ct.de/y73t
Nachtrag 14.03.2021: Jedoch: Statt ‚Bootcamp‘ (SW library von CT) besser EspMQTTClient benutzen. -> Siehe unbedingt Dachfenster-Sensor mit Alarm auf dem Handy!
Stolperstein: (Nicht mehr relevant wenn EspMQTTClient benutzt wird)
Bei ArduinoJson ist auf dem GITHub bereits die Version 6. Basecamp arbeitet aber nur mit Version 5 zusammen. Zum Glück hat der Arduino IDE Library-Manager eine ArduinoJson Version 5 verfügbar. —> Installiere von dort!
Nachtrag: ct.de/y73t liefert die Bibliotheken auch direkt als ZIP. Da hätte man wahrscheinlich das Versionsproblem auch nicht.
Schritt 4: Sketch übertragen
CT stellt die Beispielcodes zu Verfügung. -> Z.B. Beispielcodes für Dachfenster-Sensor mit Alarm auf dem Handy (siehe dort)!
Zuerst Sketch in Editor der IDE laden.
Zu Übertragung:
– Unter ‚Tools‘ > ‚Board‘ das passende ESP Board einstellen. Unter dem ‚Board‘-Menu muss es ein ‚ESP32 Arduino‘-Menu haben, ansonsten ist wahrscheinlich Schritt 2 nicht richtig ausgeführt worden.
Wähle ‚WEMOS LOLIN32‚. Wenn der nicht geht ‚ESP32 Dev Module‚.
– Reduziere allenfalls die Übertragungsgeschwindigkeit
– Wähle den richtigen Port, nämlich jenen, der im Gerätemanager (devmgmt.msc (Windows)) unter „Anschlüsse (COM & LPT)“ die Bezeichnung „USB to UART Bridge“ trägt. Falls kein solcher vorliegt, sieh weiter unten, Stichwort ‚Übertragungsfehler‚.
– Menu ‚Sketch‘ > ‚Upload‘
– Die Meldung „Leaving… Hard resetting via RTS pin… “ ist nicht als Fehlermeldung zu betrachten.
Bei Übertragungsfehlern (typischerweise Timout) prüfen:
– Innerhalb des Gerätemanager (devmgmt.msc (Windows)) prüfen ob unter „Anschlüsse (COM & LPT)“ ein „Silicon Labs CP210x USB to UART Bridge“ vorhanden ist. Wenn nicht, liegt das eventuell daran, dass ein Wackel vorliegt. Kabel am ESP anpressen kann schon helfen, oder aber das USB Kabel wechseln. Möglich wäre auch das Windows tatsächlich den Treiber nicht installiert hat. Man ihn also manuell nachinstallieren müsste.
Dachfenster-Sensor mit Alarm auf dem Handy
Zu tun, Stand 14.März 2021:
- Installation ESP auf Breadboard. Stabilisieren.
- Handy-App für die Anzeige des Dachfensterstatus (oder zuerst mal eine PC-App, weil das einfacher ist?)
- Feuchtigkeitssensor integrieren/Status übermitteln –> Alarm in Handy-App ermöglichen
- Motor integrieren, der Dachfenster zu zieht, sobald Feuchte festgestellt wird
- Akku-Betrieb ermöglichen
- Schlafmodus ermöglichen
Hauptgrundlage:
Beschrieben in CT-Artikel 1/2. ct.de/yg7t (Libraries), Beispiel-Code
MQTT:
Leit-Artikel: https://www.heise.de/developer/artikel/Kommunikation-ueber-MQTT-3238975.html
MQTT Client
Anstatt die vom CT Heft speziell angefertigte Bootcamp library ist es besser die besser dokumentierte EspMQTTClient zu benutzen.
(Mit bootcamp ist es mir nicht gelungen auf den MQTT-Broker zu verbinden und auch nicht, irgendwelche Logs anzuzeigen.)
EspMQTTClient lässt sich in der Arduino IDE einfach mit 1,2 klicks über Tools > „Manage libraries …“ installieren. Danach kann der Sketch (Programm) SimpleMqttClient benutzt werden um die Interaktion des ESP mit dem MQTT broker auszutesten. Das Programm kann über „File“ > „Examples“ > „Examples from custiom libraries“ geholt werden.
MQTT Broker
Mosquitto-MQTT-Broker auf lokalem Rechner. Benötigte nur Download von Mosquitto-Download-Site. Nach Ausführen der Windows-Installation-Prozedur wird der Server gestartet mit Kommando:
mosquitto -c C:\tmp\mosquitto.conf -v
Damit der broker auch von aussen sichtbar ist, muss das mitgegebene mosquitto.conf file die Zeile
listener 1883 0.0.0.0
enthalten.
Zugreifbarkeit des MQTT Brokers prüfen:
Um die vom ESP32 an den MQTT-Broker gesendeten Messges anzusehen habe ich mit MQTT.fx einen lokalen standalone MQTT-Client installiert.
Einfacher ist es (wie im README.md) der Mosqitto-Installation vorgeschlagen
Den server laufen zu lassen:
mosquitto -c C:\tmp\mosquitto.conf -v
Dann auf ein (anwartschaftliches) Topic zu registrieren:
mosquitto_sub -t 'test/topic' -v
Diese Konsole geöffnet lassen.
Dann da auch was rein zu schreiben:
mosquitto_pub -t 'test/topic' -m 'hello world'
Die geschriebene Message sollte nun in der Konsole wo man das Abonnent definiert hat ausgelistet werden.
Remote-Zugreifbarkeit testen
Mit von aussen sichtbarer IP:
mosquitto_sub -h 192.168.178.50 -t 'test/topic' -v
Respektive:
mosquitto_pub -h 192.168.178.50 -t 'test/topic' -m 'hello world'
Eventuell muss die Windows Firewall für 1883 geöffnet werden. Zuvor testen!
Probleme mit der MQTT Interaktion – Broker ist nicht (für den ESP) erreichbar
Per Default werden durch den Mosquitto start zwei Netzwerk-Zugriffs-Definitionen erzeugt, welche duch netstat -an dann so angezeigt werden.
C:\Program Files\mosquitto>netstat -an | find /I "1883" TCP 127.0.0.1:1883 0.0.0.0:0 ABHÖREN TCP [::1]:1883 [::]:0 ABHÖREN
Remotemässig kann aber nur zugegriffen werden, wenn netstat -an diese anzeigt:
C:\Program Files\mosquitto>netstat -an | find /I "1883" TCP 0.0.0.0:1883 0.0.0.0:0 ABHÖREN TCP 192.168.178.46:1883 192.168.178.35:59784 WARTEND
–> Erklärung des outputs von netstat -an.
Wenn der MQTT-Broker über diese „öffentliche“ addresse angesprochen wird, so wird von Mosquitto automatisch auch Zugriff mit Passwort verlangt.
Wie man ein Passwortfile anlegt um dann zeight dieser Artikel: http://www.steves-internet-guide.com/mqtt-username-password-example/
Das Passwortfile wird im mosquitto.conf file als
password_file C:\tmp\mosquitto.pw
referenziert. Selbstredend muss mosqitto dann mit der Option -c <pfad_zum_conf_file> gestartet werden.
1. Sketch
Ein erster sehr simpler Sketch, der die Schalterwerte aus 3V und Pin33 ausliest und an den MQTT-Broker sendet.
#include "EspMQTTClient.h" static const int SensorPin = 33; int sensorValue = 0; uint16_t statusPacketIdSub = 0; EspMQTTClient client( "FRITZ!Box 7490", "Schlaraffenland46", "192.168.178.50", // MQTT Broker server ip "esp", // Can be omitted if not needed "geheim", // Can be omitted if not needed "ESP32HPS", // Client name that uniquely identify your device 1883 // The MQTT port, default to 1883. this line can be omitted ); void setup() { Serial.begin(115200); pinMode(SensorPin, INPUT); sensorValue = digitalRead(SensorPin); // Optionnal functionnalities of EspMQTTClient : client.enableDebuggingMessages(); // Enable debugging messages sent to serial output // client.enableHTTPWebUpdater(); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. // These can be overrited with enableHTTPWebUpdater("user", "password"). client.enableLastWillMessage("TestClient/lastwill", "I am going offline"); // You can activate the retain flag by setting the third parameter to true } // This function is called once everything is connected (Wifi and MQTT) // WARNING : YOU MUST IMPLEMENT IT IF YOU USE EspMQTTClient void onConnectionEstablished() { do { delay(1000); int sensorValue = digitalRead(SensorPin); if (sensorValue == 0) { Serial.println("Sending: Dachfenster is offen!"); client.publish("dachfenster", "offen"); // You can activate the retain flag by setting the third parameter to true } else { Serial.println("Sending: Dachfenster ist zu"); client.publish("dachfenster", "closed"); // You can activate the retain flag by setting the third parameter to true } } while (true); } void loop() { client.loop(); }
Ist das Programm mal auf den ESP geladen kann dessen USB-Kabel vom PC ausgesteckt werden und z.B. an einen USB-Ladestecker angeschlossen werden.
Das Programm sollte dabei neu gestartet werden und neu beginnen Meldungen an den MQTT-Server zu senden.
Diese Version verbraucht noch ziemlich viel Strom, das das das Schlafengehen (nicht wie im CT Heft beispielcode) implementiert ist.
2. MQTT Client starten
c:\Programme\mosquitto>mosquitto -c c:\tmp\mosquitto.conf -v 1616246619: mosquitto version 2.0.9 starting 1616246619: Config loaded from c:\tmp\mosquitto.conf. 1616246619: Opening ipv4 listen socket on port 1883. 1616246619: mosquitto version 2.0.9 running 1616246631: New connection from 192.168.178.35:54203 on port 1883. 1616246631: New client connected from 192.168.178.35:54203 as ESP32HPS (p2, c1, k15, u'esp'). 1616246631: Will message specified (18 bytes) (r0, q0). 1616246631: TestClient/lastwill 1616246631: Sending CONNACK to ESP32HPS (0, 0) 1616246632: Received PUBLISH from ESP32HPS (d0, q0, r0, m0, 'dachfenster', ... (5 bytes)) 1616246633: Received PUBLISH from ESP32HPS (d0, q0, r0, m0, 'dachfenster', ... (5 bytes)) 1616246634: Received PUBLISH from ESP32HPS (d0, q0, r0, m0, 'dachfenster', ... (5 bytes))
Für Erklärungen siehe oben!
3. Den Abonnenten auf die ‚Dachfenster‘-Meldugen starten:
c:\Programme\mosquitto>mosquitto_sub -h 192.168.178.50 -t dachfenster -u esp -P geheim -v dachfenster offen dachfenster offen dachfenster offen dachfenster offen dachfenster offen
Wemos LOLIN ESP32 analogRead Probleme
Problem:
Analog Read lieferte ständig dieselben Werte, egal welche Spannung am Pin anlag.
Lösung:
Neu herunter laden der letzten SW für die Arduino IDE. Erst danach war es möglich das Board „Wemos LOLIN32“ innerhalb der Arduino IDE auszuwählen.