12 KiB
WT32-SC01 Plus – Wetter/Kalender/MVG Dashboard (Touch)
Letztes Update: 2026-08-02
1. Ziel
Ein WT32-SC01 Plus (ESP32-S3, 3.5" kapazitiver Touch-IPS-Display) zeigt Wetter, Kalendertermine und MVG-Abfahrten an – funktional analog zum bestehenden M5Stack-Dashboard, aber als eigenständiges, komplett neu geschriebenes Projekt in einem neuen, eigenen Git-Repository. Es wird kein Code aus dem M5Stack-Projekt übernommen; lediglich das UI-/API-Konzept und die Backend-Endpunkte werden wiederverwendet.
Kernunterschiede zum M5Stack:
- Touch statt Buttons: Navigation ausschließlich über Touch-Buttons auf dem Screen, keine physischen Tasten.
- Deutlich größeres Display (3.5" statt 2.0"), dadurch großzügigere, besser lesbare Darstellung von Listen (Abfahrten, Termine, Stundenvorhersage).
- Hochformat (Portrait) statt Querformat, damit sich Listen (MVG-Abfahrten, Termine, stündliche Vorhersage) besser vertikal darstellen lassen.
- Home-Screen als Buttons/Kacheln: Wetter- und Kalenderbereich sind selbst antippbare Kacheln, die direkt zur jeweiligen Detailseite führen (kein separater Toggle-Button nötig).
2. Hardware
- Gerät: WT32-SC01 Plus, ESP32-S3-WROVER (Dual-Core Xtensa LX7, PSRAM)
- Display: 3.5" IPS, Treiber-IC ST7796UI, physische Auflösung 480×320 (Querformat ab Werk), Ansteuerung über 8-Bit-Parallel-Interface (i80/8080)
- Software-Orientierung: Hochformat (Portrait) → logische Auflösung 320×480 (Breite × Höhe), per Display-Rotation im Code erzwungen
- Touch: Kapazitiver Touchcontroller FT6336U, I2C, Single-Touch ausreichend für diese App
- Sonstige Peripherie am Board: Lautsprecher, SD-Karte, RS485 – werden für dieses Projekt nicht benötigt
- Netzwerk: WLAN (Heimnetz, Zugriff auf
*.fritz.boxHosts, gleiches Netz wie M5Stack)
Hinweis: Pinbelegung (Display-Datenleitungen, Touch-I2C, Backlight, Reset) ist je nach Board-Revision leicht unterschiedlich dokumentiert und wird beim Projektstart anhand des konkret vorliegenden Boards verifiziert und in einer eigenen
board_pins.hfixiert.
3. Toolchain
- Build-System: PlatformIO (kein Arduino IDE), analog zum M5Stack-Projekt
- Grafik-Stack: LovyanGFX als Display-/Touch-Treiber in Kombination mit LVGL (Version 9) für UI-Widgets, Touch-Buttons, Listen und Scroll-Verhalten – bewährte Kombination für das WT32-SC01 Plus
- Deployment: Eigenes Deploy-Skript
scripts/deploy.sh, das ausschließlich Build + Flash durchführt (kein automatisches Öffnen des seriellen Monitors, kein Zusatzschritt danach). USB-Port wird standardmäßig automatisch erkannt, kann aber optional als Parameter übergeben werden (z.B../deploy.sh /dev/ttyUSB0) - WLAN-Zugangsdaten: Fest im Code, ausgelagert in
include/secrets.h, per.gitignorevom Repo ausgeschlossen. Einsecrets.h.examplemit Platzhaltern wird eingecheckt - Zeitsynchronisation: Keine eigene NTP-Sync im Gerät. Alle Zeitangaben werden 1:1 so übernommen und dargestellt, wie sie von den APIs geliefert werden (keine relative Umrechnung wie "in 20 Minuten")
- Versionskontrolle: Es wird von Anfang an ein neues, eigenes Git-Repository angelegt (
git init+ eigener Remote, z.B.wt32sc01-dashboard). Kein Fork und kein geteilter Code mit dem M5Stack-Repo – lediglich als Referenz/Vorbild verlinkt
4. Datenquellen (APIs)
Identisch zum M5Stack-Projekt, gleiche Backend-Services im lokalen Netz, JSON per HTTP GET. Response-Formate werden 1:1 übernommen, keine Änderungen am Backend nötig.
4.1 Wetter-API
- Endpoint:
/api/weather(konfigurierbar ininclude/secrets.h) - Liefert
current(aktuelles Wetter:temperature,symbol,description,emoji) undforecast(stündliche Vorhersage inkl.precipitation.probabilityundprecipitation.type) symbol(z.B.mo____,mb____,wb____) ist Basis für die Icon-Auswahl
4.2 Kalender-API
- Endpoint:
/api/events(konfigurierbar ininclude/secrets.h) - Liefert die nächsten 10 Termine, serverseitig chronologisch sortiert (
summary,start_at,end_at,all_day,status, u.a.) - Für den Home-Screen werden die ersten 2 Einträge verwendet, für die Detailseite alle 10
all_day-Termine werden anders dargestellt (nur Datum statt Uhrzeit); Zeiten werden unverändert übernommen
4.3 MVG-Abfahrten-API
- Endpoint:
/api/departures(konfigurierbar ininclude/secrets.h) - Liefert eine ungefilterte Liste aller Abfahrten (beide Stationen, U-Bahn/S-Bahn gemischt, Reihenfolge wie geliefert):
station,type,icon,line,destination,time_str,delay_min,cancelled,messages time_strwird direkt übernommen, keine eigene Zeitberechnung
5. Screens (Hochformat, 320×480)
5.1 Hauptseite (Home)
Ruhezustand nach Boot. Besteht aus großen, antippbaren Kacheln/Touch-Buttons, angeordnet untereinander (Portrait-Layout), im Kachel-Stil ähnlich der Referenzoptik (siehe Abschnitt 7):
- Wetter-Kachel (groß, oben): aktuelle Temperatur, Icon, Beschreibung, ggf. Regen-Hinweis-Badge. Antippen → Wetter-Detailseite
- Kalender-Kachel (groß, darunter): zeigt die nächsten 2 Termine (Summary + Datum/Uhrzeit,
all_daygesondert markiert) direkt auf der Kachel als Vorschau. Antippen → Kalender-Detailseite - MVG-Kachel (klein, unten, ohne Abfahrten-Vorschau – nur Icon/Label "MVG" bzw. "Abfahrten"): Antippen → MVG-Abfahrtsseite
Regen-Hinweis (weicher Schwellwert): Sobald irgendein Eintrag der nächsten 8 Vorhersage-Stunden precipitation.type == "rain" mit probability > 0 enthält, erscheint ein Regen-Hinweis-Icon/Badge auf der Wetter-Kachel.
Refresh: alle 10 Minuten (Wetter + Kalender neu abrufen)
5.2 Wetter-Detailseite
- Aktuelles Wetter ausführlicher als auf der Home-Kachel
- Stundenweise Vorhersage aus
forecastals vertikal scrollbare Liste (Zeit, Temperatur, Icon, Regenwahrscheinlichkeit) – dank Portrait-Format und größerem Display deutlich übersichtlicher als auf dem M5Stack - Zurück-Button unten links → zurück zur Hauptseite
5.3 Kalender-Detailseite
- Liste aller 10 Termine aus
eventsals vertikal scrollbare Liste (nicht nur die ersten 2 wie auf der Home-Kachel) - Zurück-Button unten links → zurück zur Hauptseite
5.4 MVG-Abfahrtsseite
- Liste aller Abfahrten aus
departures, ohne Filterung nach Station oder Linie, als vertikal scrollbare Liste (Linie, Ziel, Zeit, Verspätung, ggf. Ausfall-Hinweis) - Zurück-Button unten links → zurück zur Hauptseite
- Kein Background-Refresh (nur beim Betreten der Seite und via tick() alle 60 Sekunden)
6. Navigation (Touch)
Keine physischen Buttons – ausschließlich Touch-Bedienung:
| Aktion | Funktion |
|---|---|
| Tap auf Wetter-Kachel (Home) | Öffnet Wetter-Detailseite |
| Tap auf Kalender-Kachel (Home) | Öffnet Kalender-Detailseite |
| Tap auf MVG-Kachel (Home) | Öffnet MVG-Abfahrtsseite |
| Tap auf Zurück-Button (unten links, auf jeder Detailseite) | Zurück zur Hauptseite |
Zusätzlich: Automatischer Rücksprung zur Hauptseite nach 5 Minuten Inaktivität (keine Touch-Eingabe), unabhängig davon, auf welcher Seite man sich gerade befindet.
7. UI- und Icon-Konzept
Gleiches Grundprinzip wie beim M5Stack (hochwertig, farbig, dunkles Farbschema), zusätzlich angelehnt an die im Referenzbild gezeigte Kachel-Optik (große, abgerundete Rechtecke mit Icon + Label + kleinem Zusatzwert), übertragen auf ein Hochformat-Dashboard:
- Farbschema "iPhone Dark Mode"-Look: Sehr dunkles Schwarz (
#000000/#0B0B0D) als Hintergrund, weißer/heller Text (#FFFFFF/#F2F2F7) als Basis. Jede Home-Kachel bekommt einen eigenen, dezenten Akzentton als Kachel-Hintergrund (z.B. gedämpftes Blau für Wetter, eigene Akzentfarbe für Kalender, an MVV-Linienfarben angelehnte Töne für MVG), ähnlich den farbigen Funktionskacheln im Referenzbild, aber ruhiger/dunkler - Größere, touch-taugliche Kacheln: Mindestgröße der Home-Kacheln so bemessen, dass sie bequem mit dem Finger treffbar sind (Richtwert ≥ 80–100 px Höhe bei 320 px Breite); Zurück-Button ebenfalls als große, gut treffbare Fläche unten links
- Eigene prozedurale Icons als LVGL-Canvas-Objekte (keine externen Bitmap-Dateien), Icon-Set: Sonne/klar, bewölkt, Regen, Nacht-Varianten (Basis:
symbol-Feld), U-Bahn-Symbol, S-Bahn-Symbol, Kalender-Symbol, Regen-Hinweis-Symbol, Zurück-Pfeil, Retry-/Fehler-Symbol - Layout-Prinzipien: Klare visuelle Hierarchie (große Temperatur/Uhrzeit, kleinere Nebeninfos), hoher Kontrast schwarz/weiß als Basis, großzügiger als beim M5Stack dank 3.5"-Display und Portrait-Ausrichtung, dezente Akzentfarben statt vieler bunter Flächen
- Typografie: Deutlich größere, gut lesbare Schriftgrößen als beim M5Stack (mehr Platz vorhanden), wichtige Werte (Temperatur, Abfahrtszeit) groß und fett gegenüber Nebeninfos
8. Fehlerbehandlung
- Bei nicht erreichbarer API: Fehleranzeige auf dem betroffenen Screen bzw. der betroffenen Kachel (Retry-Icon + kurzer Text wie "Keine Verbindung"). Letzte gültige Daten bleiben erhalten (außer bei MVG: nur aktuelle Daten, da kein Background-Refresh)
- Retry-Auslöser: Automatisch beim nächsten regulären Refresh-Intervall, zusätzlich manuell durch erneuten Tap auf die betroffene Kachel bzw. durch Zurück- und wieder-Reinnavigieren in den Screen
9. Refresh-Intervalle
| Seite/Datenquelle | Intervall | Background-Refresh |
|---|---|---|
| Hauptseite (Wetter + Kalender) | 10 Minuten | Ja (data_manager) |
| MVG-Abfahrtsseite | 1 Minute | Nein (nur tick()) |
| Wetter-Detailseite | folgt Hauptseiten-Intervall (10 Minuten), da gleiche Datenquelle | Ja (data_manager) |
| Kalender-Detailseite | folgt Hauptseiten-Intervall (10 Minuten), da gleiche Datenquelle | Ja (data_manager) |
10. Projektstruktur (PlatformIO, neues Repository)
Eigenständiges, neues Git-Repository (z.B. wt32sc01-dashboard), von Anfang an mit git init + eigenem Remote, komplett unabhängig vom M5Stack-Repo:
/
├── .git/ (eigenes, neues Repository – kein Fork)
├── .gitignore (schließt u.a. include/secrets.h, .pio/ aus)
├── platformio.ini (Board: esp32-s3, LovyanGFX + LVGL9 als Dependencies)
├── include/
│ ├── secrets.h.example (Platzhalter für WLAN)
│ ├── secrets.h (lokal, nicht eingecheckt)
│ ├── board_pins.h (Display-/Touch-Pinbelegung für WT32-SC01 Plus)
│ ├── theme.h (Dark-Mode-Farbschema)
│ ├── text_utils.h (UTF-8->ASCII-Transliteration)
│ └── date_utils.h (Datumsformatierung ohne NTP)
├── src/
│ ├── main.cpp
│ ├── display/ (LovyanGFX-Setup, Rotation/Portrait-Konfiguration)
│ ├── ui/ (LVGL-Screens: Home, WeatherDetail, CalendarDetail, MVG; Kachel-/Button-Widgets)
│ ├── api/ (HTTP-Clients für Weather, Calendar, MVG – eigenständig implementiert)
│ └── icons/ (prozedurale LVGL-Canvas-Icons)
├── scripts/
│ ├── deploy.sh / deploy.cmd (Build + Flash via PlatformIO CLI, kein Monitor)
│ └── build.sh / build.cmd (Nur Build)
└── README.md (verweist als Referenz auf https://github.com/skoelle/m5stack-dashboard)
deploy.shruft im Kernpio run --target uploadauf; ohne Parameter automatische Port-Erkennung, mit Parameter (z.B../deploy.sh /dev/ttyUSB0) fester Port. Kein automatisches Starten des seriellen Monitors
11. Offene Punkte / Rückfragen
- Exakte Pinbelegung (Display-Datenbus, Touch-I2C-Pins, Backlight) muss anhand des konkret vorliegenden WT32-SC01-Plus-Boards verifiziert werden (Board-Revisionen unterscheiden sich in der Dokumentation leicht)
- Name des neuen GitHub-Repositories ist noch final zu bestätigen (Vorschlag:
wt32sc01-dashboard)