Einsteiger

Wetterstation für Einsteiger

In der schlichtesten Variante unserer Wetterstation verwenden wir als Mikrokontroller den ESP32, welcher über Kabel mit dem BME280 Sensor für die Wetterdatenerfassung verbunden wird.

Beim Kauf beider Komponenten, die im Fachjargon auch Integrated Circuit (also integrierter Schaltkreis) oder kurz IC genannt werden, wirst Du feststellen, dass diese Komponenten in unterschiedlichen Varianten von unterschiedlichen Herstellern gefertigt werden. Die Funktion der Komponenten bleibt aber gleich, denn BME280 und ESP32 sind nämlich nur die Typbezeichnungen der verlöteten ICs auf den Platinen. Auf den Platinen selbst befinden sich noch weitere Bauteile, die für eine einfachere Handhabung der ICs nötig sind. Diese Platinen nennt man auch Breakout- oder Entwicklerboards und sie können je nach Hersteller kleinere Unterschiede hinsichtlich der Größe oder der Anschlussmöglichkeiten aufweisen.

Benötigte Komponenten:

  • 1x Sensor BME280
  • 1x Mikrocontroller ESP32
  • Diverse Kabel
  • Lötkolben
  • Optional: 1x Steckbrett (Breadboard)

Im Folgenden erklären wir Dir alle notwendigen Schritte, um eine funktionsfähige Wetterstation nach unserem Beispiel zu bauen und zu programmieren.  Nach Abschluss der Schritte bist Du in der Lage, die Messwerte in Deiner Umgebung ganz einfach in Deinem Webbrowser anzuschauen.

Schritt 1 – Sensor und Mikrocontroller vorbereiten

BME280

Der BME280 (Abbildung 1) ist ein von Bosch entwickelter Umweltsensor, der Temperatur, Luftfeuchtigkeit und Luftdruck messen kann. Achte beim Kauf auf das E in BME280, es gibt nämlich noch den sehr ähnlich klingenden BMP280, dieser kann aber keine Luftfeuchtigkeit messen, sondern er ist speziell für Druckmessungen ausgelegt. Für den BME280 findest Du hier mehr Details.

Abbildung 1: BME280 mit beiliegenden Stiftleisten

Beim Kauf dieser Sensoren ist es meistens nötig die Stiftleisten noch anzulöten da diese nur lose mitgeliefert werden. Löte so, dass nur das kürzere Stiftende auf der Oberseite (da wo der Chip drauf ist) rausguckt und löte die Stifte mit den entsprechenden Lötpads fest. Es wird empfohlen die Leisten in dieser Orientierung anzulöten, damit der Sensor möglich gute Messungen erstellen kann, da bei diese Anbringung Probleme wie Hitzestau und stehende Luft vermieden werden. Bei dem hier gezeigten Beispiel (Abbildung 2) wurde eine Stiftleiste mitgeliefert, die vorher noch auf die entsprechende Anzahl von vier (Anzahl der Anschlüsse) gekürzt werden muss.

Ein Bild, das Elektronik, Schild, Schaltkreis, Straße enthält.

Automatisch generierte Beschreibung
Abbildung 2: So sollte die gekürzte Stiftleiste angelötet sein

ESP32

Beim Mikrocontroller ESP32 ist es aufgrund seiner Größe häufig so, dass die Leisten bereits angelötet sind, es kommt aber je nach Variante teils vor, dass die entsprechenden Stiftleisten nur beiliegen und noch verlötet werden müssen. Die Anzahl der zur Verfügung stehenden Anschlüsse (PINs) kann je nach Modell stark variieren.

Abbildung 3: Beispiel eines ESP8266 mit beiliegenden Leisten

