Wetterstation für Fortgeschrittene
Nachdem Du die Anleitung für Einsteiger erfolgreich abgeschlossen hast, erweitern wir jetzt die Software Deiner Wetterstation um eine Integration mit MoWeSta. Nach Abschluss der Schritte in dieser Anleitung kannst Du Deine Wetterstation über die mobile Anwendung mit MoWeSta verbinden. Danach wird Deine Wetterstation alle 10 Minuten eine Messung durchführen und diese im MoWeSta Dienst speichern. Über Dein MoWeSta Konto kannst Du dann jederzeit und von überall auf die Messungen zugreifen.
Benötigte Komponenten:
- Die Wetterstation aus der Anleitung für Anfänger
- Optional: 1x Powerbank
Der Hardwareaufbau für diese Anleitung ist identisch mit dem Aufbau, der in der Anleitung für Einsteiger beschrieben wird. Das Programm ist aber bereits für die Hardwareerweiterungen ausgelegt, die in der Anleitung für Experten beschrieben werden. So enthält der Quellcode beispielsweise Abschnitte, die eine LED steuern oder die die Spannung bei Batteriebetrieb überwachen. Für ein besseres Verständnis erklären wir Dir im Folgenden kurz die Struktur aller Programmteile, für die Beschreibung der erforderlichen Hardwareerweiterungen verweisen wir aber auf die nachfolgende Anleitung für Experten.
Schritt 1 – Programmcode herunterladen
Den Quellcode für das Programm findest Du auf unserer Github Seite im Ordner WEATHERSTATION. In diesem Ordner findest Du mehrere Arduino Dateien, die voneinander abhängen. Die Aufteilung in einzelne Dateien dient der besseren Übersichtlichkeit. Wenn du die Datei WEATHERSTATION.ino öffnest, werden alle Dateien in mehreren Tabs geöffnet. Du kannst ganz einfach zwischen den einzelnen Komponenten wechseln, indem Du auf den entsprechenden Tab klickst.
Der Compiler lädt alle weiteren Dateien in alphabetischer Reihenfolge, weshalb alle weiteren Code-Dateien mit dem Schema „x_“ beginnen, wobei „x“ jeweils durch einen in alphabetischer Reihenfolge aufsteigenden Buchstaben ersetzt wird. Diese Art der Namensgebung teilt dem Compiler mit, in welcher Reihenfolge alle Code-Dateien im Projektordner geladen werden sollen. Wundere Dich nicht das die Datei WEATHERSTATION als Start kein „a_“ besitzt und es keine „j_“ Datei gibt, dies wird nämlich häufig weggelassen, um Verwechslungen mit „i_“ zu vermeiden.
Schritt 2 – Bibliotheken installieren
Um den Programmcode verwenden zu können, musst Du jedoch noch eine zusätzliche Bibliothek installieren. Dazu gehst Du wie folgt vor. Klicke auf den Reiter Werkzeuge und dann auf Bibliotheken verwalten, um dann in dem kleinen Suchfeld „ArduinoJson“ einzugeben. Danach klickst Du auf Installieren, um die Bibliothek herunterzuladen.
Alternativ kannst Du die Bibliothek auch vorher herunterladen und lokal hinzufügen. Um diese einzubinden klickst Du auf den Reiter Sketch dann auf Bibliothek einbinden und dann auf ZIP-Bibliothek hinzufügen… . Es öffnet sich ein weiteres Fenster und Du navigierst bis zum Ordner ArduinoJson, der dem Beispielcode beiliegen sollte. Wähle den Ordner aus und klicke auf Öffnen.
Schritt 3 – Programm installieren
Wenn Du den Code nun auf Deinen ESP32 laden willst, dann geht das genauso wie zuvor, stelle das richtige Board und den richtigen Port ein, klicke auf Hochladen und fertig ist Deine neue Wetterstation.
Schritt 4 – Wetterstation einrichten
Wenn Du Dir das Programm anschaust wirst du feststellen, dass im Vergleich zum vorherigen Beispiel die Einbindung ins Netzwerk leicht anders ist. Deine Wetterstation wird nach erfolgreicher Programmierung nämlich ein WLAN Access Point sein. Das bedeutet, dass die Wetterstation zunächst ihr eigenes Netzwerk aufbaut.
Das Netzwerk hat den Namen „MoWeSta −WiFi“ und das Passwort „mowesta123456wifi“. Diesem Netzwerk muss man anschließend mit seinem mobilen Endgerät oder mit seinem WiFi fähigen Computer, beitreten. Danach muss man dem Gerät die SSID sowie das Passwort eines in der Nähe befindlichen WLAN-Netzwerkes mitteilen. Dazu kannst Du entweder die mobile Anwendung nutzen oder Du nutzt ein Programm, wie z.B. netcat, um eine Socketverbindung auf Port 8080 zu öffnen und die erforderlichen Konfigurationsinformationen zu übertragen.
Die Informationen müssen dabei dem folgenden Muster entsprechen:
{ 'ssid':'WLANNETZ', 'password':'WLANPASSWORT', 'id':'0', 'token':'abcdefghijkl', 'longitude':'-122.0312', 'latitude':'37.3318' }
Hierbei sind ssid und password die Zugangsdaten Deines WLAN-Netzes, mit dem sich die Wetterstation automatisch verbinden soll, token ein Device-Token, das bei der Erstellung der Wetterstation im Backend-Server generiert wird, longitude und latitude sind die WGS84 Koordinaten Deines Aufstellungsorts. Bei einer Einrichtung der Wetterstation über die Android- oder iOS-App, wird der gesamte Prozess automatisiert.
Die empfangenen Daten speichert die Wetterstation in ihrem EEPROM ab, so dass diese nach dem Abschalten der Wetterstation noch vorhanden sind und beim nächsten Hochfahren geladen werden. Falls Du die Daten nochmal ändern musst, kannst Du die Wetterstation erneut in den Setup-Modus bringen, indem du den Reset-Button lange gedrückt hältst. Nachdem das Gerät diese Daten erhalten hat, wählt es sich in Deinem Netzwerk ein und sendet fortan in regelmäßigen Abständen gemessene Wetterdaten an eine fest einprogrammierte IP-Adresse, die von MoWeSta.
Um die Wetterstation auch über eine Batterie betreiben zu können, muss der Stromverbrauch so gering wie möglich gehalten werden. Das realisiert die Wetterstation, indem sie sich die meiste Zeit (derzeit 10 Minuten) im Tiefschlaf befindet und nur für wenige Sekunden aufwacht, um die Messung durchzuführen und die Daten anschließend an MoWeSta zu senden. Im Tiefschlaf wird der Stromverbrauch der Steuerungseinheit der Wetterstation – der ESP32 – drastisch verringert, indem die CPU, WLAN, Bluetooth und der RTC-Speicher und RTC-Peripheriegeräte temporär ausgeschaltet werden.
Schritt 5 – Programm verstehen und anpassen (optional)
Wenn Du möchtest, kannst Du natürlich die Funktionen des Programms anpassen. Dazu beschreiben wir Dir im Folgenden kurz den Inhalt der Programmdateien.
- WEATHERSTATION: Dieser Codeabschnitt bildet den Start für unser Programm. Hier findest Du die grundlegenden Deklarationen für den Rest des Programms, über welche Bibliotheken hinzugefügt worden sind, welche Definitionen für die Hardwareanschlüsse vorgenommen worden sind, die Einrichtung des Access Point und einer Menge an Variablen und Funktionen.
- b_SETUP: Dieser Codeabschnitt wird beim Starten des Mikrocontrollers ausgeführt und legt die wesentlichen Eigenschaften wie Baudrate des Serials, Batteriestatus, Funktion der Anschlüsse und etc. fest. Da der ESP32 über zwei Cores verfügt, legen wir hier fest welche Aufgaben von welchem Core übernommen werden sollen. Core 0 ist speziell für den Reset_Task, welcher unter f_RESET zu finden ist. CORE 1 ist für b_SETUP und c_LOOP zuständig.
- c_LOOP: Das eigentliche Hauptprogramm welches, wie der Name vielleicht vermuten lässt, in einer Schleife ausgeführt wird. Der Code wird von oben nach unten durchgearbeitet und fängt dann wieder von vorne an. Hier sind auch die Events vorhanden, die definieren was passieren soll, wenn ein Knopf oder dergleichen gedrückt wird.
- d_HELPER: Diese Datei enthält im wesentlichen ein paar zusätzliche hilfreiche Funktionen für den EEPROM und Debugging Kommentare.
- e_LED: In dieser Programmdatei befindet sich alles rund um die LED-Ansteuerung.
- f_RESET: Die Wetterstation besitzt einen Reset-Button. Dieser ist mit zwei Funktionen belegt: Zum einen löst ein kurzer Druck des Knopfes einen Neustart des Systems aus, um die Wetterstation im Falle irgendeines, die grundlegenden Funktionen beeinflussenden, Fehlers nicht umständlich auseinanderzubauen und vom Strom Trennen zu müssen. Zum anderen wechselt die Wetterstation in einen Setup-Modus, wenn der Knopf eine bestimmte Anzahl an Sekunden (derzeit vier) gedrückt gehalten und dann losgelassen wird.
- g_WIFI: Hier befinden sich alle Funktionen mit Bezug zum WLAN-Management, wie der Aufbau des Access Point und der Verbindung als Client. Die Wetterstation verbindet sich bei jedem Systemstart automatisch mit dem zuletzt eingespeicherten WLAN-Netzwerk. Falls eine Verbindung nicht auf Anhieb möglich ist, beginnt die blaue LED nach einigen Sekunden an zu blinken. Dies signalisiert, dass keine WLAN-Verbindung besteht und die Wetterstation so nicht ordnungsgemäß arbeiten kann. Das ist entweder der Fall vor der ersten Konfiguration durch den Nutzer oder bei Problemen des bestehenden WLAN-Netzes. Nach einer erfolgreichen Konfiguration verbindet sich die Wetterstation automatisch mit dem gewünschten Netzwerk.
- h_RECEIVE_CLIENT_DATA: Der Empfang der Konfigurationsdaten für das Verbinden ins Heimnetz wird hier behandelt.
- i_READ_SENSOR_DATA: Hier werden Daten gespeichert und verarbeitet die von Sensoren kommen. Die bis zu zwei Umweltsensoren BME280 messen unabhängig voneinander die Lufttemperatur, Luftfeuchtigkeit und den Luftdruck. Zusätzlich werden noch die Batteriespannung und die Solarpanelspannung gemessen. Diese werden aber nur weiterverarbeitet, wenn die jeweilige Stromquelle auch wirklich angeschlossen ist. Des Weiteren werden Messung und Umrechnung aller Messdaten hier vorgenommen.
- k_UPLOAD_SENSOR_DATA: Hier findet die Datenweitergabe anMoWeSta statt. Alle aus i_READ_SENSOR_DATA genannten Messwerte werden auch zum Backend-Server gesendet. Dazu werden sie jedes Mal, wenn die Wetterstation aus dem Tiefschlaf aufwacht und eine aktive WLAN-Verbindung besteht, in einen JSON-String formatiert und über einen HTTP POST Request an eine fest definierte URI des Servers gesendet und dort weiterverarbeitet.
Schritt 6 – Wetterstation aufstellen
Bisher hast Du Dich vielleicht gefragt warum wir einen Mikrocontroller mit WLAN nutzen und diesen aber nur mit einem Kabel an einem Computer angeschlossen haben. Der Vorteil eines Mikrocontrollers ist im Gegensatz zu einem PC, dass die Stromversorgung jederzeit ohne größere Probleme abgeschaltet werden kann, ein PC dagegen sollte ordentlich heruntergefahren werden. Wird die Stromversorgung bei einem Mikrocontroller wiederhergestellt, so fährt dieser sehr schnell hoch und spielt einfach sein zuletzt aufgespieltes Programm ab.
Um Deine Wetterstation mobil zu gestalten und an einem beliebigen Ort zu legen, reicht es also vollkommen aus, eine Stromversorgung von über der minimalen nötigen aber auch unter der maximal zulässigen Spannung herzustellen. Dies kannst Du zum Beispiel über eine handelsübliche Powerbank für Smartphones erreichen. Die Powerbank stellt nämlich 5V zur Verfügung und kann einfach mit einem USB-Kabel an den Micro-USB-Anschluss des ESP32 angeschlossen werden.
Viel Spaß beim Experimentieren!