MeshDD Dashboard für CrowPanel ESP32-S3 3.5" – LovyanGFX + LVGL + MQTT
  • C++ 80.4%
  • Python 15.7%
  • C 3.9%
Find a file
ppfeiffer 92da883e21
Some checks failed
release.yml / neue Anpassungen (push) Failing after 0s
neue Anpassungen
2026-04-08 19:57:49 +02:00
.forgejo feat: WLAN-Konfig-UI, Dimmer, Beep, OTA-Benutzername, 5 Seiten 2026-04-07 21:10:36 +02:00
src neue Anpassungen 2026-04-08 19:57:49 +02:00
.gitignore feat: config.yaml + pre_build.py + OTA-Support 2026-04-06 17:38:41 +00:00
CHANGELOG.md feat: WLAN-Konfig-UI, Dimmer, Beep, OTA-Benutzername, 5 Seiten 2026-04-07 21:10:36 +02:00
CLAUDE.md feat: WLAN-Konfig-UI, Dimmer, Beep, OTA-Benutzername, 5 Seiten 2026-04-07 21:10:36 +02:00
config.yaml feat: WLAN-Konfig-UI, Dimmer, Beep, OTA-Benutzername, 5 Seiten 2026-04-07 21:10:36 +02:00
FLASHING.md docs: Flash-Anleitung fuer PlatformIO, esptool und Windows Flash Tool 2026-04-06 17:28:00 +00:00
platformio.ini neue Anpassungen 2026-04-08 19:57:49 +02:00
pre_build.py feat: WLAN-Konfig-UI, Dimmer, Beep, OTA-Benutzername, 5 Seiten 2026-04-07 21:10:36 +02:00
pre_build_ci.py feat: WLAN-Konfig-UI, Dimmer, Beep, OTA-Benutzername, 5 Seiten 2026-04-07 21:10:36 +02:00
README.md feat: WLAN-Konfig-UI, Dimmer, Beep, OTA-Benutzername, 5 Seiten 2026-04-07 21:10:36 +02:00

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/pio verwenden.

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 (0255)
  brightness: 200               # Normale Helligkeit (0255)

config.yaml mit 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.yaml hinterlegte 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)