Als Beispiel dient der leistungsschwächere ESP8266 in der Ausführung 12F (Abbildung 3), welcher der Vorgänger des ESP32 ist. Bei dieser Version zum Beispiel liegen drei 2er Sets unterschiedlicher Möglichkeiten PINs an das Board anzulöten vor. Entweder Stiftleisten, Buchsenleisten mit kurzen Stiften oder Buchsenleisten mit langen Stiften. Die Buchsenleisten mit langen Stiften bieten dabei die größt möglichste Flexibilität an unterschiedliche Kabel zu verwenden, da dieser die Vorteile von Buchsen- und Stiftleisten kombiniert, aber dafür auch weniger Platzsparend sind. Häufig ist die Ausrichtung so gewählt, dass die Buchsen hierbei auf der Seite des Chips (ESP8266) herausstehen sollen und bündig mit der Platine abschließen. Angelötet wird dann entsprechend auf der anderen Seite mit den langen Stiften.

Schritt 2 – Sensor und Mikrocontroller verbinden

Wir beginnen mit der Verkabelung des Sensors an den Mikrocontroller. Für die Kabel werden sogenannte Jumper Wires benutzt, da diese biegbar sind und bereits die benötigten Stecker / Buchsen besitzen.

Die hier verwendete Version eines BME280 sitzt auf einem Breakoutboard mit vier Anschlüssen: VIN, GND, SCL, SDA. VIN und GND dienen hierbei der Stromversorgung des Boards. Bei den unterschiedlichen Varianten kann es vorkommen, dass anstatt VIN sowas wie VCC, 5V, oder auch 3V3 (steht für 3.3V) geschrieben wird. Das liegt daran, dass der BME280 mir einer Spannung von 1.8V arbeitet, eine zu niedrige Spannung und der Sensor arbeitet nicht, eine zu hohe Spannung und wir riskieren eine Beschädigung des Sensors.

Aus diesem Grund befinden sich auf den meisten Breakoutboards sogenannte Spannungswandler, die die Spannung z.B. von 3.3V auf die benötigten 1.8V herunter regeln. Dies sorgt für eine konstante Versorgungsspannung des ICs und schützt gleichzeitig vor einer Überspannung. Achtet also beim Kauf der Sensoren darauf, was die maximale erlaubte und die minimal nötige Eingangsspannung auf dem Breakoutboard ist.

Abbildung 4: So werden die vier Kabel angeschlossen
Abbildung 5: Die einfachste Art vier Kabel anzubringen

In dem hier gezeigten Beispiel können wir eine Eingangsspannung von bis zu 5 Volt an VIN anlegen. Auf dem Board des ESP32 befindet sich mit der Bezeichnung 3V3 ein 3.3V Anschluss. Wir können also diesen Anschluss für die nötige Spannung nehmen und verbinden VIN des BME280 mit der 3V3 des ESP32. Wir könnten natürlich auch den 5V Anschluss des ESP32 verwenden, dies würde aber „Energie verschwenden“ und könnte langfrisitg zu Temperaturproblemen führen. Grund dafür ist, dass ein Spannungswandler grob gesagt, die überschüssige Energie in Wärme umwandelt, in diesem Fall soll von 3.3V auf 1.8V geregelt werden. Hätten wir uns also für den 5V Anschluss entschieden, so würde mehr Wärme entstehen, da nun ein Überschuss von 3.2V anstatt der 1.5V umgewandelt werden müsste. Um die Spannungsversorgung abzuschließen müssen wir noch den GND (englisch: ground, zu deutsch: Masse) Anschluss des Sensors mit dem GND Anschluss (manchmal nur mit G abgekürzt) des Mikrocontroller verbinden und haben somit einen geschlossen Stromkreis.

Damit der ESP32 auch die Messungen des Sensors auslesen kann, müssen noch die Datenleitungen verbunden werden. Dies wären in diesem Fall die Anschlüsse SCL und SDA des Sensors. SCL und SDA werden für die Kommunikation über einen sogenannten I2C Bus verwendet. Auch hier kann es je nach Variante vorkommen, dass nicht unbedingt nur die Anschlüsse SCL und SDA auf dem Sensor vorhanden sind, sondern dass diese mehr als nur diebisher gezeigten vier Anschlüsse aufweisen. Diese Varianten erlauben meist dann noch die Kommunikation über SPI, wir beschränken uns aber auf I2C.

