Wetterstation mit ESP8266 bzw. ESP32

27. Februar 2018

Die letzten 48 Stunden Wetterdaten von Osnabrück

Zunächst habe ich mich mit der technischen Umsetzung auseinander gesetzt. Zu Beginn des Projektes habe ich die Machbarkeit mit dem ESP32 Entwicklungsboard und BME280-Sensor überprüft. Anschließend habe ich recherchiert, welche Übertragungsart sich am besten für den geplanten Anwendungsfall eignet. Zunächst hatte ich geplant, die Übertragung über das MQTT Protokoll durchzuführen, diese verlangt jedoch eine Architektur, welche sich für meinen Anwendungsfall nur bedingt eignet. MQTT benötigt einen Broker, welcher als Knotenpunkt dient. Clients können zum Broker publishen, also Daten senden, oder einen Client abbonieren (subscribe). Dabei dient der Broker gewissermaßen als Server. Auf einem Raspberry-Pi ließe sich zwar so ein Broker umsetzen, da ich in meinen Tests herausgefunden habe, das sich die Daten auch per HTTP-Requests an einen Webserver übertragen lassen, entschied ich mich für diese Variante. Der Webserver ist ohnehin vorhanden und in Betrieb, so kann ich mir den zusätzlichen Betrieb eines Raspberry-Pi als zusätzlichen Server einsparen. Das ESP32 Entwicklungsboard, lässt sich zudem in einem Stromsparmodus betreiben, so dass verbrauchsintensive Funktionen nur bei Bedarf aktiviert werden müssen. Der Aufbau ist also ressourcenschonend.

Als Visualisierung habe ich mir die Diagramm Bibliothek Chart.JS angeschaut. Diese bietet viele Möglichkeiten zur Darstellung von verschiedenen Daten. Außerdem können die Diagramme dynamisch verändert werden, ohne neu generiert werden zu müssen. Umgesetzt ist die Bibliothek in JavaScript

Der Sensor und das Entwicklungsboard kosten zusammen um die 10 Euro. Der BME280 Sensor bietet eine hohe Messegenauigkeit bei kleiner Baugröße.

Programmiert habe ich das ESP32 mit Hilfe der Arduino-IDE. Zu Beginn habe ich nach Anleitungen für die Integration des BME280 Sensors gesucht. Nicht im Ersten, aber in Zweiten Anlauf habe ich den Sensor schließlich mit Hilfe einer externen Bibliothek1 auslesen können. Daraufhin habe ich das ESP32 mit meinem lokalen WLAN verbunden und eine API geschrieben, welche die Daten über HTTP-POST vom ESP32 zum Server schicken.
Der Code funktioniert Analog beim ESP8266.

Die Bibliotheken für die WLAN-Verbindung und HTTP-Requests werden vom Hersteller des ESP32 bereitgestellt.

In finalen Programm für das ESP32 werden die Sensor-Daten alle 15 Minuten ausgelesen und anschließend über HTTP-POST an die PHP-API gesendet. Wenn der Sendevorgang abgeschlossen ist, wird der so genannte Deep-Sleep-Modus aktiviert, in dem energieintensive Funktionen wie beispielsweise WLAN deaktiviert werden. In diesem Zustand verbrauchen der ESP32 und Sensoren nur sehr wenig Strom. So lässt sich der Aufbau wochenlang3 mit einem Akku betreiben.

Da die Daten direkt auf der MySQL-Datenbank bereitliegen, ist es nicht aufwändig, die Daten direkt in PHP einzulesen und in Arrays abzuspeichern. Dies geschieht in der Visualisierungswebseite. Über HTTP-GET Requests werden dem Skript mitgeteilt, welcher Datenzeitraum aus welcher Tabelle angezeigt werden soll. So können auf großem Bildschirm Daten über große Zeiträume1 visualisiert und mit anderen Daten verglichen werden.

Kommentare sind geschlossen.