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 5V, 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 Jumper 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…
Könntest du hier noch ein Bild mit dem Schaltplan hinterlegen? Mir ist unklar, was mit „Verbindung von Enable zu RX2“ gemeint ist. Ich denke das wäre auch für andere hilfreich!
Hallo Rudolf,
vielen Dank für deine ausführliche Anleitung, die ist wirklich großartig 🙌
Hast du vielleicht noch zufällig einen Schaltplan, da ich aktuell noch nicht ganz verstanden habe, welches Kabel wo hin gehört 😅
Vorab vielen Dank für deine Bemühungen!
Beste Grüße
Andy
Hallo Andy,
ich habe einen Schaltplan eingefügt. „Leider“ sind (fast) alle ESP-Boards unterschiedlich ausgelegt, sodass man auf jeden Fall das Datenblatt des eigenen Boards abgleichen muss.
Viele Grüße
Hallo Rudi,
vielen Dank die Erstellung des Schaltplans, dass hilft mir enorm!
Sorry, dass ich nochmals lästig bin, wollte dich fragen, ob du mir vielleicht nochmals bei meinem Dilemma helfen könntest?
Ich habe nun alle Kabel am ESP (gleiches Modell, wie in deiner Anleitung) angebracht. Die Versorgung läuft über einen LiFePO4 3,2V Akku.
Auch die Einstellungen in Tasmota habe ich laut Anleitung gesetzt.
Nun zu meinem Problem …
Wenn ich den Akku mit GND & 3V3 verbinde läuft dieser einwandfrei, jedoch, wenn ich anstelle 3V3 den Pin VIN verwende, leuchtet der ESP, jedoch verbindet sich dieser nicht wie gewohnt mit dem io-Broker.
Hast du hierzu vielleicht eine Idee, was hier bei mir schief läuft?
Beim Aufspielen der Tasmota Software ist mir aufgefallen, dass es nur über die Variante „direkt von der Website“ funktioniert. Hier gibt es leider nicht, wie bei dir in der Anleitung beschrieben die „tasmota32.bin“, lediglich die „tasmota.bin“ als „normale“ oder „Entwickler“ Variante. Ich habe mich dann für die Entwickler Variante entschieden.
Hoffe, dass passt so.
Wenn ich mich auf den ESP mit Tasmota verbinde, finde ich unter „Analog1“ zwei Buttons mit „An/Aus 1“ & „An/aus 2“, müssen hier beide auf „ON“ stehen oder wie ist hier die richtige Einstellung? Oder muss ich hier nichts tun?
Vorab vielen Dank für deine Bemühungen & Support!
Wünsche dir einen schönen Sonntag.
Beste Grüße
Andy
Hallo Andy,
kein Problem. Aber ich glaube ich kann dir nicht zu 100% helfen. Sorry.
Bezüglich der 3V3: Wenn du dort ~3.2V anlegst wird das Board direkt aus deinem Akku versorgt. Das geht solange gut, wie der Akku einigermaßen über 3V ist. Wenn du es an Vin anlegst, versucht der LDO auf dem Board aus den 3.2V die 3V3 zu erzeugen. Das kann ihm jedoch niemals gelingen, da er nur abwärts wandeln kann. Also z.B. aus 5V die 3V3 erzeugen. Der LDO hat auch immer einen kleinen Spannungsabfall, das bedeutet, dass man immer etwas mehr Spannung anlegen muss, als „hinten“ rauskommen kann.
Ich denke, das Image wird passen. Den Sensorwert siehst du direkt oben auf der Seite deines ESP.
Edit: Hier habe ich auch ein gutes Video dazu gefunden https://www.youtube.com/watch?v=NPRVKi4uFVE
Hallo Rudi,
vielen Dank für deine schnelle Rückmeldung!
Werde es in den nächsten Tagen, sehr gerne testen und danke für den Link 🙋🏻♂️
Beste Grüße Andy