Demo-Projekt für das Waveshare ESP32-S3-Touch-LCD-2.8C - ein rundes 480x480 RGB-Touchscreen-Display. Das Projekt zeigt ein animiertes A-Säulen/Instrumenten-Display im Automotive-Stil mit wechselnden Messwert-Anzeigen.
-
7 verschiedene Gauge-Typen mit smooth Animationen:
- BOOST - Ladedruck (bar)
- OIL TEMP - Öltemperatur (°C)
- OIL PRESS - Öldruck (bar)
- EGT - Abgastemperatur (°C)
- AFR - Luft-Kraftstoff-Verhältnis (Lambda)
- WATER - Wassertemperatur (°C)
- VOLTAGE - Bordspannung (V)
-
Kreisförmige Arc-Gauges mit 270° Anzeigebereich
-
Automatischer Gauge-Wechsel alle ~4.5 Sekunden
-
Smooth Value-Animationen mit Easing
-
Farbcodierung pro Gauge-Typ (Cyan, Grün, Orange)
| Komponente | Spezifikation |
|---|---|
| Display | Waveshare ESP32-S3-Touch-LCD-2.8C |
| Auflösung | 480x480 Pixel (rund) |
| Controller | ST7701S (RGB + SPI Init) |
| Touch | GT911 Capacitive |
| MCU | ESP32-S3 |
| Flash | 16MB |
| Interface | RGB Parallel (16-bit) |
EvoDisplay/
├── platformio.ini # Build-Konfiguration
├── src/
│ ├── main.cpp # Hauptanwendung, UI & Animation
│ ├── display_config.h # Hardware-Init (LCD, Touch, IO)
│ └── lv_conf.h # LVGL-Konfiguration
├── include/
├── lib/
└── test/
- PlatformIO (Build-System)
- Arduino Framework für ESP32
- LVGL 9.2.2 (wird automatisch geladen)
# Via pip
pip install platformio
# Oder als VS Code Extension
# -> "PlatformIO IDE" im Extension Marketplace installierencd /path/to/EvoDisplay# Kompilieren
pio run
# Oder mit Environment-Angabe
pio run -e esp32-s3-devkitc-1Das Display per USB-C anschließen. Es sollte als serielles Gerät erkannt werden:
- macOS:
/dev/cu.usbmodem* - Linux:
/dev/ttyACM*oder/dev/ttyUSB* - Windows:
COM*
# Firmware flashen
pio run -t upload
# Mit explizitem Port (falls nötig)
pio run -t upload --upload-port /dev/cu.usbmodem1101# Ausgabe überwachen
pio device monitor -b 115200Falls der Upload nicht startet:
- Boot-Modus aktivieren: BOOT-Taste gedrückt halten, dann RESET drücken
- USB-Kabel prüfen: Datenkabel verwenden (nicht nur Ladekabel)
- Port prüfen:
ls /dev/cu.*(macOS) oderls /dev/tty*(Linux)
Das Kabel muss auf dem USB Port stecken und nicht im UART.
- I2C für TCA9554 IO-Expander initialisieren
- LCD Reset über IO-Expander
- ST7701S über SPI initialisieren (50+ Register)
- RGB Panel mit 14MHz Pixel-Clock starten
- Backlight PWM aktivieren (~70% Helligkeit)
- LVGL mit Double-Buffering initialisieren
- PSRAM: Aktiviert für Display-Buffer
- Display Buffer: 480x60x2 Pixel (Double-Buffering)
- LVGL Memory: 64KB
- Render Mode: Partial (zeilenweise)
| Parameter | Wert |
|---|---|
| Loop-Interval | 30ms |
| LVGL Tick | 2ms |
| Value Update | ~450ms |
| Gauge Switch | ~4.5s |
| RGB Clock | 14MHz |
In src/main.cpp die gauges[] Array-Definition anpassen:
Gauge gauges[] = {
{"BOOST", "bar", -1.0, 2.5, 0x00FFFF},
{"OIL TEMP", "C", 60, 150, 0x00FF00},
// ... weitere Gauges
};In src/display_config.h:
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, 716); // 0-1023In src/main.cpp:
if (loopCounter >= 150) { // Gauge-Wechsel alle X LoopsDieses Projekt basiert auf dem Waveshare ESP-IDF Demo und verwendet die LVGL-Bibliothek.