ESP32 Wetterstation? So baust du dir eine

ESP32 Wetterstation? So baust du dir eine

Arduino, IoT / IT, Projekte
3 September 2020

In diesem Beitrag zeigen wir dir, wie du dir mit dem ESP32 deine eigene Wetterstation baust!

Kompakte Wetterstationen haben längst auch in privaten Haushalten Einzug gefunden. Und das kommt nicht von ungefähr: Denn die Temperatur, die Luftfeuchtigkeit und den Luftdruck messen zu können, ist mit großem Nutzen verbunden. So erleichtert die Kenntnis hinsichtlich des aktuellen Wetters nicht nur die Planung des Alltags. Die Messung der Luftfeuchtigkeit kann beispielsweise auch nützliche Informationen liefern, die die eigenen vier Wände betreffen. Liegt die Luftfeuchtigkeit nämlich bei mehr als 60 Prozent, besteht die erhöhte Gefahr, dass sich an den Wänden Schimmel bildet. Der Luftdruck kann wiederum Aufschluss über bevorstehende Wetterveränderungen geben. Du siehst: Eine Wetterstation bringt verschiedene Vorteile mit sich. Umso praktischer ist es, dass du ein solches Gerät nicht für teures Geld zu kaufen brauchst, sondern mithilfe weniger Software- und Hardware-Komponenten ganz leicht selbst herstellen kannst. Wie du hierbei am besten vorgehst, zeigen wir dir im Folgenden.

Das brauchst du, um deine eigene ESP32 Wetterstation zu bauen:

  • ESP32: Mit dem Microcontroller erhältst du einen leistungsstarken Allrounder für dein Projekt. Wie der Name bereits andeutet, ist das Gerät 32-bittig. Es verfügt über einen großen Speicher und ist mit WLAN und Bluetooth ausgestattet.
  • BME280 Sensor: Der verhältnismäßig preisgünstige Sensor ist in der Lage, sowohl die Temperatur als auch die Luftfeuchtigkeit und den Luftdruck zu messen. Somit stellt der BME280 für deine Wetterstation das ideale Hilfsmittel dar.
  • 40pin Jumper / Dupont Kabel Female – Female trennbar zum Verbinden der Bauteile.
  • Arduino IDE: Mithilfe dieser Software, der integrierten Entwicklungsumgebung von Arduino, wird der untenstehende Code geschrieben und anschließend hochgeladen.
  • Adafruit BME280 Library und Adafruit unified Sensor Library: Die beiden Bibliotheken sind zur Messung der Wetterdaten elementar.

WARENKORB

Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!

Tutorial: Schritt für Schritt zur eigenen ESP32 Wetterstation

  • Zuallererst musst du den Arduino Core für ESP32 installieren, damit der ESP32 in der Arduino IDE gefunden werden kann. Dazu öffnest du die Voreinstellungen und gibst anschließend im Feld „Zusätzliche Boardverwalter-URLs“ die URL https://dl.espressif.com/dl/package_esp32_index.json ein. Die Adresse für ESP8266-Boards lautet http://arduino.esp8266.com/stable/package_esp8266com_index.json. Mehrere URLs können mit einem Komma getrennt eingegeben werden.
Arduino IDE ESP32 Wetterstation Einstellungen

  • Unter den Menüpunkten „Board“ > „Boardverwalter“ kannst du das ESP32 Modul nun finden und installieren. Am einfachsten findet man das Modul mit der Eingabe on “ESP” in das Suchfenster.
ESP 32 Arduino IDE Boardverwaltung
  • Im Anschluss musst du die beiden Bibliotheken für den Adafruit BME280 und den Adafruit unified Sensor installieren. Hierzu ist es notwendig, Arduino DIE zu öffnen. Wähle die Menüpunkte „Sketch“  „Bibliothek einbinden“  „Bibliotheken verwalten“ und installiere dann die Bibliotheken.
Arduino IDE Bibliothek hinzufügen
Arduino IDE Library Manager
  • Nun geht es an die Schaltung: Verbinde den Microcontroller und den BME280 Sensor mithilfe der GPIOs. Die Beschriftungen der Stiftleisten dienen hierbei als wertvolle Hilfe.
