Das Projekt umfasst die Entwicklung einer energieeffizienten Wetterstation basierend auf einem ESP32-Mikrocontroller. Die Station erfasst Temperatur und Luftfeuchtigkeit (DHT22), Luftdruck (BMP180), Lichtstärke (BH1750) sowie die Batteriespannung und sendet die Daten per HTTP POST an einen Server. Bei Verbindungsproblemen speichert sie die Daten lokal im SPIFFS und sendet sie später. Die Station nutzt NTP für präzise Zeitstempel, unterstützt Sommer-/Winterzeit und wechselt nach jedem Messzyklus für 60 Sekunden in den Deep-Sleep-Modus, um Energie zu sparen. Fehler werden über eine rote LED mit verschiedenen Blinkmustern signalisiert, Erfolg über eine grüne LED.


ESP32 Wetterstation im Betrieb

Hardware-Komponenten

  • Mikrocontroller: ESP32-basierter Mikrocontroller mit Deep-Sleep-Unterstützung. ESP32 auf Amazon
  • DHT22-Sensor: Misst Temperatur und Luftfeuchtigkeit. DHT22 auf Amazon
  • BMP180-Sensor: Misst Luftdruck. BMP180 auf Amazon
  • BH1750-Sensor: Misst Lichtstärke. BH1750 auf Amazon
  • LEDs: Rote LED (Fehleranzeige) und grüne LED (Erfolgsanzeige). LEDs auf Amazon
  • Widerstände und Spannungsteiler: Für die Messung der Batteriespannung über ADC (15.1kΩ und 5.1kΩ).
  • Zusätzliche Materialien: Verbindungskabel und eine Stromquelle (z.B. LiPo-Akku oder Batteriegehäuse). Batteriegehäuse auf Amazon

Anschlussplan

Komponente Anschluss am ESP32 Beschreibung
DHT22 GPIO 19 Datenleitung für Temperatur- und Luftfeuchtigkeitsmessung.
3.3V Stromversorgung für den DHT22.
GND Masseverbindung für den DHT22.
BMP180 SDA (GPIO 21) I2C-Datenleitung für Luftdruckmessung.
SCL (GPIO 22) I2C-Taktleitung.
3.3V Stromversorgung für den BMP180.
GND Masseverbindung für den BMP180.
BH1750 SDA (GPIO 21) I2C-Datenleitung für Lichtstärkemessung.
SCL (GPIO 22) I2C-Taktleitung.
3.3V Stromversorgung für den BH1750.
GND Masseverbindung für den BH1750.
Rote LED GPIO 13 Ausgang für Fehleranzeige.
Grüne LED GPIO 12 Ausgang für Erfolgsanzeige.
Spannungsteiler (Batterie) GPIO 34 ADC-Eingang für Batteriespannungsmessung.
ESP32 Stromversorgung VIN / 3.3V Stromversorgung für den Mikrocontroller.
GND Masseverbindung für den Mikrocontroller.

Hinweise

  • I2C-Pins: Standard-I2C-Pins (GPIO 21 für SDA, GPIO 22 für SCL) für BMP180 und BH1750.
  • Spannungsteiler: Widerstände (15.1kΩ und 5.1kΩ) für die Batteriespannungsmessung, kalibriert mit Faktor 1.143.
  • Stromversorgung: Empfohlene Nutzung eines LiPo-Akkus mit passendem Spannungsregler.
  • LEDs: Widerstände für LEDs je nach Spezifikation hinzufügen (z.B. 220Ω).

Software

Die Firmware wurde in C++ für die Arduino-Plattform entwickelt und nutzt folgende Bibliotheken:

  • WiFi: Für die WLAN-Verbindung.
  • HTTPClient: Für HTTP-POST-Anfragen an den Server.
  • DHT: Ansteuerung des DHT22-Sensors.
  • Adafruit_BMP085: Ansteuerung des BMP180-Sensors.
  • BH1750: Ansteuerung des BH1750-Sensors.
  • SPIFFS: Lokale Speicherung von Daten und Stations-ID.
  • time: NTP-Zeitstempel und Sommer-/Winterzeit-Berechnung.
  • ESP32-spezifische Funktionen: Deep-Sleep und RTC-Daten.

Funktionen

  • Sensordatenerfassung: Messungen für Temperatur, Luftfeuchtigkeit, Luftdruck, Lichtstärke und Batteriespannung.
  • Datenübertragung: HTTP-POST an Server, lokale Speicherung bei Verbindungsverlust.
  • Zeitmanagement: NTP-Synchronisation mit Sommer-/Winterzeit-Unterstützung.
  • Energieeinsparung: Deep-Sleep-Modus für 60 Sekunden nach jedem Zyklus.
  • Fehleranzeige: Rote LED mit Blinkmustern für verschiedene Fehler (siehe unten).
  • Erfolgsanzeige: Grüne LED blinkt zweimal bei erfolgreicher Datenübertragung.
  • Konfiguration: Stations-ID über SPIFFS oder Server-Settings anpassbar.

Fehlercodes (Rote LED)

Die rote LED signalisiert Fehler durch unterschiedliche Blinkmuster, die alle 3 Sekunden wiederholt werden:

  • Kein Blinken (blinkState 0): Kein Fehler, System arbeitet normal.
  • 1 Blink (blinkState 1): Keine WLAN-Verbindung. Tritt auf, wenn die Station keine Verbindung zum WLAN herstellen kann (z.B. falsche SSID/Passwort oder Router nicht erreichbar).
  • 2 Blinks (blinkState 2): Ungültige DHT22-Daten. Signalisiert, dass Temperatur- oder Luftfeuchtigkeitswerte vom DHT22-Sensor ungültig sind (z.B. durch Sensorfehler oder Verbindungsprobleme).
  • 3 Blinks (blinkState 3): Zeitstempel-Fehler. Tritt auf, wenn die NTP-Zeit nicht abgerufen werden konnte (z.B. durch fehlende Internetverbindung).
  • Dauerleuchten (blinkState 4): HTTP-Verbindungsfehler. Signalisiert, dass die Datenübertragung zum Server fehlgeschlagen ist (z.B. Server nicht erreichbar oder ungültige Antwort).
  • 4 Blinks (blinkState 5): BMP180-Fehler. Tritt auf, wenn der BMP180-Sensor nicht initialisiert werden konnte oder ungültige Luftdruckwerte liefert.
  • 5 Blinks (blinkState 6): BH1750-Fehler. Signalisiert, dass der BH1750-Sensor nicht initialisiert werden konnte oder ungültige Lichtstärkewerte liefert.

Die grüne LED blinkt zweimal, wenn die Daten erfolgreich an den Server gesendet wurden, was einen reibungslosen Betrieb anzeigt.

Versionen

  • Version 1.0: Grundlegende Sensordatenerfassung und HTTP-POST.
  • Version 1.1: SPIFFS-Speicherung, LED-Fehler- und Erfolgsanzeige.
  • Version 1.2: Entfernung OTA-Updates, verbesserte Debugging-Meldungen.
  • Version 1.3: Aktuelle Version mit stabiler Funktionalität.

Aufbau und Verkabelung

Die Komponenten sind wie im Anschlussplan verkabelt. Ein wetterfestes Gehäuse wird empfohlen, um die Sensoren zu schützen. Die Verkabelung umfasst:

  • Sensoren und LEDs an den entsprechenden GPIO-Pins.
  • Spannungsteiler für die Batteriespannungsmessung.
  • Sichere Befestigung der Komponenten im Gehäuse.

Installation und Inbetriebnahme

  1. Hardware-Montage: Sensoren, LEDs und Spannungsteiler gemäß Anschlussplan verkabeln und in ein wetterfestes Gehäuse einbauen.
  2. Software-Installation:
    • Arduino IDE und ESP32-Board-Unterstützung installieren.
    • Bibliotheken (WiFi, HTTPClient, DHT, Adafruit_BMP085, BH1750, SPIFFS, time) herunterladen.
    • Code in die Arduino IDE kopieren und auf den ESP32 laden.
  3. Testen:
    • Station einschalten und serielle Ausgabe (115200 Baud) überprüfen.
    • Sensorwerte, LED-Anzeigen und Datenübertragung testen.
    • Deep-Sleep und WLAN-Verbindung überprüfen.

Herausforderungen und Lösungen

  • Energieverbrauch: Deep-Sleep-Modus für minimale Leistungsaufnahme implementiert.
  • Verbindungsprobleme: Lokale Datenspeicherung in SPIFFS und automatisches Senden bei Wiederherstellung der Verbindung.
  • Sensorfehler: Fehlererkennung und Anzeige über rote LED-Blinkmuster.
  • Zeitstempel: NTP-Synchronisation mit Sommer-/Winterzeit-Berechnung.

Fazit

Die Wetterstation ist ein robustes, energieeffizientes System zur Erfassung und Übertragung von Umweltdaten. Durch die Verwendung von Open-Source-Bibliotheken und einem modularen Design ist sie leicht anpassbar und erweiterbar. Die Kombination aus Deep-Sleep, lokaler Speicherung und detaillierter Fehleranzeige macht sie ideal für den Einsatz in abgelegenen Umgebungen.

  • Quellcode: Folgt als Wetterstation_BackupV1.3.ino, nutzt die genannten Bibliotheken.