mirror of
https://github.com/skoelle/wt32sc01-dashboard.git
synced 2026-09-18 09:50:25 +00:00
Compare commits
4
Commits
d5c0bf0394
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94b551738d | ||
|
|
957f30600e | ||
|
|
c603b760da | ||
|
|
debec81c48 |
@@ -0,0 +1,6 @@
|
|||||||
|
title: "wt32sc01 Dashboard"
|
||||||
|
emoji: "📱"
|
||||||
|
category: code
|
||||||
|
subcategory: "Maker Firmware"
|
||||||
|
status: active
|
||||||
|
stack: [PlatformIO, Arduino, LovyanGFX, LVGL 9, ArduinoJson]
|
||||||
@@ -120,4 +120,9 @@ Alle APIs liefern JSON per HTTP GET (URLs in `include/secrets.h` konfigurierbar)
|
|||||||
## Referenzprojekt
|
## Referenzprojekt
|
||||||
|
|
||||||
Vorgängerprojekt mit M5Stack Core: <https://github.com/skoelle/m5stack-dashboard>
|
Vorgängerprojekt mit M5Stack Core: <https://github.com/skoelle/m5stack-dashboard>
|
||||||
(Funktionalität übernommen, komplett neu geschrieben für WT32-SC01 Plus)
|
(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`
|
||||||
@@ -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.
|
||||||
@@ -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),
|
(ESP32-S3, 3.5" kapazitiver Touch-IPS-Display, 320x480 im Hochformat),
|
||||||
gesteuert ausschließlich über Touch. Vollständig übernommene Backend-APIs
|
gesteuert ausschließlich über Touch. Vollständig übernommene Backend-APIs
|
||||||
und Fachlogik aus dem [M5Stack-Vorgängerprojekt](https://github.com/skoelle/m5stack-dashboard),
|
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,
|
stehen in [`SPEC.md`](SPEC.md). Die Migrationshistorie (Vorgänger-Spec,
|
||||||
Migrationsplan, Task-Liste) liegt unter [`docs/`](docs/).
|
Migrationsplan, Task-Liste) liegt unter [`docs/`](docs/).
|
||||||
|
|
||||||
## Setup
|
## 🚀 Setup
|
||||||
|
|
||||||
1. PlatformIO CLI installieren:
|
1. 💻 PlatformIO CLI installieren:
|
||||||
```
|
```
|
||||||
pip install -U platformio
|
pip install -U platformio
|
||||||
```
|
```
|
||||||
|
|
||||||
2. WLAN-Zugangsdaten + API-URLs eintragen:
|
2. 🔑 WLAN-Zugangsdaten + API-URLs eintragen:
|
||||||
```
|
```
|
||||||
cp include/secrets.h.example include/secrets.h
|
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
|
`*_API_URL`-Konstanten anpassen. `include/secrets.h` ist über
|
||||||
`.gitignore` vom Repo ausgeschlossen.
|
`.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 +
|
Referenz-Pinout für das WT32-SC01 Plus (ST7796 8-Bit-Parallel +
|
||||||
FT6336U I2C-Touch). Bei abweichender Board-Revision hier anpassen.
|
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
|
./scripts/deploy.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**Windows:**
|
**🪟 Windows:**
|
||||||
```
|
```
|
||||||
scripts\deploy.cmd
|
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:
|
Port-Erkennung fehlschlägt, kann der Port explizit übergeben werden:
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -70,25 +70,25 @@ Falls du den Monitor separat sehen willst:
|
|||||||
pio device monitor
|
pio device monitor
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bedienung
|
## 🎮 Bedienung
|
||||||
|
|
||||||
| Touch | Funktion |
|
| Touch | Funktion |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Tap auf Wetter-Kachel (Home) | Wetter-Detailseite |
|
| 🏠 Tap auf Wetter-Kachel (Home) | 🌤️ Wetter-Detailseite |
|
||||||
| Tap auf Kalender-Kachel (Home) | Kalender-Detailseite |
|
| 🏠 Tap auf Kalender-Kachel (Home) | 📅 Kalender-Detailseite |
|
||||||
| Tap auf MVG-Kachel (Home) | MVG-Abfahrtsseite |
|
| 🏠 Tap auf MVG-Kachel (Home) | 🚇 MVG-Abfahrtsseite |
|
||||||
| Tap auf Zurück-Button (unten links, Detailseiten) | Zurück zur Hauptseite |
|
| 🔙 Tap auf Zurück-Button (unten links, Detailseiten) | ⬅️ Zurück zur Hauptseite |
|
||||||
| Tap auf Wetter-Kachel im Fehlerzustand | Manueller Retry |
|
| 🔄 Tap auf Wetter-Kachel im Fehlerzustand | 🔁 Manueller Retry |
|
||||||
|
|
||||||
Nach 5 Minuten ohne Touch-Eingabe springt das Gerät automatisch zurück
|
Nach 5 Minuten ohne Touch-Eingabe springt das Gerät automatisch zurück
|
||||||
zur Hauptseite. Die Hauptseite aktualisiert sich alle 10 Minuten, die
|
zur Hauptseite. Die Hauptseite aktualisiert sich alle 10 Minuten, die
|
||||||
MVG-Seite jede Minute (nur beim Betreten der Seite, kein Background-Refresh).
|
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).
|
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.)
|
- Automatisch beim nächsten regulären Refresh-Intervall (10 Min. bzw. 1 Min.)
|
||||||
- Manuell durch erneutes Antippen der Kachel im Fehlerzustand
|
- 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)
|
└── 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.
|
- **🔤 `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.
|
- **📅 `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.
|
- **🎨 `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.
|
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
|
## Referenzprojekt
|
||||||
|
|
||||||
Vorgängerprojekt mit M5Stack Core: <https://github.com/skoelle/m5stack-dashboard>
|
Vorgängerprojekt mit M5Stack Core: <https://github.com/skoelle/m5stack-dashboard>
|
||||||
|
|
||||||
|
## 📜 Lizenz
|
||||||
|
|
||||||
|
Dieses Projekt steht unter der [MIT-Lizenz](LICENSE).
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// WT32-SC01 Plus pin assignments (ESP32-S3, ST7796 8-bit parallel, FT6336U touch).
|
// WT32-SC01 Plus pin assignments (ESP32-S3, ST7796 8-bit parallel, FT6336U touch).
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
/**
|
/**
|
||||||
* @file lv_conf.h
|
* @file lv_conf.h
|
||||||
* Configuration file for v9.5.0
|
* Configuration file for v9.5.0
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "calendar_api.h"
|
#include "calendar_api.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include <secrets.h>
|
#include <secrets.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "departures_api.h"
|
#include "departures_api.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include <secrets.h>
|
#include <secrets.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "weather_api.h"
|
#include "weather_api.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include <secrets.h>
|
#include <secrets.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "data_manager.h"
|
#include "data_manager.h"
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "api/weather_api.h"
|
#include "api/weather_api.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "display_setup.h"
|
#include "display_setup.h"
|
||||||
#include <LovyanGFX.hpp>
|
#include <LovyanGFX.hpp>
|
||||||
#include <driver/i2c.h>
|
#include <driver/i2c.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "icons.h"
|
#include "icons.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "calendar_detail_screen.h"
|
#include "calendar_detail_screen.h"
|
||||||
#include "ui/widgets/back_button.h"
|
#include "ui/widgets/back_button.h"
|
||||||
#include "data/data_manager.h"
|
#include "data/data_manager.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "ui/screen_base.h"
|
#include "ui/screen_base.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "home_screen.h"
|
#include "home_screen.h"
|
||||||
#include "ui/widgets/tile_button.h"
|
#include "ui/widgets/tile_button.h"
|
||||||
#include "icons/icons.h"
|
#include "icons/icons.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "ui/screen_base.h"
|
#include "ui/screen_base.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "mvg_screen.h"
|
#include "mvg_screen.h"
|
||||||
#include "ui/widgets/back_button.h"
|
#include "ui/widgets/back_button.h"
|
||||||
#include "api/departures_api.h"
|
#include "api/departures_api.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "ui/screen_base.h"
|
#include "ui/screen_base.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "weather_detail_screen.h"
|
#include "weather_detail_screen.h"
|
||||||
#include "ui/widgets/back_button.h"
|
#include "ui/widgets/back_button.h"
|
||||||
#include "data/data_manager.h"
|
#include "data/data_manager.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "ui/screen_base.h"
|
#include "ui/screen_base.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "back_button.h"
|
#include "back_button.h"
|
||||||
#include <theme.h>
|
#include <theme.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#include "tile_button.h"
|
#include "tile_button.h"
|
||||||
|
|
||||||
TileButton tile_button_create(lv_obj_t *parent, lv_coord_t x, lv_coord_t y,
|
TileButton tile_button_create(lv_obj_t *parent, lv_coord_t x, lv_coord_t y,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle - https://stefankoelle.de - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
#include <theme.h>
|
#include <theme.h>
|
||||||
|
|||||||
Reference in New Issue
Block a user