ESP 32 Wetterstation Circuit

Die Pins verbindest du folgendermaßen miteinander:

  • BME280 „VCC“ (+) pin mit ESP32 „3.3V“ pin verbinden.
  • BME280 „GND“ (-) pin mit ESP32 „GND“ pin verbinden.
  • BME280 „SCL“ pin mit ESP32 „D22“ pin verbinden.
  • BME280 „SDA“ pin mit ESP32 „D21“ pin verbinden.
  • Im nächsten Schritt lädst du den folgenden Code auf deinen ESP32. Bitte beachte, dass du deine WLAN SSID und dein Passwort im Code ergänzen musst. Der Code lautet folgendermaßen:

#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme;

float temperature, humidity, pressure, altitude;

//Geben Sie hier Ihre WLAN ssid und passwort ein

const char* ssid = "****";  
const char* password = "****";  

WebServer server(80);             
 
void setup() 
{
  Serial.begin(115200);
  delay(100);
  
  bme.begin(0x76);   

  Serial.println("Verbinden mit ");
  Serial.println(ssid);

  //Verbindung herstellen
  WiFi.begin(ssid, password);

  //WIFI prüfen 
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
}

 
  Serial.println("");
  Serial.println("WiFi verbunden..!");
  Serial.print("IP= ");  Serial.println(WiFi.localIP());


  server.on("/", OnConnect);                 
  server.onNotFound(NotFound);

  server.begin();
  Serial.println("Start");
  

}

//////////////////////////// Hauptprogramm 

void loop() {
  server.handleClient();
}

void OnConnect() {
  temperature = bme.readTemperature();
  humidity = bme.readHumidity();
  pressure = bme.readPressure() / 100.0F;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  server.send(200, "text/html", SendHTML(temperature,humidity,pressure,altitude)); 
}

void NotFound(){
  server.send(404, "text/plain", "Not found");
}


//////////////////////////// HTML Benutzeroberfläche 

String SendHTML(float temperature,float humidity,float pressure,float altitude)    //Send temperature , humidity , pressure und altitude 

{
  
  String str = "<!DOCTYPE html> <html>\n";
  str +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  str +="<meta http-equiv=\"refresh\" content=\"2\">\n"; //Automatische Seitenaktualisierung
  str +="<title>ESP32 Wetterstation</title>\n";
  str +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  str +="h1 {color: #0000FF;}\n"; //
  str +="body{margin-top: 50px;} h1 {color: #0000FF;margin: 50px auto 30px;}\n";
  str +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  str +="</style>\n";
  str +="</head>\n";
  str +="<body>\n";
  str +="<div id=\"webpage\">\n";
  str +="<h1>BME280 Wetterstation</h1>\n";
  str +="<p>Temperature: ";
  str +=temperature;
  str +="°C</p>";
  str +="<p>Humidity: ";
  str +=humidity;
  str +="%</p>";
  str +="<p>Pressure: ";
  str +=pressure;
  str +="hPa</p>";
  str +="<p>Altitude: ";
  str +=altitude;
  str +="m</p>";  
  str +="</div>\n";
  str +="</body>\n";
  str +="</html>\n";
  
  return str;
}

Um den Code hochzuladen musst du zunächst das ESP32-Board mit deinem Computer verbinden und dann in der Arduino IDE dein Board auswählen („ESP32 Dev Module“ oder „DOITESP32 DEVKIT V1“):

Im nächsten Schritt musst du den Port auswählen, mit dem du deinen ESP32 mit deinem Computer verbunden hast. Unter Windows kannst du den richtigen Port auch über den Geräte-Manager unter dem Punkt Anschlüsse (COM & LTP) finden.

Unter Linux kannst du den Port mit Hilfe des Terminals und der folgenden Befehle finden:

ls /dev/ttyUSB*
# oder
ls /dev/ttyACM*

