In unserer Wohnung gibt es schon einige „smarte“ Geräte und weil es mir soviel Spass macht, werden es immer mehr. Vielleicht ist es bald ein Smarthome. Wer weiß?
Ab heute möchte ich den Bewässerungsstand unserer Blumen kontrollieren, weil ich sonst entweder zu selten oder zu häufig zur Gießkanne greife.
Abhilfe soll ein kapazitiver Sensor schaffen. Diese korrodieren nicht verglichen mit den resistiven. Zusätzlich habe ich die Kanten des Sensors mit Nagellack bestrichen, um zu verhindern, dass Feuchtigkeit in die Platine eindringt.
In meinem Fall habe ich ein „Hygrometer Modul V1.2“ von AZDelivery für knapp 3 Euro gewählt. Um die Werte angezeigt zu bekommen, befördere ich sie mit Hilfe eines ESP32 ins WLAN, wo sie mein Raspberry Pi 4 auffängt und anzeigt.
Installationsvorbereitung
Am einfachsten scheint die Anbindung über MQTT, welches sich leicht über Tasmota realisieren lässt. Dazu muss aber zuerst Tasmota auf den ESP. Das gelingt wie folgt:
Den ESP an den Computer über USB anschließen. Falls man ein Modell ohne USB-Anschluss hat, wird man eine USB-TTL-Brücke benötigen und diese an TX, RX und GND anschließen müssen. Dazu kommt dann noch die Energieversorgung über 3.3V.
Gegebenen Falls müssen noch Treiber für den USB-TTL-Baustein installiert werden. Für meinen ESP habe ich das hier im Blog bereits in einem früheren Artikel verschriftlicht.
Firmware installieren
Nun braucht man noch das Tool Tazmotizer, welches man Hier herunterladen kann.
Einmal gestartet wählt man den Serial Port aus an dem der ESP angeschlossen wurde. Dazu wähl man noch das Image aus, welches in meinem Fall für einen ESP32 Hier heruntergeladen werden kann. Ich wähle „tasmota32.bin„. Nun wird der ESP programmiert und neu gestartet.
Falls das Probleme bereitet kann man über die folgende Website das Image aufspielen: Link
Und falls auch das Probleme bereitet geht es über den ESPhome-Flasher: Link
Firmware einrichten
Sobald der ESP läuft, öffnet er ein eigenes W-Lan auf das man sich verbinden muss. Hat man eines der Tools verwendet wird dort auch die IP des ESP angezeigt. Bei mir z.B. 192.168.4.1. Diese Adresse ruft man nun im Web-Browser auf und gibt in der Eingabemaske die Zugangsdaten zum eigenen W-Lan ein. Wenn alles richtig war, zeigt Tasmota „Success“ und die IP unter der der ESP im eigenen W-Lan zu finden ist an. Nun also wieder ins normale Netzwerk wechseln. Falls man die IP hier nicht angezeigt bekommt muss man sich in den Router, die FritzBox oder die Connect Box einloggen und sie dort auslesen.
iorboker anbinden
Ich verwende zur Verwaltung meiner Daten den iobroker auf dem Raspberry Pi 4. Dort habe ich den Sonoff Adapter installiert. Entsprechend existiert bei mir eine Instanz „Sonoff“ deren Konfiguration ich öffne und dort einen Benutzer samt Passwort anlege. Diese Daten trägt man auch auf dem ESP ein indem man „Configuration“ -> „Configure MQTT“ anwählt. Dort trägt man als Host die IP des Raspberry Pi, sowie einen Namen für den ESP unter „Client“ ein. Außerdem den User und das Passwort, das auch im iobroker angegeben wurde. Mit „Save“ speichert der ESP32 alle Daten und startet neu.
Im iobroker sieht man nun, dass alles in Ordnung ist und eine Verbindung zwischen einem Gerät und dem iobroker besteht.
Unter Objekten findet man ab jetzt einen Sonoff-Eintrag, der sich öffnen lässt. Darin wird der ESP aufgelistet unter dem Namen, der als Client eingetragen wurde.
Anschlüsse am ESP32
Da ich in diesem ersten Schritt nur sehen will, ob die Datenerfassung und Darstellung funktioniert habe ich zwei CR123 Lithium Batterien in Reihe an Vin angeschlossen. Die Ausgangsspannung bleibt relativ lange stabil bei über 3V, was genügt um den ESP zu versorgen. Der Feuchtigkeits-Sensor verwendet einen NE555 und müsste eigentlich mit 5V betrieben werden aber auch mit 3V3 funktioniert er ausreichend gut für mich. Das wird wichtig, wenn der Aufbau später mit einem „nackten“ ESP ohne on-board LDO und CH9102 aufgebaut wird.
Den Sensor habe ich nicht direkt an 3V3, GND und einen analogen Eingang angeschlossen, da er sonst auch im Standby-Betrieb Strom aufnimmt. Ich habe die Versorgung an TXD und D15 gelegt, um die Versorgung stabil genug zu halten, sie aber beim Schlafenlegen des ESP zu deaktivieren. Das Analog-Signal des Sensors habe ich auf D32 gelegt. Weiterhin gibt es eine Verbindung von Enable zu RX2, die mit einem 10kOhm Widerstand an 3V3 hochgezogen werden. Der letzte Anschluss ist eine Art Hold-Signal für den DeepSleep: D14 wird mit 10kOhm an 3V3 gelegt, erhält aber auch einen Schalter zu GND. Wenn der ESP aus dem DeepSleep aufwacht und an D14 nicht 3V3 sondern GND sieht, legt er sich nicht wieder schlafen, sodass man Zeit hat, die Konfiguration zu ändern.
Tasmota Settings
Die folgenden Einstellungen ergeben sich aus der Wahl der verwendeten Pins. Das Menü zur Konfiguration erfolgt wieder über das Web-Interface des ESP. Dort dann „Configuration“ -> „Configure Module“ wählen und die folgenden Einstellungen tätigen:
TX GPIO1 = Relay_i – 1: Ein Relais mit invertiertem Signalausgang
IO GPIO14 = DeepSleep : Der Pin, um den ESP wach zu halten, wenn auf GND gezogen
IO GPIO 15 = Relay_i – 2 : Wie beim anderen Relais auch
AO GPIO 32 = ADC Input – 1 : Liest den Wert des Sensors ein
Nach dem Speichern startet der ESP nochmals neu und auf der Hauptseite sieht man den Sensorwert. Dieser liegt bei mir im trockenen Zustand bei ca. 2300.
An dieser Stelle ist eigentlich fast alles erledigt. Fehlt noch die Kalibration. Dazu den Wert bei Trockenheit aufnehmen. Anschließend den Sensor in ein Glas voll Wasser halten und diesen Wert auch notieren. Damit steht der Wertebereich.
Nun nochmal in „Configuration“ -> „Configure Logging“ und dort eine „Telemetry Period“ einstellen. Das ist die Zeit, die der ESP wach bleibt nachdem er aus dem DeepSleep erwacht. Je kleiner der Wert, umso länger hält später die Batterie. Ich habe mich für 20 Sekunden entschieden und diese gespeichert. Nach dem folgenden Neustart muss noch der DeepSleep aktiviert werden. Dies erfolgt über die Konsole.
Dazu im Haupmenü auf „Consoles“ -> „Console“ und dort „deepsleeptime“ in die Eingabeleiste eintragen. Mit ENTER bestätigen. Per Default antwortet der ESP darauf mit „/RESULT = {„DeepSleepTime“:0}“ was bedeutet, dass er diesen Modus nicht erreichen wird.
Man stellt daher mittels „deepsleeptime x“ die Schlafenszeit in Sekunden ein. Auch hier gilt: Je seltener, desto länger hält die Batterie. Ich versuche es mit 4 Stunden, das wären dann 4 * 60 * 60 = 14400. daher trage ich „deepsleeptime 14400“ ein und bestätige mit ENTER.
Damit ist alles erledigt. Der ESP wird in Zyklen von 4 Stunden für jeweils 20 Sekunden wach und überträgt die Daten an den Raspberry pi. Dort kann dann eine Datenauswertung erfolgen, wenn gewünscht.
Nächste Schritte
Ich habe eine Hand voll ESP8266-12F bestellt. Diese werden eine kleine Platine samt Spannungsregler mit kleinem Ruhestrom erhalten. Vielleicht schreibe ich das auch noch auf…