Die Lösung mit dem ESP-32 funktionierte mehrere Wochen anstandslos, zumindest fast. Probleme bereiten nun der Leistungsbedarf des ESP-32. In der aktuellen dunklen Jahreszeit liefert die Solarzelle nicht genügend Energie, so dass der Akku nach einigen Wochen leer ist. Die Wetterstation fällt natürlich aus, startet aber nicht neu, sobald die Sonne scheint. Das Problem hier ist, die Solarzelle in praller Sonne gemeinsam mit dem entladenen Akku liefern nicht ausreichend Energie, damit der ESP-32 bootet. Beim booten bricht die Spannung im System ein und die Brown-out detection schlägt zu. Nun folgt eine endlose Schleife von neuen, fehlgeschlagenen Bootvorgängen. Der Akku wird so niemals auf ein ausreichendes Niveau geladen.

Zeit für eine neue Lösung

Diesmal sollte das System so sparsam sein wie irgendwie möglich. Dies bedeutet eine Abkehr von der Kommunikation per WLAN hin zu etwas sparsameren. Meine Wahl viel auf 433 MHz Transmitter in der Station. Zudem wurde der ESP-32 durch einen Arduino Pro Mini mit 3.3V (8Mhz) ersetzt. Der Arduino bietet ausreichend Pins für Spannungsmessung sowie externe Interrupts für Wind- und Regenmesser. 

Auch wenn dieser Controller sehr sparsam ist, kann er dennoch nicht ständig aktiv sein. In diesem Fall wäre der Akku wieder nach einigen dunklen Tagen leer. Zum Glück verfügt der ATmega328P über Sleep Funktionen, wenn auch weniger komfortabel. Der Arduino kann durch den Watchdog Timer aufgeweckt werden. Dieser läuft aber maximal 8 Sekunden. Das bedeutet, der Arduino kann so maximal 8 Sekunden schlafen. Um nun mehrere Minuten zu schlafen wird intern ein Wake Counter hochgezählt. Anschließend wird geprüft, ob die eingestellte Zeit abgelaufen ist (Wake Counter * 8 Sekunden). falls nicht, legt sich der Arduino sofort wieder hin. Der Ablauf ist nun wie folgt:

1. nach dem booten legt sich der Arduino in den Tiefschlaf
2. durch Wind, Regen oder den Watchdog Timer wird der Arduino aufgeweckt und der Wake Counter hochgezählt
3. nun wird ermittelt, wodurch das auffachen verursacht wurde. Ist dies durch einen Interrupt am Wind- oder Regenmesser ausgelöst worden, werden die entsprechenden Zähler erhöht.
4. Abschließend wird geprüft, ob der Wake Counter die eingestellte Anzahl erreicht hat.
4.1 wenn ja, werden der ATTINY24 der Windfahne und der BME280 mit Spannung versorgt (über I/O Pin des Arduino), die Daten ausgelesen und mittels 433 MHz Transmitter gesendet
4.2 wenn die eingestellte Anzahl nicht erreicht war, legt sich der Arduino sofort schlafen.

Die gesendeten Daten müssen natürlich empfangen und verarbeitet werden. Dies erledigt das ESP8266 Modul aus dem ersten Versuch. An diesem ist der 433MHz Receiver angeschlossen und lauscht unaufhörlich nach neuen Daten. Sobald welche eintreffen, werden die Daten per MQTT weitergereicht, etwa an Thingspeak.com

Bisher arbeitet dieser Aufbau störungsfrei und ist hoffentlich die finale Version.

Die Software befindet sich wie immer im Git Repository.

Noch eine Anmerkung zu den 433MHz Receiver. Man findet auf eBay und anderen sehr günstige Sets, teils für weniger als einen Euro. Diese Module, besonders die Empfänger sind sehr schlecht und bieten kaum Reichweite. Bei meinen Tests war ich nur in der Lage, weniger als 1 Meter weit zu senden, trotz entsprechend abgestimmter Antenne. Erfolgt brachte erst ein superheterodyne Sender und Empfänger. Beides kostet nur wenige Euro mehr, bietet aber erheblich mehr Reichweite