Bei Geräten, die über einen I2C Bus miteinander kommunizieren, ist es wichtig zu wissen das die Kommunikation über so genannte Bus-Adressen abläuft. Bei dem vom uns genutzten Breakoutboard des BME280 ist die Standardadresse 0x75. Diese kann auf 0x76 geändert werden, indem man die drei offenen rechteckigen Lötpads unterhalb des Chips umlötet. Im Standardfall sind die drei Lötpads separat als drei silberne Flächen zu sehen, welche der Konfiguration für die Adresse 0x75 dient. Wenn wir nun mit genügend Lötzinn die beiden linken äußeren Pads mit einander verbinden, sodass eine große silberne Fläche entsteht, haben wir die Adresse von 0x75 auf 0x76 geändert. Dies ist allerdings nur erforderlich, wenn Du mehrere Sensoren über den selben Bus mit dem Mikrokontroller verbinden möchtest.

Durch die Beschriftung des Sensors ist die Belegung/Funktion der PINs und die Verdrahtung auf der Seite des Sensors eindeutig. Das gilt jedoch nicht für den Mikrocontroller. Um herauszufinden welche PINs welche Bedeutung haben, gibt es die sogenannten PinLayouts, womit die möglichen Funktionen eines PINs beschrieben werden. Es ist nämlich so, dass einzelne PINs häufig eine Mehrfachbelegung mit unterschiedlichen Funktionen aufweisen. In unserem Fall wären die benötigten PINs D22 = SCL und D21 = SDA. Diese verbinden wir nun mit dem jeweiligem SCL und SDA des Sensors und haben somit alle nötigen Verbindungen (siehe Tabelle 1).

BME 280ESP32Farbe in Zeichnung
VIN>3V3>Rot
GND>G>Schwarz
SCL>D22>Gelb
SDA>D21>Grün
Tabelle 1: Verbindung der PINs des Mikrocontrollers und des Sensors

Schritt 3 – Sensor und Mikrocontroller verbinden (optional)

Um das Ganze etwas stabiler und aufgeräumter zu gestalten, kannst Du den Sensor und den Mikrocontroller auf einem Steckbrett (engl. Breadboard) aufbauen.

Breadboards bestehen aus fest verdrahteten Reihen mit eingelassenen Buchsen in die Stifte eingesteckt werden können. Dies erlaubt schnelle experimentelle Aufbauten ohne Löten und gibt Deinen Komponenten den nötigen halt. Das Standardraster ist dabei fast immer 2.54 mm.

Achte beim Einstecken der Komponenten darauf, dass Du sowohl beim Sensor aber vor allem auch beim Mikrocontroller die PINs gerade und mit gleichmäßigem Druck in das Breadboard steckst, um ein Verbiegen der Stifte zu vermeiden. Dasselbe gilt auch beim Herausziehen, da hier häufig aufgrund der Länge der Mikrocontroller diese schräg herausgenommen werden und somit die Stifte verbiegen.

Bevor Du die Komponenten einsteckst, kannst Du die benötigten Leitungen auf dem Breadboard mit Drahtbrücken legen. Im Gegensatz zu den zuvor genutzten Jumper Wires sind diese fester und somit weniger biegbar. Drahtbrücken gibt es fertig mit unterschiedlichen längen und sie liegen nach dem Einstecken flach auf dem Breadboard auf.

Bei der Benutzung von Jumper Wires ist speziell hier eine kleine Besonderheit zu beachten. Der ESP32 in dieser Variante ist so breit, dass nur eine Reihe für mögliche Anschlüsse am Breadboard übrig bleiben. In Abbildung 6 ist gut zu sehen das nur auf der rechten Seite eine freie Reihe übrig bleibt. Dies führt dazu, dass die Stromversorgung mit 3.3 Volt nur durch eine kleine Hilfsdrahtbrücke erfolgen kann. Auf Abbildung 7 ist am roten Jumper Wire zu erkennen, dass dieser in eine Reihe gesteckt ist, in der eine kleine gelbe Drahtbrücke steckt. Diese ist mit dem 3V3 des ESP32 verbunden. Alternativ könntet ihr das Kabel auch einfach auf die 3V3 auflöten.

Abbildung 6: Breadboard mit Drähten
Abbildung 7: Breadboard mit Jumper Wire

Schritt 4 – Entwicklungsumgebung vorbereiten

