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.3V betrieben werden.
  • BL-Pin: Das verwendete Display besitzt keinen separaten Backlight-Anschluss; die Hintergrundbeleuchtung wird nicht separat geschaltet.
  • Summer: Der Piezo-Summer an GPIO 5 kann 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.1 aufrufen

Ü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.php richtet 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: Minor gelb, Moderate orange, Severe rot, Extreme dunkelrot.
  • Akustische Signale: Der Summer kann deaktiviert werden oder alle 60 Sekunden beziehungsweise 60 Minuten piepen; bei NINA Severe oder Extreme gibt 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

  1. Hardware anschließen: Display gemäß Anschlussplan mit dem ESP32-C3 verbinden.
  2. Arduino-Umgebung vorbereiten: ESP32-Board-Unterstützung sowie die benötigten Bibliotheken installieren.
  3. Firmware flashen: Das Projekt auf den ESP32-C3 hochladen.
  4. Ersteinrichtung: Falls noch keine gültigen WLAN-Daten gespeichert sind, öffnet das Gerät automatisch den Setup-Hotspot.
  5. WLAN konfigurieren: Über 192.168.4.1 WLAN-Zugangsdaten eintragen.
  6. Display zentral anlegen: Falls das Gerät noch nicht registriert ist, den Aktivierungs-QR scannen oder die MAC-Adresse in der Admin-Seite eintragen.
  7. Server konfigurieren: Farben, Seiten, Texte, NINA-ARS, Summer-Modus und optionale Simulationen zentral speichern.
  8. 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.