LVGL-based MeshCore UI firmware for LilyGO T-Deck (ESP32-S3, SX1262, PlatformIO)
- C++ 86.1%
- Python 12.3%
- C 1.6%
| .forgejo | ||
| docs | ||
| include | ||
| patches | ||
| src | ||
| CHANGELOG.md | ||
| HISTORY.md | ||
| partitions_16MB.csv | ||
| platformio.ini | ||
| README.md | ||
| VERSION | ||
tdeck-meshcore-ui
LVGL-basierte MeshCore UI-Firmware für das LilyGO T-Deck.
Features
-
4 Tabs (Tab-Bar unten, per Touch oder Trackball navigierbar):
- Kontakte — alle gehörten Nodes mit RSSI, Hops, Online-Dot
- Chat — DM-Verlauf pro Kontakt, Eingabe per Touch-Tastatur oder physischer Tastatur
- Info — eigene Node-Infos, RSSI/SNR, TX-Power, Uptime, Batterie
- Scope — Flood-Scope wechseln (Local/Region/Global) + Flood-Nachricht senden
-
Status-Bar oben mit Node-Name, RSSI und Uptime
-
Dark Theme (LVGL default dark)
-
Physische T-Deck-Tastatur wird in aktives Textarea geleitet; Enter = Senden
Hardware
| Komponente | Chip |
|---|---|
| MCU | ESP32-S3 |
| Display | ST7789 320×240 |
| Touch | GT911 (I2C) |
| LoRa | SX1262 |
| Keyboard | I2C-Slave 0x55 |
| Trackball | 4× GPIO + Click |
Build
# PlatformIO CLI
pio run -e t-deck
# oder in VSCode: PlatformIO → Build
Abhängigkeiten
bodmer/TFT_eSPI≥ 2.5.43lvgl/lvgl8.3.xmeshcore-dev/MeshCore(branch: dev)
Hinweis: TFT_eSPI ist mit ESP32-Core > 2.0.14 inkompatibel. In
platformio.iniistespressif32@6.5.0fest gesetzt, was Core 2.0.14 entspricht.
Projektstruktur
src/
main.cpp — setup() / loop()
hw.cpp — Display-Flush, GT911-Touch, Trackball-ISR, KB-Polling
mc.cpp — MeshCore-Stack-Wrapper (SX1262, Callbacks, sende-API)
ui.cpp — LVGL-UI (alle 4 Tabs, Statusbar, Keyboard-Routing)
include/
hw.h
mc.h
ui.h
lv_conf.h — LVGL-Konfiguration
Anpassen
Node-Name / Region
In mc.cpp → MC::init():
mesh_node.setName("DeinNodeName");
Später: aus NVS laden (Preferences-Library) und im Settings-Tab editierbar machen.
LoRa-Frequenz
radio.setFrequency(868.0); // EU868
// radio.setFrequency(915.0); // US915
Neue Nachrichten-Benachrichtigung
UI::show_new_message_badge() in ui.cpp ist als Stub implementiert — dort einen roten Dot auf den Tab-Button setzen.