Nun gilt es, den Code für deine ESP32 Wetterstation zu laden: Dies wird durch Drücken des Buttons „Hochladen“ – rechts oben in der Ecke – veranlasst.

  • Nachdem du den Code hochgeladen hast, musst du den seriellen Monitor mit einer Baudrate von 115200 öffnen, um auf den Webserver zugreifen zu können. Den seriellen Monitor kannst du in der Arduino IDE mit einem Klick auf den Button rechts oben öffnen. Die Baudrate des Monitors kann mit der Tastenkombination STRG + T, b, 115200 geändert werden. Drücke anschließend die Taste EN auf deinem ESP32. Sofern keine Probleme vorliegen, wird die dynamische IP-Adresse, die dein Router erhalten hat, ausgegeben, woraufhin dir die Meldung „Start“ angezeigt wird.
  • Zuletzt musst du nur noch einen Browser laden und die IP-Adresse eingeben, die dir auf dem seriellen Monitor angezeigt wird. Jetzt kannst du die gemessenen Werte im Interface auslesen.

Mögliche Fehler

Wenn du den Sketch genannten Code auf deinen ESP32 laden möchtest und die Fehlermeldung

“A fatal error occurred: Failed to connect to ESP32: Timed
out… Connecting…“.

erhälst, bedeutet dies, dass dein Arduino nicht im flashing/uploading Modus ist. Wenn du in der Arduino IDE das richtige Board und den richtigen Anschluss ausgewählt hast, musst du den “Boot” Button am ESP32 gedrückt halten um das Problem zu lösen.

Fertige Wetterstation
Das Interface.

Geschafft! Deine ESP32 Wetterstation ist einsatzbereit

Glückwunsch, deine eigene ESP32 Wetterstation ist nun funktionsfähig! Tipp: Platziere deine neue Konstruktion am besten nicht in der Nähe von Heizungsrohren oder an Orten, die übermäßig viel direkte Sonneneinstrahlung abbekommen. Dies könnte nämlich die Temperaturmessung verfälschen. Eine Wand an der Nordseite deiner Wohnung eignet sich hingegen bestens als Standort.

Wir wünschen dir viel Spaß mit deiner Wetterstation und hoffen dir noch viele weitere Inspirationen für künftige Projekte lieferen zu können.

Solltest du Fragen zu diesem Projekt haben, kannst du diese gerne mit Hilfe der Kommentarfunktion an uns richten.

Euer BerryBase-Team!

Falls dich Projekte mit der Arduino IDE interessieren, schaue dir hier auch unsere weiteren Tutorials an.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 4.7 / 5. Anzahl Bewertungen: 6

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Kommentare

  1. Cooler Beitrag, aber irgendwie bin ich zu blöd, welche Bibliotheken müssen denn noch hinzugefügt werden? Oben steht 5 x #include aber im oberen Bereich ist nur die Rede von zwei? Bei mir fehlt immer die Bibliothek zu WebServer server(80). Aber sonst ne Mega Sache!

    1. Der Punkt “Bibliotheken einbinden/Bibliotheken verwalten” lädt die entsprechenden Bibliotheken in deine lokale Arduino IDE, die #include Anweisung im Code sorgt dann später dafür, dass die entsprechende Bibliothek beim compilieren genutzt wird. Das ist das Grundschema, dein Problem ist aber ein anderes…die wifi.h und webserver.h sind in deinem Fall noch nicht definiert und sind ggfs. durchaus Boardspezifisch. Solltest Du z.B. einen ESP8266 nutzen und dafür wie ganz am Anfang beschrieben unter Boardverwalter die entsprechenden Einträge gemacht und das ESP8266 Paket installiert haben, dann kannst Du im Quellcode vor “WiFi.h” direkt “ESP8266” einsetzen – also steht dann da “ESP8266WiFi.h” und das gleiche beim WebServer.h -> “ESP8266WebServer.h” und dann beim Aufruf der Funktion ein paar Zeilen weiter wird aus “WebServer server(80);” einfach “ESP8266WebServer server(80);” und schon sollte das klappen!

Hinterlasse ein Kommentar

XHTML: Sie können diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>