WiFi Weather Sensor
Die eigene Wetterstation im Internet der Dinge
Auf Basis des ESP8266 WiFi SoC wurde ein winziger Sensor entwickelt, welcher Temperatur, Luftfeuchtigkeit und Luftdruck in die Cloud oder zu einem (lokalen) MQTT- oder Webserver übertragen kann. Zur Stromversorgung können Akkus oder ein herkömmlicher USB Port genutzt werden. Durch geschickte Stromsparmechanismen erreicht der Sensor im Batteriebetrieb problemlos eine Laufzeit von einigen Monaten. Die Firmware wurde in C geschrieben und steht unter GPL frei zur Verfügung.
Hardware
Der LDO IC3 regelt die Batteriespannung zur Stromversorgung des gesamten Systems auf 3,3 V herunter. Die Batteriespannung wird über den Spannungsteiler R7 / R8 überwacht, der von FET T2 nur während der Messung eingeschaltet wird, um den Stromverbrauch zu reduzieren. Der Luftdrucksensor IC4 und der Temperatur-/Feuchtesensor IC5 (alternativ IC1) sind über den I2C-Bus mit dem ESP8266-Modul IC2 verbunden. Status-LED (D2) und ein Setup-Taster (S1) sind direkt mit dem WiFi-Modul verbunden. R3 wird als Pull-up-Widerstand für den Taster verwendet, R2 für den Reset-Pin. Im stromsparenden Standby-Modus wird XPD_DCDC (GPIO16) bei einem Wakeup-Timer-Event auf low gezogen. Ich habe diesen über eine Shottky-Diode (D1) mit dem Reset-Pin verbunden, da GPIO16 sonst auf High-Pegel zu liegen schien, und während des Resets ein paar Milliampere Strom flossen, wenn der ESP über die serielle Verbindung geflasht wurde.
Es existieren drei Varianten der Platine. Diese unterscheiden sich nur in den verwendeten Sensoren. Version 1 nutzt einen SHT1x Temperatur-/Luftfeuchtigkeitssensor und einen BMP180 Luftdrucksensor. In Version 2 wurde dieser durch einen MS5637 ersetzt, da Bosch den BMP180 abgekündigt hat. Version 3 verwendet einen SHT3x Temperatur-/Luftfeuchtigkeitssensor und ebenfalls das MS5637 Barometer. Zusätzlich bietet die dritte Version eine Anschlussmöglichkeit für externe Sensoren. Der auf allen Platinen mögliche AM2302 Temperatur-/Luftfeuchtigkeitssensor sollte nicht verwendet werden, da er auf lange Zeit nicht immer zuverlässig arbeitet, und aktuell verkaufte Sensoren durch Debugausgaben beim Start des ESP8266 an dem genutzten Portpin (GPIO2) abstürzen.
Der ESP8266 kann sich bei längerem Betrieb leicht erwärmen, durch die Nutzung eines Low-Power Standby spielt der kurze Zeitraum für die Übertragung jedoch keine nennenswerte Rolle. Der Standby ermöglicht außerdem den Betrieb mit Akkus / Solarzellen.
Die gemessene Stromaufnahme von Version 2 im Betrieb liegt im Schnitt bei etwa 120mA. Messung, Verbindung zum WLAN und Datenübertragung benötigen zirka 5 Sekunden. Im Standby werden nur noch 60µA benötigt. Bei einem Messintervall von 5 Minuten liegt damit rechnerisch der tägliche Verbrauch bei 50mAh. Mit 2500mAh Mignon Akkus ist der Betrieb für 50 Tage (1,5 Monate) sichergestellt, 5000mAh Baby Akkus verdoppeln die Laufzeit. Die genaue Berechnung ist in den Folien meiner Präsentation auf der Maker Faire auf Seite 16 zu finden.
Software
Die Software kann entweder mit den vorcompilierten Binärdateien geflasht, oder zuvor selbst compiliert werden. Zur Übertragung wird ein USB-Seriell-Wandler mit 3,3V TTL Ausgang benötigt. Dieser wird mit der Stiftleiste auf dem WiFi Weather Sensor verbunden. Eine genaue Anleitung findet sich im GitHub Repository der Wetterstation.
Innerhalb der Firmware gibt es zwei Modi, den Normalmodus und den Konfigurationsmodus. Im Normalmodus misst der Sensor, und sendet anschließend Daten an die Cloud. Im Konfigurationsmodus arbeitet der Sensor als drahtloser Zugangspunkt und wird über einen Standard-Webbrowser konfiguriert. Wenn der Sensor aktiv ist, kann der Modus durch Halten des Tasters von etwa 3-4 Sekunden gewechselt werden. Nach dem ersten Start im Normalmodus bleibt der Sensor für eine Minute aktiv um einen Wechsel zu ermöglichen. Sobald der Sensor im Low-Power Standby ist, hat der Taster keine Funktion.
Im Normalmodus blitzt die LED in 1 Sekunden Abständen um den Status anzuzeigen.
Anzahl Blitze | Status |
---|---|
1x | WiFi verbinden, DHCP Konfiguration |
2x | Messwerte übertragen |
3x | Serverfehler |
4x | Erster Start, warten |
Im Konfigurationsmodus blinkt die LED mit 1Hz. Mit einem Laptop oder Smartphone muss eine Verbindung zum WLAN ESP_xxxx aufgebaut, und die URL http://192.168.4.1/ im Browser geöffnet werden. Die Startseite zeigt die aktuellen Messwerte. Mit dem Button "Settings" oben links gelangt man in die Einstellungen. Der voreingestellte Benutzername und das Passwort lauten "admin" und "insecure".
Die verwendeten Sensoren werden automatisch erkannt. Die Datenübertragung kann über einen HTTP Request oder MQTT erfolgen. Per HTTP ist beispielsweise die Plattform Thingspeak nutzbar (optimal für Einsteiger), es kann aber auch ein eigenes Backend verwendet werden. Mit einem eigenen MQTT Server wie z.B. Mosquitto ist die Verarbeitung noch flexibler. Hier wäre unter anderem die Kombination Telegraf, InfluxDB und Grafana denkbar.
Montage
Zur Montage verwende ich das Schutzgehäuse TFA 98.1114.02, welches online für etwa 15€ erhältlich ist. Es schützt vor Regen und Erwärmung durch Sonneneinstrahlung, und kann an der Wand verschraubt oder mit Kabelbindern an einem Mast befestigt werden.
Fazit
Ich habe, Stand 2022, die Wetterstation seit etwa 5 Jahren an mehreren Orten in Betrieb. Die Firmware läuft soweit stabil. Das vom WiFi Weather Sensor genutzte ESP8266 NonOS SDK wird jedoch vom Hersteller Espressif nicht weiter gepflegt. Da alle Features im Sensor implementiert sind, ist auch eine Weiterentwicklung der Firmware meinerseits nicht mehr geplant. Mittlerweile sind zahlreiche Alternativen aufgetaucht, die von einer großen Community aktiv entwickelt und gepflegt werden. Über längere Zeit sollen meine Sensoren daher durch LoRa Sensoren (mehrere Jahre Laufzeit aus Batterien), oder, sofern Strom vorhanden ist, durch den IoT Geiger Counter mit ESP32 und ESPHome Firmware ersetzt werden.
Links und Dokumentation
- Projekt und Dokumentation auf GitHub
- Präsentation Maker Faire 2016
- Hackaday - Tiny Matchbox WiFi Weather Station