- C++ 80.4%
- Python 15.7%
- C 3.9%
|
|
||
|---|---|---|
| .forgejo | ||
| src | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| config.yaml | ||
| FLASHING.md | ||
| platformio.ini | ||
| pre_build.py | ||
| pre_build_ci.py | ||
| README.md | ||
MeshDD Dashboard
LVGL-Dashboard für den CrowPanel ESP32-S3 3.5" (480×320, ILI9488, FT6236-Touch).
Zeigt Home-Assistant-Sensordaten und MeshDD-Node-Status via MQTT an.
Schnellstart
git clone https://git.pfeiffer-privat.de/ppfeiffer/crowpanel-dashboard.git
cd crowpanel-dashboard
cp config.yaml config.local.yaml # optional: lokale Kopie anlegen
nano config.yaml # WiFi, MQTT, OTA eintragen
# Erster Flash via USB
~/.platformio/penv/bin/pio run -e crowpanel_35_usb -t upload
# Ab sofort via OTA (PlatformIO oder Web-Browser)
~/.platformio/penv/bin/pio run -e crowpanel_35 -t upload
Hinweis: System-
pio(v4.3.4) ist unter Python 3.12 inkompatibel.
Immer~/.platformio/penv/bin/pioverwenden.
Konfiguration
Alle Einstellungen stehen in config.yaml — beim Build automatisch in
src/config_generated.h umgewandelt (pre_build.py).
wifi:
ssid: "MeinNetz"
password: "MeinPasswort"
hostname: "meshdd-display"
mqtt:
broker: "192.168.1.100"
port: 1883
user: "mqtt"
password: "mqtt"
ota:
enabled: true
password: "meshdd-ota"
web_user: "admin" # Benutzer für ElegantOTA Web-UI
port: 3232
dashboard:
autoswipe_interval_ms: 8000 # Seitenwechsel-Intervall (0 = aus)
beep_page_change: true # Ton beim Seitenwechsel
dim_timeout_ms: 60000 # Display dimmen nach Inaktivität (0 = aus)
dim_brightness: 15 # Helligkeit nach Timeout (0–255)
brightness: 200 # Normale Helligkeit (0–255)
config.yamlmit echten Zugangsdaten nicht ins Repository einchecken (.gitignore).
OTA-Update
Web-Browser (ElegantOTA)
http://<IP-Adresse>/update
Benutzer und Passwort aus config.yaml (ota.web_user / ota.password).
PlatformIO
~/.platformio/penv/bin/pio run -e crowpanel_35 -t upload
Das Display zeigt während des Updates einen Fortschrittsbalken.
WLAN-Konfiguration via Display
Auf der System-Seite → Button „WLAN konfigurieren" öffnet ein Vollbild-Modal:
- Listenansicht: gespeicherte Netzwerke (max. 5, persistent im ESP32-NVS)
- Das in
config.yamlhinterlegte Netzwerk ist immer sichtbar und schreibgeschützt - Tap auf ein Netzwerk → verbindet sofort
- „+ Neues Netzwerk" → SSID + Passwort per On-Screen-Tastatur eingeben
- Wird erst nach erfolgreicher Verbindung gespeichert
Dashboard-Seiten
| Seite | Inhalt |
|---|---|
| Home | Temperatur + Feuchte Innen/Aussen (Arc-Gauge) |
| MeshDD | Funkturm Wilsdruff (FTWI) + Node-Tabelle (RSSI/Batterie/Status) |
| Solar | Platzhalter (Topics vorbereitet) |
| Garten | Platzhalter (Topics vorbereitet) |
| System | WiFi, IP, MQTT, Uptime, Version, RAM/Flash, WLAN-Konfig |
Navigation: < / > Buttons in der Menüleiste oder automatischer Seitenwechsel.
MQTT-Topics
Konfigurierbar in config.yaml unter topics:.
| Topic | Wert |
|---|---|
tfa/Aussen/temperature |
Außentemperatur °C |
tfa/Aussen/humidity |
Außenfeuchte % |
tfa/Innen/temperature |
Innentemperatur °C |
tfa/Innen/humidity |
Innenfeuchte % |
meshdd/FTWI/rssi |
Funkturm RSSI dBm |
meshdd/FTWI/battery |
Funkturm Batterie % |
meshdd/FTWI/online |
Funkturm online (true/false) |
meshdd/+/rssi |
Alle Nodes RSSI (Wildcard) |
solar/leistung |
Solare Erzeugung W |
garten/sensor1/feuchtigkeit |
Bodenfeuchte Beet 1 % |
Projektstruktur
crowpanel-dashboard/
├── config.yaml ← Zentrale Konfiguration (hier anpassen)
├── pre_build.py ← Generiert config_generated.h (PlatformIO)
├── pre_build_ci.py ← Generiert config_generated.h (CI, mit Fallback)
├── platformio.ini ← Build-Umgebungen (USB + OTA)
├── CHANGELOG.md ← Versionshistorie
├── FLASHING.md ← Ausführliche Flash-Anleitung
├── src/
│ ├── config.h ← Bindet config_generated.h ein
│ ├── config_generated.h ← Auto-generiert, nicht bearbeiten
│ ├── display.h ← LovyanGFX Treiber (ILI9488 + Bus_Parallel16)
│ ├── FT6236.h/cpp ← Touch-Treiber (I2C, 0x38)
│ ├── mqtt_manager.h ← MQTT-Client + Datenstrukturen
│ ├── ui.h ← LVGL Dashboard (5 Seiten)
│ ├── lv_conf.h ← LVGL-Konfiguration
│ └── main.cpp ← Setup, OTA, Loop
└── .forgejo/workflows/
└── release.yml ← CI: Build + Release bei Git-Tag
CI/CD – Automatische Releases
Ein Git-Tag v*.*.* löst automatisch einen Build aus und erstellt ein Release:
git tag v1.0.0
git push origin v1.0.0
Release-Assets: https://git.pfeiffer-privat.de/ppfeiffer/crowpanel-dashboard/releases
Hardware
| Board | CrowPanel ESP32-S3 3.5" (Elecrow) |
| MCU | ESP32-S3, LX7 Dual-Core, 240 MHz |
| Display | ILI9488, 480×320, 16-bit Parallel |
| Touch | FT6236, I²C (SDA=38, SCL=39) |
| Buzzer | GPIO 20 |
| Flash | 16 MB |
| PSRAM | 8 MB (OPI) |
| Backlight | GPIO 46 |
Libraries
| Library | Version | Zweck |
|---|---|---|
| LovyanGFX | ^1.1.16 | Display-Treiber |
| lvgl | ^8.3.11 | GUI-Widgets |
| PubSubClient | ^2.8 | MQTT |
| ArduinoJson | ^7.0.0 | JSON-Parsing |
| ElegantOTA | ^3.1.0 | Web-OTA-Update |
| ArduinoOTA | built-in | PlatformIO-OTA |
| Preferences | built-in | NVS-Speicher (WLAN-Profile) |