Seit einem Jahr misst und protokolliert unsere Wetterstation auf der Terrasse nun Temperatur, Luftfeuchte und Luftdruck.
Dieser Artikel ist Teil einer vierteiligen Serie:
Jahresauswertung
Temperaturverlauf in Karlsruhe zwischen 17. Juli 2017 und 16. Juli 2018:
Es gab demnach auf unserer Terrasse
- 96 Sommertage,
- davon 40 heiße Tage,
- 37 Frosttage,
- davon 3 eisige Tage.
Außerdem hatten wir
- 2 Wüstentage und
- 4 Tropennächte.
Ausfälle – Ursachen und Lösungen
Während die Station elf Monate lang problemlos Messwerte ermittelt und ausgewertet hat, sind ab Juni 2018 vermehrt Ausfälle aufgetreten.
Eine erste Analyse hat ergeben, dass es zwei verschiedene Arten von Ausfällen gibt: Zum einen kann der Sensor zur Messung der Temperatur und Luftfeuchte nicht mehr angesteuert werden. In diesem Fall zeigt die Station korrekt den richtigen Fehlerzustand an. Zum anderen bleibt die Wetterstation einfach stehen und ermittelt weder neue Messwerte noch signalisiert die Station einen Fehler.
Sensor BME280 funktioniert nicht
Diesen Fehler konnte ich nicht genau lokalisieren. Nachdem ich mehrfach die Sensoren getauscht hatte und der Fehler aber trotzdem immer wieder aufgetreten ist, hatte ich die Kontakte der Verkabelung im Verdacht. Bisher verwendete ich an mehreren Stellen einfachste Schraubklemmen um verschiedene Komponenten per Kabel miteinander zu verbinden.
Schraubklemmen haben aber diverse Nachteile, so daß sie beispielweise in der Hausinstallation kaum noch verwendet werden. Seitdem ich alle Schraubklemmen durch Steckverbinder ersetzt habe, ist dieser Fehler nicht mehr aufgetreten.
Mikrocontroller Wemos D1 bleibt stehen
Dieser Fehler war schwierig zu finden, dann aber recht eindeutig zu lokalisieren.
Den Mikrocontroller zu tauschen brachte keine Besserung. Dann suchte ich einen vermeintlichen Fehler in der Software, wurde aber nicht fündig. Ein Testaufbau mit derselben Software funktionierte ohne Fehler.
Die nächste Vermutung betraf die Stromversorgung: Der Fehler tritt auf, wenn der Controller über die Solaranlage oder ein USB Netzteil versorgt wird, es gibt keinen Fehler, wenn der Controller per USB an den Rechner angeschlossen ist.
Da ich mir dieses Verhalten nicht erklären konnte, versuchte ich die Stelle im Programmablauf zu lokalisieren, an der der Controller stehen blieb. Nach einigen Debugsitzungen war klar, dass der Controller nicht mehr aus dem Deep-Sleep-Modus aufwacht.
Nun schaute ich mir den Deep-Sleep-Modus genauer an und wurde schliesslich fündig: Um aus diesem Modus wieder zu erwachen muss am Controller GPIO16 mit RST (Reset) verbunden werden. Der Reseteingang ist HIGH, wenn der Controller arbeitet. Wird der Eingang auf LOW gezogen, führt der Controller einen Reset aus. Genau das passiert am Ausgang GPIO16, wenn der Deep-Sleep-Timer abgelaufen ist.
Da eine direkte Verbindung zwischen GPIO16 und RST aber verschiedenen anderen Funktionen im Weg steht, schalten viele Anleitungen noch einen Widerstand in Reihe. Dieser Widerstand muss dann aber exakt so bemessen sein, dass GPIO16 beim Aufwachen und gleichzeitig andere Funktionen, trotz HIGH-Pegel an GPIO16 im Tiefschlaf, RST auf LOW ziehen können.
Problematisch an diesem Widerstand ist also die richtige Dimensionierung. Der Widerstand darf nicht zu klein sein, da RST sonst nicht mehr angesteuert werden kann und gleichzeitig darf der Widerstand nicht zu groß sein, da sonst das Aufwachen nicht mehr funktionert. Leider ist der „richtige“ Wert auch von äußeren Einflüßen wie beispielsweise der konkreten Versorgungsspannung abhängig. Daher hat der 1 kΩ Widerstand elf Monate lang funktioniert und dann plötzlich nicht mehr. Die bessere Lösung ist eine Schottky-Diode zu verwenden:
Die Diode erlaubt es GPIO16 zum Aufwachen RST auf LOW zu ziehen und schützt gleichzeitig den Ausgang wenn andere Funktionen das auch tun.