Projektübersicht
Dieses Projekt ist ein ESP32-C3-basiertes Runddisplay mit GC9A01-Panel, das Wetter-, Zeit-, Warn- und Statusinformationen auf einer kompakten, kreisförmigen Oberfläche darstellt. Die Anzeige nutzt LVGL für das Layout und LovyanGFX für die Display-Ansteuerung. Neben Temperatur, Luftfeuchtigkeit, Luftdruck, Datum und Uhrzeit werden auch Wetterwarnungen des Deutschen Wetterdienstes, NINA-Warnmeldungen, Pollenflug, Sonnenaufgang/-untergang, eine Wettervorhersage für morgen sowie frei pflegbare Hinweistexte angezeigt. Die eigentliche Geräteverwaltung läuft inzwischen zentral über eine serverseitige MAC-basierte Konfiguration mit MariaDB und Sammel-API; die lokale Setup-Webseite des Displays dient nur noch zur WLAN-Einrichtung.
Hardware-Komponenten
Das System besteht aus einem ESP32-C3 und einem runden GC9A01-Display mit SPI-Anbindung. Das verwendete Display besitzt die Anschlüsse VCC, GND, SCL, SDA, DC, CS und RST. Ein separater Backlight-Pin wird in diesem Aufbau nicht benötigt. Zusätzlich ist GPIO 5 für einen Piezo-Summer belegt, GPIO 1 ist für einen späteren Taster gegen Masse vorgesehen.
Anschlussplan
| Komponente | Anschluss am ESP32-C3 | Beschreibung |
|---|---|---|
| GC9A01 VCC | 3.3V | Stromversorgung des Displays. |
| GC9A01 GND | GND | Masseverbindung. |
| GC9A01 SCL | GPIO 4 | SPI-Taktleitung. |
| GC9A01 SDA | GPIO 6 | SPI-Datenleitung (MOSI). |
| GC9A01 DC | GPIO 2 | Data/Command-Steuerleitung. |
| GC9A01 CS | GPIO 7 | Chip-Select des Displays. |
| GC9A01 RST | GPIO 3 | Reset-Leitung des Displays. |
| Piezo-Summer | GPIO 5 | Akustische Signale, z. B. Minuten- oder Warnsignal. |
| Taster (reserviert) | GPIO 1 | Für einen späteren Taster gegen GND mit internem Pull-up vorgesehen. |
Hinweise
- SDA/SCL am Display: Diese Bezeichnungen meinen bei diesem Modul SPI und nicht I2C.
SDA = MOSI,SCL = SCLK. - Spannung: Das Display sollte in diesem Aufbau mit
3.3Vbetrieben werden. - BL-Pin: Das verwendete Display besitzt keinen separaten Backlight-Anschluss; die Hintergrundbeleuchtung wird nicht separat geschaltet.
- Summer: Der Piezo-Summer an
GPIO 5kann zentral aktiviert, deaktiviert oder zeitgesteuert genutzt werden.
Software
Die Firmware ist in C++ für die Arduino-Plattform geschrieben. Die Hauptlogik liegt in ESP32_C3_GCA01.ino, zusätzliche Konfigurationswerte in Config.h und die LVGL-Schrift-/Feature-Konfiguration in lv_conf.h. Der aktuelle stabile Stand basiert auf LVGL 9.5.0. Verwendet werden unter anderem folgende Bibliotheken und Systemkomponenten:
- LVGL 9.5.0: Aufbau und Darstellung der grafischen Oberfläche.
- LovyanGFX: Ansteuerung des GC9A01-Displays.
- WiFi: Verbindung zum WLAN sowie Hotspot-Modus für das Setup.
- WebServer: Bereitstellung der lokalen Setup-Weboberfläche.
- HTTPClient / WiFiClientSecure: Abruf externer HTTPS-APIs.
- ArduinoJson: Verarbeitung der JSON-Antworten externer Dienste.
- NVS / nvs_flash: Persistente Speicherung von WLAN-Daten, Cache-Werten und letzter gültiger Konfiguration.
- NTP / time.h: Synchronisierung von Uhrzeit und Datum inklusive Sommer-/Winterzeit.
- FreeRTOS Task + Mutex: Entkoppelte Netzwerkabrufe, damit die Anzeige während Updates nicht stehen bleibt.
- MariaDB + PHP: Zentrale Geräteverwaltung und serverseitige Konfigurationsspeicherung.
Datenquellen
Das Display kombiniert mehrere externe Datenquellen, die inzwischen serverseitig in einer Sammel-API gebündelt werden:
- Aktuelles Wetter: Eigene Wetter-API auf Basis von OpenWeather-Daten mit Temperatur, Luftfeuchtigkeit und Luftdruck.
- Wetter morgen: Open-Meteo-Vorhersage für den nächsten Tag.
- Sonnenaufgang / Sonnenuntergang: Sunrise-Sunset- beziehungsweise serverseitig aufbereitete Sonnenzeiten.
- Wetterwarnungen: Deutscher Wetterdienst (DWD), inklusive Fallback-Logik für kommunale Warnseiten.
- NINA-Warnmeldungen: BBK/NINA-API auf Basis eines separat konfigurierten ARS.
- Pollenflug: DWD-Open-Data-Datei
s31fg.json. - Server-Konfiguration: Zentrale Gerätekonfiguration über eine MAC-basierte Sammel-API auf
goldau.online.
Angezeigte Seiten
Das Display besitzt mehrere automatisch wechselnde Seiten. Welche Seiten aktiv sind, wird inzwischen zentral pro Display verwaltet.
- Wetter-Hauptseite: Uhrzeit, Datum, Temperatur, Luftfeuchtigkeit, Luftdruck, Trendindikatoren und ein konfigurierbarer Mittelbuchstabe.
- Tages-Min/Max: Minimal- und Maximalwerte von Temperatur, Luftfeuchtigkeit und Luftdruck.
- Wetter morgen: Vorhersage mit Wettertyp, Min/Max-Temperatur und Regenwahrscheinlichkeit.
- Sonnenzeiten: Sonnenaufgang und Sonnenuntergang.
- Systeminfo: WLAN, Serverstatus, IP, MAC, Uptime, Heap und RSSI.
- Letzte Aktualisierungen: Server-Sync, Datenquelle und letzte erfolgreiche Updates.
- NINA-Warnungen: Eigene Seite für aktive NINA-Meldungen, nur sichtbar bei aktiver Warnung.
- Hinweistext: Freier Text aus der zentralen Verwaltung.
- Wetterwarnungen: Eigene Detailseite für aktive DWD-Wetterwarnungen.
- Pollenflug: Eigene Detailseite für Polleninformationen, nur wenn Pollen gemeldet sind.
Setup-Prozess
Das System besitzt einen integrierten Einrichtungsmodus. Beim ersten Start ohne gespeicherte WLAN-Daten, bei WLAN-Problemen oder nach bestimmten Firmware-Änderungen wird ein lokaler Hotspot geöffnet. Die Zugangsdaten werden direkt auf dem Display inklusive QR-Code angezeigt.
- Hotspot-Name:
Display-Setup - Passwort:
display123 - Aufruf: Browser öffnen und
192.168.4.1aufrufen
Über die lokale Setup-Webseite werden nur noch die WLAN-Daten geändert. Alle übrigen Einstellungen werden zentral über die MAC-Adresse des Displays verwaltet.
Zentrale Administration
Die eigentliche Geräteverwaltung erfolgt serverseitig über eine MariaDB-gestützte Admin-Seite. Jedes Display identifiziert sich über seine MAC-Adresse. Dadurch lassen sich mehrere Geräte getrennt konfigurieren, simulieren und überwachen.
- Admin-Seite:
multi_display_devices_admin.php?mac=MAC_ADRESSE - Status-Seite: Übersicht aller Displays, die sich in den letzten 5 Minuten gemeldet haben.
- Live-Vorschau: Browser-Vorschau des Displays mit aktuellen Live-Daten.
- Installationsskript:
multi_display_install.phprichtet MariaDB und die benötigte Tabelle direkt per PHP ein.
Besondere Funktionen
- Sommer-/Winterzeit: Automatische Umstellung über die konfigurierte deutsche Zeitzone.
- Trendanzeige: Temperatur, Luftfeuchtigkeit und Luftdruck werden mit Trendindikatoren ausgewertet.
- Persistente Caches: Wetterdaten, Sonnenzeiten, Vorhersage, Pollenflug, Geo-Daten und Konfigurationsdaten bleiben lokal gespeichert.
- QR-Codes: Je nach Zustand zeigt das Display WLAN-QR, Aktivierungs-QR oder einen QR-Code zum lokalen Webinterface.
- Warnoptik: Bei aktiver Wetterwarnung wird der Hintergrund dunkelrot, zusätzlich erscheint ein gelbes
!. - NINA-Farblogik: Aktive NINA-Meldungen werden je nach Warnstufe farblich hervorgehoben:
Minorgelb,Moderateorange,Severerot,Extremedunkelrot. - Akustische Signale: Der Summer kann deaktiviert werden oder alle 60 Sekunden beziehungsweise 60 Minuten piepen; bei NINA
SevereoderExtremegibt es zusätzlich eine deutlich auffällige Mehrton-Sequenz. - Warnsimulation: Pro Display lassen sich DWD- und NINA-Warnungen im Admin-Interface simulieren.
Installation und Inbetriebnahme
- Hardware anschließen: Display gemäß Anschlussplan mit dem ESP32-C3 verbinden.
- Arduino-Umgebung vorbereiten: ESP32-Board-Unterstützung sowie die benötigten Bibliotheken installieren.
- Firmware flashen: Das Projekt auf den ESP32-C3 hochladen.
- Ersteinrichtung: Falls noch keine gültigen WLAN-Daten gespeichert sind, öffnet das Gerät automatisch den Setup-Hotspot.
- WLAN konfigurieren: Über
192.168.4.1WLAN-Zugangsdaten eintragen. - Display zentral anlegen: Falls das Gerät noch nicht registriert ist, den Aktivierungs-QR scannen oder die MAC-Adresse in der Admin-Seite eintragen.
- Server konfigurieren: Farben, Seiten, Texte, NINA-ARS, Summer-Modus und optionale Simulationen zentral speichern.
- Betrieb prüfen: Nach erfolgreicher Verbindung erscheinen Uhrzeit, Wetterdaten, Warnungen, Pollenflug und weitere Seiten automatisch.
Herausforderungen und Lösungen
- Blockierende Netzwerkabrufe: Die Netzwerkanfragen wurden in einen separaten Hintergrund-Task ausgelagert, damit die Uhrzeit während Updates nicht stehen bleibt.
- Mehrere externe APIs: Statt viele einzelne Abrufe direkt auf dem ESP auszuführen, bündelt eine Sammel-API die Daten serverseitig und cached langsame Quellen.
- Parallele Schreibzugriffe: Die frühere JSON-Speicherung wurde durch eine MariaDB-Lösung ersetzt, damit Geräteverwaltung und Heartbeat robuster laufen.
- Wetterwarnungen: Für den DWD wurde eine Fallback-Logik integriert, falls Punktwarnungen leer sind, aber kommunale Warnungen existieren.
- NINA-Integration: Da NINA mit ARS und nicht mit Postleitzahlen arbeitet, wird der ARS separat pro Display gepflegt.
- Fehlerhafte Sonderzeichen: Problematische Umlaute und Sonderzeichen werden vor der Anzeige bereinigt, damit keine Platzhalter-Rechtecke erscheinen.
- Langsame Refresh-Zyklen: Koordinaten, Sonnenzeiten, Vorhersage und Pollenflug werden lokal und serverseitig zwischengespeichert.
Fazit
Das Projekt verbindet ein kompaktes ESP32-C3-System mit einem runden GC9A01-Display zu einem vielseitigen Informationsdisplay für Wetter, DWD- und NINA-Warnungen, Pollenflug, Sonnenzeiten, Systeminformationen und frei pflegbare Hinweise. Durch die zentrale MAC-basierte Verwaltung, die serverseitige Sammel-API, die MariaDB-Speicherung, die Browser-Vorschau und die QR-gestützte Einrichtung eignet sich das System sowohl für den privaten Einsatz als auch für öffentliche oder halböffentliche Informationsanzeigen.
