Compare commits

..
4 Commits
Author SHA1 Message Date
stefankoelle 94b551738d README.md 2026-08-15 00:04:49 +02:00
stefankoelle 957f30600e LICENSE 2026-08-04 19:17:38 +02:00
stefankoelle c603b760da LICENSE 2026-08-04 19:09:58 +02:00
stefankoelle debec81c48 added license 2026-08-04 19:01:20 +02:00
37 changed files with 94 additions and 25 deletions
+6
View File
@@ -0,0 +1,6 @@
title: "wt32sc01 Dashboard"
emoji: "📱"
category: code
subcategory: "Maker Firmware"
status: active
stack: [PlatformIO, Arduino, LovyanGFX, LVGL 9, ArduinoJson]
+5
View File
@@ -121,3 +121,8 @@ Alle APIs liefern JSON per HTTP GET (URLs in `include/secrets.h` konfigurierbar)
Vorgängerprojekt mit M5Stack Core: <https://github.com/skoelle/m5stack-dashboard>
(Funktionalität übernommen, komplett neu geschrieben für WT32-SC01 Plus)
## Lizenz
MIT-Lizenz, hinterlegt in `LICENSE` und `README.md`.
Copyright-Header in allen Quelldateien (`.h`, `.cpp`): `// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License`
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+28 -24
View File
@@ -1,6 +1,6 @@
# WT32-SC01 Plus Dashboard
# 🖥️ WT32-SC01 Plus Dashboard
Wetter-, Kalender- und MVG-Abfahrten-Dashboard für den WT32-SC01 Plus
🌤️ 📅 🚇 Wetter-, Kalender- und MVG-Abfahrten-Dashboard für den WT32-SC01 Plus
(ESP32-S3, 3.5" kapazitiver Touch-IPS-Display, 320x480 im Hochformat),
gesteuert ausschließlich über Touch. Vollständig übernommene Backend-APIs
und Fachlogik aus dem [M5Stack-Vorgängerprojekt](https://github.com/skoelle/m5stack-dashboard),
@@ -15,14 +15,14 @@ Details zu Funktionsumfang, API-Formaten und Design-Entscheidungen
stehen in [`SPEC.md`](SPEC.md). Die Migrationshistorie (Vorgänger-Spec,
Migrationsplan, Task-Liste) liegt unter [`docs/`](docs/).
## Setup
## 🚀 Setup
1. PlatformIO CLI installieren:
1. 💻 PlatformIO CLI installieren:
```
pip install -U platformio
```
2. WLAN-Zugangsdaten + API-URLs eintragen:
2. 🔑 WLAN-Zugangsdaten + API-URLs eintragen:
```
cp include/secrets.h.example include/secrets.h
```
@@ -30,25 +30,25 @@ Migrationsplan, Task-Liste) liegt unter [`docs/`](docs/).
`*_API_URL`-Konstanten anpassen. `include/secrets.h` ist über
`.gitignore` vom Repo ausgeschlossen.
3. (Optional) Pinbelegung verifizieren: `include/board_pins.h` enthält die
3. 📌 (Optional) Pinbelegung verifizieren: `include/board_pins.h` enthält die
Referenz-Pinout für das WT32-SC01 Plus (ST7796 8-Bit-Parallel +
FT6336U I2C-Touch). Bei abweichender Board-Revision hier anpassen.
4. Gerät per USB anschließen.
4. 🔌 Gerät per USB anschließen.
## Build & Flash
## 🔨 Build & Flash
**Linux/macOS:**
**🐧 Linux/macOS:**
```
./scripts/deploy.sh
```
**Windows:**
**🪟 Windows:**
```
scripts\deploy.cmd
```
Falls mehrere serielle Geräte angeschlossen sind und die automatische
🔌 Falls mehrere serielle Geräte angeschlossen sind und die automatische
Port-Erkennung fehlschlägt, kann der Port explizit übergeben werden:
```
@@ -70,25 +70,25 @@ Falls du den Monitor separat sehen willst:
pio device monitor
```
## Bedienung
## 🎮 Bedienung
| Touch | Funktion |
|---|---|
| Tap auf Wetter-Kachel (Home) | Wetter-Detailseite |
| Tap auf Kalender-Kachel (Home) | Kalender-Detailseite |
| Tap auf MVG-Kachel (Home) | MVG-Abfahrtsseite |
| Tap auf Zurück-Button (unten links, Detailseiten) | Zurück zur Hauptseite |
| Tap auf Wetter-Kachel im Fehlerzustand | Manueller Retry |
| 🏠 Tap auf Wetter-Kachel (Home) | 🌤️ Wetter-Detailseite |
| 🏠 Tap auf Kalender-Kachel (Home) | 📅 Kalender-Detailseite |
| 🏠 Tap auf MVG-Kachel (Home) | 🚇 MVG-Abfahrtsseite |
| 🔙 Tap auf Zurück-Button (unten links, Detailseiten) | ⬅️ Zurück zur Hauptseite |
| 🔄 Tap auf Wetter-Kachel im Fehlerzustand | 🔁 Manueller Retry |
Nach 5 Minuten ohne Touch-Eingabe springt das Gerät automatisch zurück
zur Hauptseite. Die Hauptseite aktualisiert sich alle 10 Minuten, die
MVG-Seite jede Minute (nur beim Betreten der Seite, kein Background-Refresh).
## Fehlerbehandlung
## ⚠️ Fehlerbehandlung
Wenn eine API nicht erreichbar ist, werden die letzten gültigen Daten weiterhin angezeigt (außer bei MVG-Abfahrten, wo nur beim aktuellen Aufruf geladen wird), zusätzlich wird auf der betroffenen Kachel bzw. dem Screen eine Fehleranzeige gezeigt (Text + ggf. Retry-Icon).
**Retry:**
**🔄 Retry:**
- Automatisch beim nächsten regulären Refresh-Intervall (10 Min. bzw. 1 Min.)
- Manuell durch erneutes Antippen der Kachel im Fehlerzustand
@@ -122,16 +122,20 @@ Wenn eine API nicht erreichbar ist, werden die letzten gültigen Daten weiterhin
└── docs/ Migrationshistorie (SPEC-old, PLAN, TODO)
```
## Utilities
## 🛠️ Utilities
- **`text_utils.h`** Transliteriert deutsche Umlaute und Sonderzeichen von UTF-8 nach ASCII, damit LVGL-Labels Sonderzeichen korrekt darstellen können.
- **`date_utils.h`** Datumsformatierung ohne NTP-Abhängigkeit. Formatiert Zeitstempel aus den API-Responses in lesbare deutsche Strings.
- **`theme.h`** Dark-Mode-Farbschema für LVGL: sehr dunkler Hintergrund (`#000000`/`#0B0B0D`), heller Text, dezente Akzentfarben pro Kachel.
- **🔤 `text_utils.h`** Transliteriert deutsche Umlaute und Sonderzeichen von UTF-8 nach ASCII, damit LVGL-Labels Sonderzeichen korrekt darstellen können.
- **📅 `date_utils.h`** Datumsformatierung ohne NTP-Abhängigkeit. Formatiert Zeitstempel aus den API-Responses in lesbare deutsche Strings.
- **🎨 `theme.h`** Dark-Mode-Farbschema für LVGL: sehr dunkler Hintergrund (`#000000`/`#0B0B0D`), heller Text, dezente Akzentfarben pro Kachel.
## Icons
## 🎨 Icons
Icons werden prozedural als LVGL-Canvas-Objekte gezeichnet (keine externen Bitmap-Dateien). Das `src/icons/`-Verzeichnis enthält Funktionen, die Icon-Shapes direkt im Code erzeugen u.a. Wetter-Icons (Sonne, Wolken, Regen), U-Bahn/S-Bahn-Symbole, Kalender-Icon, Zurück-Pfeil und Retry-Icon. Vorteil: Kein Nachladen von SD-Karte, keine .bin-Abhängigkeit, Icon-Pixel sind im Flash gespeichert.
## Referenzprojekt
Vorgängerprojekt mit M5Stack Core: <https://github.com/skoelle/m5stack-dashboard>
## 📜 Lizenz
Dieses Projekt steht unter der [MIT-Lizenz](LICENSE).
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
// WT32-SC01 Plus pin assignments (ESP32-S3, ST7796 8-bit parallel, FT6336U touch).
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
/**
* @file lv_conf.h
* Configuration file for v9.5.0
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <lvgl.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "calendar_api.h"
#include "http_client.h"
#include <secrets.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
#include <vector>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "departures_api.h"
#include "http_client.h"
#include <secrets.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
#include <vector>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "http_client.h"
#include <HTTPClient.h>
#include <WiFi.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "weather_api.h"
#include "http_client.h"
#include <secrets.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
#include <vector>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "data_manager.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
#include "api/weather_api.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "display_setup.h"
#include <LovyanGFX.hpp>
#include <driver/i2c.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <lvgl.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "icons.h"
#include <math.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <Arduino.h>
#include <lvgl.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include <Arduino.h>
#include <WiFi.h>
#include <lvgl.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "calendar_detail_screen.h"
#include "ui/widgets/back_button.h"
#include "data/data_manager.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include "ui/screen_base.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "home_screen.h"
#include "ui/widgets/tile_button.h"
#include "icons/icons.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include "ui/screen_base.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "mvg_screen.h"
#include "ui/widgets/back_button.h"
#include "api/departures_api.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include "ui/screen_base.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <lvgl.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "weather_detail_screen.h"
#include "ui/widgets/back_button.h"
#include "data/data_manager.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include "ui/screen_base.h"
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "back_button.h"
#include <theme.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <lvgl.h>
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#include "tile_button.h"
TileButton tile_button_create(lv_obj_t *parent, lv_coord_t x, lv_coord_t y,
+1
View File
@@ -1,3 +1,4 @@
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
#pragma once
#include <lvgl.h>
#include <theme.h>