Jetzt fehlt nur noch die Programmierung des ESP32. Um uns das Leben einfacher zu machen, nutzen wir die frei verfügbare Arduino IDE (integrated development environment, zu deutsch: integrierte Entwicklungsumgebung). Die Welt rund um den Arduino erfreut sich einer großen Community und bietet viele Möglichkeiten schnell und einfach Mikrocontroller der Arduino Familie zu programmieren. Obwohl der ESP32 nicht zu dieser Familie gehört, kann er nach entsprechender Installation auch mit der Arduino IDE verwendet werden. Zunächst fangen wir mit der Installation der Arduino IDE an.

Lade dazu auf folgender Seite https://www.arduino.cc/en/Main/Software die entsprechende Software runter und installiere sie anschließend. Du kannst auch den Web Editor nutzen, musst dann aber dementsprechend einen Account anlegen.

Nach dem Abschluss der Installation startest Du die Arduino IDE und ein Fenster öffnet sich und Du kannst praktisch sofort mit der Programmierung anfangen.

Ein Bild, das Screenshot enthält.

Automatisch generierte Beschreibung
Abbildung 8: Grundfunktionen

Um Dein Programm aber auf den ESP32 zu laden (flashen) muss dieser erst noch installiert werden. Öffne dazu unter dem Reiter Datei die Voreinstellungen.

Unter „Zusätzliche Boardverwalter-URLs“ fügst Du die folgende URL hinzu: https://dl.espressif.com/dl/package_esp32_index.json und schließt nun das Fenster wieder.

Zusammenfassend ist also die Reihenfolge:

Datei-> Voreinstellungen -> Zusätzliche Boardverwalter-URLs

Jetzt kannst Du unter dem Reiter Werkzeuge auf Board und dann auf Boardverwalter klicken. Im Suchfeld gibst Du dann „esp“ ein und esp32 sollte in der Auswahl erscheinen. Klick drauf und wähle installieren aus. Die Installation sollte nun beginnen. Danach kannst Du auch dieses Fenster wieder schließen.

Ein Bild, das Screenshot enthält.

Automatisch generierte Beschreibung
Abbildung 9: Einstellungen öffnen
Ein Bild, das Screenshot enthält.

Automatisch generierte Beschreibung
Abbildung 10: Boradverwalter eintragen

Wähle jetzt unter dem Reiter Werkzeuge bei den Boards den entsprechenden von Dir gekauften ESP32 aus, in unserem Fall ist dies der Eintrag „ESP32 Dev Module.

Zusammenfassend ist also die Reihenfolge:

Werkzeuge->Board->Boardverwalter->Esp suchen->Installieren

und dann:

Werkzeuge->Board->ESP32 Dev Module

Ein Bild, das Screenshot enthält.

Automatisch generierte Beschreibung
Abbildung 11: Board installieren
Abbildung 12: Board auswählen

Nun bist Du bereit den Mikrocontroller zu programmieren. Damit der ESP32 aber mit dem BME280 kommunizieren kann, fehlt noch die Einbindung der Bibliothek für den Sensor. Das geht so leicht wie zuvor, dazu klickst Du auf den Reiter Werkzeuge und dann auf Bibliotheken verwalten. In dem kleinen Suchfeld gebst Du „BME280“ ein und klickst wie schon zuvor auf „installieren“.

Schritt 5 – Mikrocontroller programmieren

Auf unserer MoWeSta Github Seite findest Du unter Solo Beginner einen einfachen Beispielcode für Deine Wetterstation, der Dir die Messung der drei elementaren Werte Temperatur, Druck und Luftfeuchtigkeit erlaubt. Der bereitgestellte Code dient der privaten Nutzung daheim im privaten Netzwerk und ist ausschließlich für die private Nutzung gedacht. Der vorliegende Programmcode ist sehr einfach aufgebaut und soll Dir als Einstieg dienen, Du kannst den Code natürlich jederzeit ändern und Deinen Wünschen anpassen.

