Infodisplay mittels ESP32

Der ESP32 von Espressif ist leistungsfähiger als sein Vorgängermodell ESP8266, integriert WLAN und Bluetooth. Als Arduino-kompatibler Baustein lässt er sich auch genauso programmieren, ist aber um einiges leistungsfähiger als viele Arduino-Boards.

Außerdem haben mich seine Stromspar-Eigenschaften interessiert, und so sollte eine batterieversorgte Anzeige entstehen, welche einige wichtige Werte aus dem Wohnbereich anzeigt. Dazu wurde auch ein eInk-Display verbaut, das im Ruhezustand den Anzeigeinhalt auf dem Display beibehält und dabei keinen Strom aufnimmt.

Unsere anzuzeigenden Werte (Temperatur, Luftfeuchte) sollen von den Sensoren geliefert werden, welche schon in unsere Smarthome-Lösung eingebunden sind.

Dort läuft auf einem Raspberry Pi ein FHEM-Hausautomationsserver, mehrere Räume werden überwacht. Diese Konfiguration ergibt die Möglichkeit, mit MQTT – „Message Queue Telemetrie Transport“ zu arbeiten, um diverse Werte aus FHEM auf den ESP32 zu transportieren.

Dazu muss zuerst ein MQTT-Broker auf dem Raspberry Pi installiert werden. Unter Raspbian gibt es „mosquitto“:

$ sudo apt-get update
$ sudo apt-get install mosquitto mosquitto-clients libmodule-pluggable-perl

Jetzt kann man kontrollieren, ob der mosquitto-Service läuft:

$ sudo service –status-all 2>&1 | grep mosquitto

Oder ausführlichere Statusinformationen anzeigen lassen:

$ sudo service mosquitto status

Stoppen und Starten des Service geschieht folgendermaßen:

$ sudo service mosquitto stop
$ sudo service mosquitto start

Nun muss noch FHEM für MQTT vorbereitet werden. Dazu muss man zuerst die Perl MQTT-Module installieren (/user/local/man! vorher löschen):

$ sudo cpan install Net::MQTT:Simple
$ sudo cpan install Net::MQTT:Constants

Jetzt kann man ein entsprechendes Device in FHEM anlegen:

define esp32001 MQTT_DEVICE
attr esp32001 IODev myBroker
attr esp32001 room MQTT

# Werte nach esp32001 (topic fhemhome/flur/statxx) senden (alle 1.5min)

define sendmval at +*00:01:30 {\
my $rv01 = ReadingsVal(‚Wandthermostat_WZ_Weather‘,’temperature‘,“);;\
my $rv02 = ReadingsVal(‚Wandthermostat_Bad_Weather‘,’measured-temp‘,“);;\
my $rv03 = ReadingsVal(‚Thermostat_Kueche‘,’measured-temp‘,“);;\
my $rv04 = ReadingsVal(‚Thermostat_SZ‘,’measured-temp‘,“);;\
fhem(„set myBroker publish fhemhome/flur/stat01 $rv01“);;\
fhem(„set myBroker publish fhemhome/flur/stat02 $rv02“);;\
fhem(„set myBroker publish fhemhome/flur/stat03 $rv03“);;\
fhem(„set myBroker publish fhemhome/flur/stat04 $rv04“);;\
}

Entwickelt haben wir wieder mit der Platformio-IDE. In unserem Setup ist der ESP32 innerhalb 2min Wachzeit bereit, Werte zu empfangen. Der Broker auf dem Pi übermittelt alle 1.5min, neue Werte liegen im Wachzeitfenster damit sicher an. Danach gibt es einen Tiefschlaf für 8min, was 10min-Zykluszeit ergibt.

Im Quelltext werden diese 480 Sekunden nochmal mit 1.000.000 multipliziert, da die SleepTime in Mikrosekunden übergeben wird.

if (sleep_enabled == true) {

long SleepTime = 480;
esp_sleep_enable_timer_wakeup(SleepTime * 1000000);
Serial.println(„Gehe in Tiefschlaf…“);
esp_deep_sleep_start();
}

