Standalone screen-fixer firmware for the LILYGO T-Deck (ESP32-S3 / ST7789 2.8" IPS panel).
This is our own firmware — not a fork or derivative of MeshCore or any other firmware project. It is a minimal, self-contained PlatformIO project built around the official LilyGO T-Deck references (pin map, board definition) and a standard display driver library.
Keeps the display on 24/7 and cycles through image-retention / burn-in clearing patterns forever. Flash it, plug the T-Deck in, leave it running — no interaction needed.
LCD panels can suffer from image retention (ghosting) when a static UI is left on screen for long periods. Cycling the panel through full-brightness solid colours, moving gradients, checkerboards and noise exercises every subpixel evenly and clears the retained image. The T-Deck's 2.8" ST7789 is no exception.
At boot the display lights up (backlight on GPIO 42, peripheral power rail on GPIO 10), all sleep sources are disabled (CPU locked at 240 MHz, no light sleep), and the routine starts. The ~4 minute cycle repeats forever:
| # | Phase | Duration | What you see |
|---|---|---|---|
| 1 | Solid white | 20 s | Full-screen white |
| 2 | Solid red | 20 s | Full-screen red |
| 3 | Solid green | 20 s | Full-screen green |
| 4 | Solid blue | 20 s | Full-screen blue |
| 5 | Solid black | 20 s | Panel off pixels (relax cycle) |
| 6 | Hue sweep | 30 s | Scrolling rainbow gradient |
| 7 | Colour bars | 20 s | Classic white/red/green/blue/cyan/magenta/yellow/black bars |
| 8 | Checkerboard | 20 s | Black/white checkerboard, inverting every second |
| 9 | Sweep horizontal | 30 s | White bar sweeping top → bottom |
| 10 | Sweep vertical | 30 s | White bar sweeping left → right |
| 11 | Colour noise | 20 s | Random-colour static |
Progress is logged over USB serial (115200 baud): [screenfix] phase 3/11: solid green (20s) — uptime 64s.
All durations are compile-time configurable — see src/main.cpp PHASE_*_S defines.
pio run # compile
pio run -t upload # build + flash over USB (main USB-C port!)
pio device monitor # watch phase progressPlatformIO 6.x with the stock espressif32 platform is all you need — the T-Deck
board definition is vendored in boards/t-deck.json, so the
project builds out of the box with no extra setup.
- Use the main USB-C port (ESP32-S3 native USB), not the keyboard one.
- Flash mode defaults to DIO in
platformio.ini— many T-Deck units boot-loop with QIO flash (PSRAM pin conflict). If your unit runs QIO fine, remove that override. - The merged binary lands at
.pio/build/t-deck/firmware.bin— flash it withpio run -t uploador any ESP32 flasher.
From the official LilyGO T-Deck reference (TDECK_PINS.h):
| Signal | GPIO |
|---|---|
| LCD CS | 12 |
| LCD DC | 11 |
| LCD backlight | 42 |
| LCD RST | not connected (software reset) |
| SPI SCK | 40 |
| SPI MOSI | 41 |
| Peripheral power rail | 10 |
- This project's code and docs (firmware, build config, README): MIT — see LICENSE.
- Board definition
boards/t-deck.json: copied verbatim from the official Xinyuan-LilyGO/T-Deck repository (boards/T-Deck.json, © LilyGO). - Pin map: from the official Xinyuan-LilyGO/T-Deck
reference header
examples/LvglArduinoVNC_VGA/TDECK_PINS.h(© LilyGO). - Display driver: Adafruit ST7735 and ST7789 Library (+ Adafruit GFX / BusIO dependencies), BSD-3-Clause, © Adafruit Industries.
Full details in THIRD_PARTY_NOTICES.md.