Im Code selbst wirst Du zu den einzelnen Zeilen einen kleinen Kommentar rechts beginnend mit „//“ sehen. Die Kommentare sollen Dir helfen, die einzelnen Teile des Codes besser zu verstehen. Der hier geschriebene Code produziert eine HTML Seite, die von einem Webbrowser angezeigt werden kann. In diesem Beispiel wird eine kleine Tabelle mit den drei Einträgen, Temperatur, Druck und Luftfeuchtigkeit erzeugt.

Solltest Du mit Deinem Code zufrieden sein oder das Beispiel einfach so hinnehmen wie es ist, dann muss noch ein USB-Kabel an den ESP32 angeschlossen werden, um diesen zu programmieren (flashen). Meistens verfügt ein Mikrocontroller Entwicklerboard über einen Micro-USB Anschluss, über den der Mikrocontroller programmiert werden kann und der gleichzeitig auch der Stromversorgung dient.

Nach dem Einstecken eines USB-Kabels sollte ein Lämpchen (LED) aufleuchten und kurz unregelmäßig blinken. Dies bedeutet für euch das die Stromversorgung steht. Solltest Du einen Mikrocontroller benutzen, bei dem bereits einmal ein Programm installiert wurde, so kann das Blinkmuster anders sein. Um nun Dein Programm auf den ESP32 hochzuladen, musst Du zusätzlich noch den Port innerhalb der Arduino IDE auswählen. Die Auswahl findest Du unter den Reiter Werkzeuge und dann Port.

Ist kein Gerät angeschlossen, so ist dieser Menüpunkt möglicherweise ausgegraut. Normalerweise sollte der Port automatisch nach dem Einstecken des USB-Kabels am Rechner und am Mikrocontroller auf den richtigen Port gesetzt werden und so etwas wie „COM3“ ausgewählt sein. Sollten mehre Geräte angeschlossen sein, musst Du zunächst den richtigen Port finden. Dabei kannst Du normalerweise wenig falsch machen, denn die Arduino IDE wird sich melden, wenn der Mikrocontroller nicht programmierbar ist oder Du den falschen Port ausgewählt hast. Solltest Du es genauer wissen wollen, so kannst Du unter Windows unter dem Gerätemanager herausfinden, welchem Gerät welcher Port zugewiesen wurde.

Nachdem ihr alles in der IDE zum Flashen vorbereitet habt, kannst Du nun oben links auf das zweite Symbol von links mit dem „kleinen Pfeil nach rechts“ klicken und die Arduino IDE fängt an Deinen Code auf Fehler zu überprüfen und diesen dann nach erfolgreichem Test auf den ESP32 zu übertragen.

Nach dem Flashen des Microcontrollers kannst Du die IP über den Serial Monitor der Arduino IDE auslesen. Dazu klickst Du oben rechts auf die „kleine Lupe“ und ein weiteres Fenster sollte sich öffnen. Wähle in diesem Fenster unten rechts die Baudrate aus die Du auch in dem Code eingegeben hast, sonst wirst Du nur Hieroglyphen sehen.

Ein Bild, das Screenshot enthält.

Automatisch generierte Beschreibung
Abbildung 13: So sieht die fertige Webseite aus

Sofern Du Deine WLAN-Daten korrekt in Dein Programm eingetragen hast, wird sich der ESP32 in Deinem WLAN einklinken und sollte von Deinem WLAN Router eine IP-Adresse zugewiesen bekommen. Gib nun die angezeigte IP in Deinen Webbrowser ein und Du wirst die Sensordaten schön angeordnet in einer einfachen Tabelle auf Deinem Monitor sehen. Solltest Du keine IP-Adresse in Deinem seriellen Monitor sehen, so lass das Fenster auf und drück beim Board des ESP32 auf den „Reset Knopf“ beschriftet mit „RST“. Du solltest merken das im seriellen Monitor erst seltsame Zeichen angezeigt werden, aber dann der Text aus dem Setup fürs Verbinden mit dem Netzwerk angezeigt wird. Die angezeigten Punkte dienen dabei als Fortschrittsanzeige. Werden es immer mehr Punkte und keine IP-Adresse erscheint, überprüfe ob Deine eingegebenen Netzwerkdaten richtig sind.

Damit ist die Anleitung für Einsteiger abgeschlossen. Gratulation zu Deiner ersten eigenen Wetterstation!