• Schlagwort-Archive: 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/2ct.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

Nervige Probleme beim Experimentieren mit Arduino/ESP32

  1. Spannung ist nicht zwischen allen 3V und GRD pins vorhanden.
  2. Wackelkontakte (betrifft nur ESP32)
    Die Stromleitung vom IC über die Steckstifte über das Breadboard und die verwendeten Kabel hatten ständig Wackelkontakt. (Eventuell liegt das am Breadboard, oder auch am ESP. Ich kann mich nämlich nicht erinnern, dieses Problem mit dem Arduino-Starterkit auch gehabt zu haben.
  3. Serial Console zeigt nur unlesbare Zeichen an. –> Lag oft an der eingestellten Übertragungsrate. Muss oft mit der Rate, die im Sketch eingestellt ist überein stimmen. Bei meinen letzten Experimenten mit dem LOLIN ESP32 musste ich aber stets 115200 Bauds/s einstellen, damit der Text lesbar war (auch wenn im Scetch Serial.begin(9600) stand). Vielleicht hängt dies mit dem Bord zusammen, oder auch damit, dass ich auch die Programm-Übertragung mit 115200 Bauds machte.
  4. Übertragungsfehler des Sketches auf den IC. Könnte an zu hoher Übertragungsrate liegen.
  5. Übertragungsfehler des Scetches auf den ESP32: Verifiziere im Gerätemanager (devmgmr.msc) ob unter „Anschlüsse (COM & LPT)“ die „Silicon Labs CP210 USB to UART Bridge“ vorhanden ist. Ich hatte das Problem eines Wackelkontakts: Wenn ich den USB-Anschluss am ESP aktiv andrückte, dann ploppte im Gerätemanager der Anschluss auf. Kann auch am USB-Kabel liegen.
Schließen