Skip to content

LilyGo T-Display-S3

The T-Display-S3 is an ESP32-S3 board with a bright 1.9″ 170×320 IPS screen built right in — the board to pick when your prop needs a display: ammo counters, gauges, countdowns, scanner readouts.

Chip ESP32-S3
Flash 16 MB
PSRAM 8 MB
Max LEDs 256
Audio
Display 1.9" 170x320 ST7789 IPS LCD (8-bit parallel i8080)
Touch
Storage On-chip FAT (USB drive)
Network
Update modes Standalone (WiFi/OTA) · Loader (USB-drop)

Any prop where the screen is the effect. The reference build is the Predator Gauntlet: a wrist bio-scanner where one onboard button cycles between a thermal scan (looping heartbeat audio plus a red ECG trace), a vocal-mimicry mode with a live waveform, and a three-digit self-destruct countdown that ends in a full-screen strobe — with a small LED strip pulsing along on GPIO13. Because the board already has two buttons (BOOT on GPIO0 and a second on GPIO14), you can build a fully interactive prop before soldering a single wire. With 16 MB of flash and 8 MB of PSRAM, there’s plenty of room for fonts and sounds.

GPIOCan doNotes
0 in / out BOOT button (strapping pin)
1 in / out / PWM / ADC ADC1_CH0; I2S BCLK when an audio amp is wired
2 in / out / PWM / ADC ADC1_CH1; I2S LRC/WS when an audio amp is wired
3 in / out / PWM / ADC ADC1_CH2; I2S DIN when an audio amp is wired
10 in / out / PWM / ADC ADC1_CH9
11 in / out / PWM / ADC ADC2 — unreliable while WiFi is on
12 in / out / PWM / ADC ADC2 — unreliable while WiFi is on
13 in / out / PWM / ADC ADC2 — unreliable while WiFi is on
14 in / out / PWM Second onboard button
16 in / out / PWM / ADC ADC2 — unreliable while WiFi is on
17 in / out / PWM / ADC ADC2 — unreliable while WiFi is on
18 in / out / PWM / ADC ADC2 — unreliable while WiFi is on
21 in / out / PWM Default LED data pin (no onboard pixel)
43 in / out / PWM UART0 TX
44 in / out / PWM UART0 RX

Reserved pins — leave these alone

  • GPIO 4 — Battery voltage ADC
  • GPIO 5 — LCD reset
  • GPIO 6 — LCD chip select
  • GPIO 7 — LCD data/command
  • GPIO 8 — LCD write strobe
  • GPIO 9 — LCD read strobe
  • GPIO 15 — LCD power enable — must stay high
  • GPIO 38 — LCD backlight
  • GPIO 39 — LCD data D0
  • GPIO 40 — LCD data D1
  • GPIO 41 — LCD data D2
  • GPIO 42 — LCD data D3
  • GPIO 45 — LCD data D4
  • GPIO 46 — LCD data D5
  • GPIO 47 — LCD data D6
  • GPIO 48 — LCD data D7

The screen runs on an 8-bit parallel bus and claims most of the high GPIOs, which leaves the 15 header pins above for your build. There’s no onboard addressable pixel — an external LED strip’s data line goes to a free header pin, with GPIO21 as the factory default if your show.json doesn’t name one. Buttons and sensors go on any free input-capable pin; the two onboard buttons (GPIO0 and GPIO14) are already wired and ready to use as inputs.

Sound comes from a small I2S amplifier (such as the MAX98357A) wired to the three low header pins:

Amp pin Board pin
BCLK GPIO1
LRC / WS GPIO2
DIN GPIO3

Leave the amp’s GAIN and SD pins at their defaults. This is the same amp wiring convention as the ESP32-S3-LCD-1.47.

Your show.json, config.json, fonts, and sounds live on the board’s on-chip FAT partition, which the board exposes as a USB drive — plug it in and it shows up like a thumb drive. Copy files on and off directly, or edit them live from the device’s web dashboard (Files tab) once it’s on WiFi.

The T-Display-S3 flashes over its native USB-C port. If the board doesn’t show up for flashing, put it in ROM download mode manually: hold the BOOT button (GPIO0) while pressing reset, then release BOOT. That gesture always works and is also the ultimate un-brick path. Full walkthrough: Flashing your board.

The T-Display-S3 supports both update modes — pick one per device:

  • Standalone — the device joins WiFi and you update firmware from its web dashboard, no cable. See the standalone quickstart.
  • Loader — no WiFi needed: tap RESET then press BOOT, the device appears as a USB drive, and you drag a firmware.uf2 onto it. The full loader loop is verified end-to-end on this exact board. See the loader quickstart.

The two modes use different flash layouts, so switching between them is a one-time USB reflash (which erases the data drive — back up first).

  • GPIO15 must stay high or the display and its power rail stay dark. The firmware drives it high at boot, so you never have to think about it — just don’t wire anything else to it.
  • The LCD runs on an 8-bit parallel bus, not SPI, and consumes most of the high GPIOs. Fifteen header pins remain usable.
  • No onboard addressable pixel. GPIO21 is only the factory-default data pin for an external strip; nothing lights up until you wire one.
  • GPIO1/2/3 are the documented I2S amp wiring (BCLK / LRC / DIN) — keep them free if you plan to add sound later.
  • GPIO11–13 and 16–18 are ADC2 channels: analog reads on them are unreliable while WiFi is on. Use GPIO1–3 or GPIO10 (ADC1) for analog sensors.
  • The drag-a-UF2 loader update flow is fully verified on this board, making it a great first board for cable-free updates.