Vor dem Einbau wurden alle Hardware-Komponenten inklusive LiPo-Akku auf dem Breadboard gesteckt und verkabelt und auch diverse Strommessungen vorgenommen.

Auf dem ESP32 läuft unsere Firmware, welche insgesamt 10 Werte empfangen soll. Für den ersten Test beschränken wir uns auf nur einen Raum, auch die Testnachricht wird später nicht mehr angezeigt. Stattdessen wurde ein Zeitstempel eingeführt. So kann man auf dem Display gleich erkennen, wann die Anzeige das letzte Mal aktualisiert wurde.

Daneben wird auf dem eInk-Display über zwei Kürzel „M“ und „W“ signalisiert, ob eine Verbindung zum MQTT-Broker und ins WLAN etabliert ist. Das Display ist über I2C an den ESP angebunden.

Zu Testzwecken kann man auch ein Monitoring der übertragenen Meldungen im Terminal auf dem Pi bzw. per ssh auf einem Netzwerkrechner vornehmen. Alle Nachrichten sieht man mittels:

$ mosquitto_sub -v -h -p 1883 -t ‚#‘

Um eine Nachricht zu publizieren (hier an das sogenannte Topic „fhemhome/flur/stat“, Anzeigedevice im Flur), gibt man folgendes ein:

$ mosquitto_pub -h -t fhemhome/flur/stat -m „Ich bin ein Test!“

Senden kann man auch von der FHEM-Befehlszeile oder aus der Standard-GUI, in dem man mittels Broker eine Message an das MQTT-Device sendet:

set myBroker publish fhemhome/flur/stat Ich bin ein Test!

Dabei wird der Message-String “Ich bin ein Test!” gerade nicht in Anführungszeichen gesetzt.

Untergebracht ist das Ganze in einem Fertiggehäuse aus dem Elektronikhandel. Um Platz zu sparen, wurde nur eine Stiftleiste und in liegender Anordnung angelötet. Der Konnektor für den Akku ist nicht genutzt und hat eine Verkabelung nach innen bekommen. Der USB-Anschluss der Platine wiederum zeigt über eine Gehäuseöffnung direkt nach außen.

Die ständig grün leuchtende Power-LED unseres Dev-Boards haben wir entfernt. Dafür lassen wir die Board-LED an Pin2 bei Verbindungsaufnahme ins WLAN kurz aufleuchten. Somit kriegt man einen „Lebendig“-Status kurz nach dem Einschalten mit dem seitlichen Kippschalter. Danach kann man das Gerät abstellen.

Über dem ESP32 findet das Display Platz, über kurze Kabel mit der Steckleiste des ESP verbunden.

Im Fuß der Lipo-Akku und die Ladeelektronik. Die ist verantwortlich dafür, dass man mittels USB-Kabel an einem 5V-Netzteil oder PC-Anschluss laden kann.

Die Frontplatte spart in der Mitte das eInk-Display aus. Das wird nur für die variablen Daten benötigt und kann deshalb relativ klein ausfallen.

Alles zusammengebaut, ist unser „Anzeiger“ für das Smarthome nun fertig. Tests über die letzten Wochen haben ergeben, dass nach einigen Tagen nachgeladen werden muss. Da kann man die Parameter für Aktualisierung und Bereitschaft ändern, je nachdem wie aktuell man seine Anzeige braucht, oder alternativ den Betrieb über USB-Kabel und kleinem Netzteil machen.

Nicht zuletzt hat bei diesem Projekt auch die Optik für uns eine Rolle gespielt, damit das Ganze in die Wohnung passt und gut vorzeigbar ist. Da heißt es, sich bei der Konstruktion entsprechend Mühe zu geben.

Alles in allem bin ich mit dem ESP32 als Baustein für solcherlei Aufgaben aber zufrieden und deshalb ist geplant, ihn auch noch in weiteren Vorhaben einzusetzen…

Swen Hopfe

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert