Projektübersicht
Das Projekt umfasst die Entwicklung eines ESP32-basierten Temperaturdisplays, das die Innen- und Außentemperatur sowie Luftfeuchtigkeit anzeigt. Innenraumdaten werden über einen BME280-Sensor erfasst, Außenwetterdaten über eine API abgerufen. Eine kompakte Weboberfläche ermöglicht die Konfiguration von WLAN, API, Display-Einstellungen, Temperatur-Offset und Zeitplan. Der Deep-Sleep-Modus reduziert den Energieverbrauch, mit Berücksichtigung von Stromausfällen.
Hardware-Komponenten
- Mikrocontroller: ESP32-basierter Mikrocontroller mit WLAN und Deep-Sleep-Unterstützung. ESP32 auf Amazon
- LCD-Display (16x2, I2C): Monochromes Display mit I2C-Schnittstelle für die Anzeige von Zeit, Datum und Wetterdaten. LCD-Display auf Amazon
- BME280-Sensor: Sensor für Innentemperatur und Luftfeuchtigkeit (optional, I2C). BME280 auf Amazon
- 3D-gedrucktes Gehäuse: Maßgeschneidertes Gehäuse (3MF-Datei: Siehe Links ganz unten. Es hantelt sich dabei um ein Remake von diesem Projekt, bei dem zusätzlich im Slicer Befestigungslöcher und Löcher zur Kabeldurchführung für den BME280 Sensor auf der Unterseite hinzugefügt wurden).
- Zusätzliche Materialien: Verbindungsleitungen, Pull-Up-Widerstände (4.7kΩ für I2C, falls nicht integriert).
Anschlussplan
Komponente | Anschluss am ESP32 | Beschreibung |
---|---|---|
LCD-Display (I2C) | SDA (GPIO 21) | I2C-Datenleitung (Adresse 0x27). |
SCL (GPIO 22) | I2C-Taktleitung. | |
VCC | 5V oder 3.3V (je nach Modell). | |
GND | Masseverbindung für das Display. | |
BME280-Sensor (I2C) | SDA (GPIO 21) | I2C-Datenleitung (Adresse 0x76 oder 0x77, gemeinsam mit LCD). |
SCL (GPIO 22) | I2C-Taktleitung (gemeinsam mit LCD). | |
VCC | 3.3V (empfohlen). | |
GND | Masseverbindung für den Sensor. | |
ESP32 Stromversorgung | VIN / 5V | 5V-Eingang für die Stromversorgung. |
GND | Masseverbindung für den Mikrocontroller. |
Hinweise
- I2C-Pins: Standard-I2C-Pins (GPIO 21 für SDA, GPIO 22 für SCL). LCD und BME280 nutzen denselben Bus with unterschiedlichen Adressen.
- Pull-Up-Widerstände: 4.7kΩ Pull-Up-Widerstände für SDA und SCL erforderlich, falls nicht im Modul integriert.
- Stromversorgung: BME280 mit 3.3V betreiben, LCD je nach Modell mit 3.3V oder 5V.
- BME280 optional: Gerät funktioniert auch ohne BME280, zeigt dann nur Außenwetterdaten.
Software
Die Software wurde in C++ für die Arduino-Plattform geschrieben und nutzt folgende Bibliotheken:
- LiquidCrystal_I2C: Ansteuerung des LCD-Displays.
- WiFi: WLAN-Verbindung und Fallback-AP-Modus.
- WebServer: Bereitstellung der Konfigurationsoberfläche.
- HTTPClient: Abruf der Wetterdaten von der API.
- ArduinoJson: Verarbeitung der API-Daten.
- time: Zeit- und Datumsverwaltung mit NTP-Synchronisation.
- Preferences: Persistente Speicherung von Einstellungen.
- Adafruit_Sensor: Basis für BME280-Sensor.
- Adafruit_BME280: Steuerung des BME280-Sensors.
Funktionen
- Zeit- und Datumsanzeige: Synchronisation mit NTP-Server, automatische Sommer-/Winterzeit-Umstellung.
- Wetteranzeige: Innenraumdaten (BME280) und Außenwetterdaten (API), mit Wechselintervall.
- Weboberfläche: Kompakte Konfiguration von WLAN, API, Display, Zeitplan und Temperatur-Offset.
- Deep-Sleep-Modus: Energiesparmodus nach Zeitplan, mit Stromausfall-Erkennung.
- Fallback-AP-Modus: Zugriff auf die Konfigurationsoberfläche bei WLAN-Ausfall.
- Anpassbare Anzeige: Position und Sichtbarkeit von Datum, Uhrzeit, Temperatur und Luftfeuchtigkeit.
- Temperatur-Offset: Einstellbarer Offset für BME280-Innentemperatur (-5 bis +5°C).
- Willkommensnachricht: Anpassbare Nachricht mit Versionsanzeige beim Start.
Versionsverlauf
- V1.0 (01.01.2025): Initiale Version mit grundlegender Funktionalität.
- V1.1 (15.01.2025): Persistente Speicherung mit Preferences.
- V1.2 (01.02.2025): Fallback-AP-Modus.
- V1.3 (15.02.2025): Automatische Sommer-/Winterzeit-Umstellung.
- V1.4 (01.03.2025): Erweiterte Weboberfläche mit Statusanzeige.
- V1.5 (31.03.2025): Backlight-Steuerung.
- V1.6 (31.03.2025): Anpassbare Display-Anzeige.
- V1.7 (31.03.2025): Versionsnummer in Willkommensnachricht.
- V1.8 (31.03.2025): Display-Vorschau im Webinterface.
- V1.9 (31.03.2025): Firmware-Version im Webinterface.
- V2.0 (02.04.2025): Aus-/Einschaltfunktion nach Zeitplan.
- V2.1 (02.04.2025): Deep-Sleep während Display-Aus.
- V2.2b (02.04.2025): Innentemperatur via BME280.
- V2.3 (04.04.2025): Temperatur-Offset für BME280.
- V2.4 (04.04.2025): Kompakteres Webinterface.
- V2.5 (06.04.2025): Fehlerbehebungen, Modus für „kein BME280“, Stromausfall-Erkennung.
Aufbau und Verkabelung
Die Komponenten sind wie im Anschlussplan verkabelt. Das 3D-gedruckte Gehäuse bietet Platz für:
- LCD-Display und BME280-Sensor an der Oberseite für Sichtbarkeit und Messung.
- Mikrocontroller und Verkabelung sicher im Inneren.
Installation und Inbetriebnahme
- Hardware-Montage: Komponenten im Gehäuse befestigen und gemäß Anschlussplan verkabeln. BME280 optional.
- Software-Installation:
- Arduino IDE und ESP32-Board-Unterstützung installieren.
- Bibliotheken (LiquidCrystal_I2C, WiFi, WebServer, HTTPClient, ArduinoJson, time, Preferences, Adafruit_Sensor, Adafruit_BME280) herunterladen.
- Code in die Arduino IDE kopieren und auf den ESP32 laden.
- Testen:
- Gerät einschalten; Display zeigt Willkommensnachricht und Version (V2.5).
- WLAN-Verbindung prüfen (Fallback-AP bei Fehler: SSID „ESP32Fallback“, Passwort „123456“, IP 192.168.4.1).
- Weboberfläche aufrufen und Einstellungen anpassen, API URL (z.B.
http://goldau.online/projekte/wetter-api/index.php?plz=45897
) auf eigene PLZ anpassen. - Innen- und Außenwetterdaten, Zeitaktualisierung, Temperatur-Offset und Deep-Sleep-Modus testen.
- Stromausfall simulieren (USB trennen), um Erkennung zu prüfen.
Herausforderungen und Lösungen
- Energieverbrauch: Deep-Sleep-Modus mit Zeitplan und Stromausfall-Erkennung implementiert.
- WLAN-Verbindung: Fallback-AP-Modus für Konfiguration bei Verbindungsfehlern.
- BME280 optional: Modus für Betrieb ohne BME280, zeigt nur Außenwetterdaten.
- Temperaturgenauigkeit: Einstellbarer Offset für BME280-Innentemperatur.
- Webinterface: Kompakteres Design für bessere Benutzerfreundlichkeit.
Fazit
Das Projekt realisiert ein flexibles Temperaturdisplay mit Innen- und Außenmessungen, unterstützt durch ein kompaktes Webinterface und energieeffizienten Deep-Sleep-Modus. Die Unterstützung für optionalen BME280-Sensor und Stromausfall-Erkennung erhöht die Robustheit. Es ist anpassbar und erweiterbar durch Open-Source-Bibliotheken und 3D-Druck.
Anhang
- Amazon-Links für Komponenten:
- Mikrocontroller: ESP32 auf Amazon
- LCD-Display: LCD-Display auf Amazon
- BME280-Sensor: BME280 auf Amazon
- API-Beispiel:
http://goldau.online/projekte/wetter-api/index.php?plz=45897
Hans (2025-05-03 22:46:30)
Ich habe es nachgebaut. Hat ohne Probleme funktioniert!!