| Product (PinMap) | SOC | Flash | PSRAM | Resolution | Size |
|---|---|---|---|---|---|
| T-Display-S3 | ESP32-S3R8 | 16MB | 8MB(OPI) | 170x320 | 1.9 Inch |
| T-Display-S3-Touch | ESP32-S3R8 | 16MB | 8MB(OPI) | 170x320 | 1.9 Inch |
| T-Display-S3-MIDI |
./examples/
βββ Arduino_GFXDemo # Arduino_GFX example
βββ Arduino_GFX_PDQgraphicstest # Arduino_GFX example
βββ GetBatteryVoltage # Get battery voltage example
βββ I2CScan # Scan for external devices using I2C
βββ ImageScroll # Image scrolling example by @Rudi Ackermann
βββ MPR121TouchSensor # Example of using MPR121 capacitive touch
βββ PCBClock # TFT_eSPI PCBClock example by @VolosR
βββ PokerS3 # TFT_eSPI PokerS3 example by @VolosR
βββ SerialExample # Example of using serial communication
βββ T-Display-S3-MIDI # T-Display-S3-MIDI Shield example
βββ T-Display-S3-BLE-Receiver # Wireless BLE MIDI receiver with piano display (ESP32_Host_MIDI) by @sauloverissimo
βββ T-Display-S3-BLE-Sender # BLE MIDI sender with auto-play sequences (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-Piano # USB MIDI Piano visualizer with chord detection (ESP32_Host_MIDI + Gingoduino) @sauloverissimo
βββ T-Display-S3-Piano-Debug # MIDI event monitor with raw packet inspector (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-Gingoduino # Real-time chord detection and harmonic analysis (ESP32_Host_MIDI + Gingoduino) @sauloverissimo
βββ T-Display-S3-Queue # MIDI event queue visualizer for debugging (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-USB-Device # BLE-to-USB MIDI bridge β T-Display-S3 as USB MIDI interface (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-Music-Explorer # Interactive music theory explorer with audio synthesis (Gingoduino) @sauloverissimo
βββ TFT_Rainbow # TFT_eSPI example
βββ factory # Factory example
βββ lv_demos # LVGL demo
βββ nes # NES game emulator
βββ ota # Over-the-air upgrade example
βββ sd # T-Display-TF Shield example
βββ tft # TFT_eSPI example
βββ touch_test # Capacitive touch test example
βββ usb_hid_pad # Capacitive Touch Screen Simulation USB HID Example
βββ ULP_ADC # ADC detection for ULP-FSM (arduino_esp32 version: 3.0.0-rc3)
βββ ULP_Count # Register counting for ULP-FSM (arduino_esp32 version: 3.0.0-rc3)
PlatformIO plugin in the VS Code extension marketplace and install it.File > Open Folder > choose the T-Display-S3 directory.platformio.ini file.default_envs = xxxx β make sure only one line is active.[!TIP] If you encounter unexpected build errors, try re-cloning (or re-downloading) this repository first. Before compiling, click the Clean button in the PlatformIO toolbar to remove stale build artifacts, then try building again.
Install Arduino IDE.
In Arduino Preferences, on the Settings tab, enter the following URL in the Additional boards manager URLs input box:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Note: The test phase uses version 2.0.14. Versions above 2.0.14 may not work correctly β please downgrade if you encounter issues. As of 2024/08/02, TFT_eSPI does not work on versions higher than 2.0.14 (see TFT_eSPI#3329).
Download T-Display-S3 and move it to your Arduino library folder (e.g. C:\Users\YourName\Documents\Arduino\libraries).
Copy all folders in the lib folder to your Arduino library folder.
Navigate to the T-Display-S3/examples directory.
Select any example and double-click the .ino file to open it.
In Arduino IDE, go to Tools and configure the following:
| Arduino IDE Setting | Value |
|---|---|
| Board | ESP32S3 Dev Module |
| Port | Your port |
| USB CDC On Boot | Enable |
| CPU Frequency | 240MHz (WiFi) |
| Core Debug Level | None |
| USB DFU On Boot | Disable |
| Erase All Flash Before Sketch Upload | Disable |
| Events Run On | Core1 |
| Flash Mode | QIO 80MHz |
| Flash Size | 16MB (128Mb) |
| Arduino Runs On | Core1 |
| USB Firmware MSC On Boot | Disable |
| Partition Scheme | 16M Flash (3M APP/9.9MB FATFS) |
| PSRAM | OPI PSRAM |
| Upload Mode | UART0/Hardware CDC |
| Upload Speed | 921600 |
| USB Mode | CDC and JTAG |
Options in bold are required. Others should be selected based on your actual conditions.
Click Upload and wait for compilation and writing to complete.
If upload fails or the USB device keeps flashing, check the FAQ below.
LilyGo T-Display-S3 as the board, but the partition table is fixed to 16M Flash (3M APP/9.9MB FATFS).For the ESP-IDF version of T-Display-S3 examples, see LilyGo-Display-IDF.
| Name | GPIO | Note |
|---|---|---|
| LCD BL | 38 | Backlight |
| LCD D0 | 39 | |
| LCD D1 | 40 | |
| LCD D2 | 41 | |
| LCD D3 | 42 | |
| LCD D4 | 45 | |
| LCD D5 | 46 | |
| LCD D6 | 47 | |
| LCD D7 | 48 | |
| LCD RST | 5 | Reset |
| LCD CS | 6 | Chip Select |
| LCD DC | 7 | Data/Command |
| LCD WR | 8 | Write |
| LCD RD | 9 | Read |
| Power On | 15 | LCD power control |
| Button 1 | 0 | BOOT button |
| Button 2 | 14 | |
| Battery Volt | 4 | ADC |
| IIC SCL | 17 | |
| IIC SDA | 18 | |
| Touch INT | 16 | Touch interrupt |
| Touch RES | 21 | Touch reset |
| SD CMD | 13 | SD card |
| SD CLK | 11 | SD card |
| SD D0 | 12 | SD card |
[!IMPORTANT]
Note: GPIO15 is the peripheral power control pin. You must set it HIGH before using the board, otherwise the LCD and other peripherals will not work. For battery-powered or 5V Pin Header usage:
pinMode(15, OUTPUT); digitalWrite(15, HIGH);SD card pins (SD CMD/CLK/D0) are only available on boards with the SD Shield add-on. The standard T-Display-S3 board does not have an onboard SD card slot.
The battery ADC pin can only read the battery voltage when the USB-C port is not plugged in; it cannot read the battery voltage after the USB-C port is plugged in.
| Product (PinMap) | Schematic | Dimensions | PCB 3D | PinMap |
|---|---|---|---|---|
| T-Display-S3 | schematic | DWG | STP | PinMap |
| T-Display-S3-Touch | schematic | DWG | STP | PinMap |
| T-Display-S3-MIDI | schematic | N.A | N.A | N.A |
The screen does not light up when using battery.
setup():
void setup() {
// Turn on display power
pinMode(15, OUTPUT);
digitalWrite(15, HIGH);
}
The program uploads successfully, but nothing is displayed on the screen.
Arduino_GFXDemo first. If nothing is displayed, the issue is likely with the hardware.Arduino_GFXDemo works but TFT_eSPI does not, the User_Setup_Select configuration may have been overwritten. See FAQ #3 to reconfigure TFT_eSPI.How to update TFT_eSPI or verify the pin configuration is correct?
C:\Users\YourName\Documents\Arduino\libraries\TFT_eSPI).User_Setup_Select.h, comment out (or delete) the default #include <User_Setup.h> line.Setup206_LilyGo_T_Display_S3.h, uncomment it, save, and close:
#include <User_Setups/Setup206_LilyGo_T_Display_S3.h> // LilyGo T-Display S3 (ESP32S3 + ST7789 170x320 TFT)
Cannot upload any sketch β please enter upload mode manually.
If you use an external power supply instead of USB-C, please disable the CDC option. The board waits for USB access on startup when CDC is enabled.
Tools > USB CDC On Boot > Disable
Disabling USB CDC turns off Serial redirection to USB-C. Serial output will come from GPIO43 and GPIO44 instead.
platformio.ini:
build_flags =
; -DARDUINO_USB_CDC_ON_BOOT=1 ; Enable: prints and waits for terminal on startup
-UARDUINO_USB_CDC_ON_BOOT ; Disable: no blocking on startup
If none of the above works, flash the factory firmware for quick verification. See here.
Can I use an external 5V pin for power? See issues/205.
How to adjust the charging current? The default charging current is 500mA. See issues/230.
| Function | Color |
|---|---|
| Charge LED | Red |
| V3V Indicator | Green |
| Features | Details |
|---|---|
| πUSB-C input voltage | 5V |
| πBattery voltage | 3.7V~4.2V |
| πBattery Connector Model | JST 1.25 mm |
| πVBUS (pin header) | 5V |
| πVBAT (pin header) | 4.2V |
901 followers Β· starred Dec 2023
19 followers Β· starred Jan 2025
16 followers Β· starred Jul 2025
| Product (PinMap) | SOC | Flash | PSRAM | Resolution | Size |
|---|---|---|---|---|---|
| T-Display-S3 | ESP32-S3R8 | 16MB | 8MB(OPI) | 170x320 | 1.9 Inch |
| T-Display-S3-Touch | ESP32-S3R8 | 16MB | 8MB(OPI) | 170x320 | 1.9 Inch |
| T-Display-S3-MIDI |
./examples/
βββ Arduino_GFXDemo # Arduino_GFX example
βββ Arduino_GFX_PDQgraphicstest # Arduino_GFX example
βββ GetBatteryVoltage # Get battery voltage example
βββ I2CScan # Scan for external devices using I2C
βββ ImageScroll # Image scrolling example by @Rudi Ackermann
βββ MPR121TouchSensor # Example of using MPR121 capacitive touch
βββ PCBClock # TFT_eSPI PCBClock example by @VolosR
βββ PokerS3 # TFT_eSPI PokerS3 example by @VolosR
βββ SerialExample # Example of using serial communication
βββ T-Display-S3-MIDI # T-Display-S3-MIDI Shield example
βββ T-Display-S3-BLE-Receiver # Wireless BLE MIDI receiver with piano display (ESP32_Host_MIDI) by @sauloverissimo
βββ T-Display-S3-BLE-Sender # BLE MIDI sender with auto-play sequences (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-Piano # USB MIDI Piano visualizer with chord detection (ESP32_Host_MIDI + Gingoduino) @sauloverissimo
βββ T-Display-S3-Piano-Debug # MIDI event monitor with raw packet inspector (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-Gingoduino # Real-time chord detection and harmonic analysis (ESP32_Host_MIDI + Gingoduino) @sauloverissimo
βββ T-Display-S3-Queue # MIDI event queue visualizer for debugging (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-USB-Device # BLE-to-USB MIDI bridge β T-Display-S3 as USB MIDI interface (ESP32_Host_MIDI) @sauloverissimo
βββ T-Display-S3-Music-Explorer # Interactive music theory explorer with audio synthesis (Gingoduino) @sauloverissimo
βββ TFT_Rainbow # TFT_eSPI example
βββ factory # Factory example
βββ lv_demos # LVGL demo
βββ nes # NES game emulator
βββ ota # Over-the-air upgrade example
βββ sd # T-Display-TF Shield example
βββ tft # TFT_eSPI example
βββ touch_test # Capacitive touch test example
βββ usb_hid_pad # Capacitive Touch Screen Simulation USB HID Example
βββ ULP_ADC # ADC detection for ULP-FSM (arduino_esp32 version: 3.0.0-rc3)
βββ ULP_Count # Register counting for ULP-FSM (arduino_esp32 version: 3.0.0-rc3)
PlatformIO plugin in the VS Code extension marketplace and install it.File > Open Folder > choose the T-Display-S3 directory.platformio.ini file.default_envs = xxxx β make sure only one line is active.[!TIP] If you encounter unexpected build errors, try re-cloning (or re-downloading) this repository first. Before compiling, click the Clean button in the PlatformIO toolbar to remove stale build artifacts, then try building again.
Install Arduino IDE.
In Arduino Preferences, on the Settings tab, enter the following URL in the Additional boards manager URLs input box:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Note: The test phase uses version 2.0.14. Versions above 2.0.14 may not work correctly β please downgrade if you encounter issues. As of 2024/08/02, TFT_eSPI does not work on versions higher than 2.0.14 (see TFT_eSPI#3329).
Download T-Display-S3 and move it to your Arduino library folder (e.g. C:\Users\YourName\Documents\Arduino\libraries).
Copy all folders in the lib folder to your Arduino library folder.
Navigate to the T-Display-S3/examples directory.
Select any example and double-click the .ino file to open it.
In Arduino IDE, go to Tools and configure the following:
| Arduino IDE Setting | Value |
|---|---|
| Board | ESP32S3 Dev Module |
| Port | Your port |
| USB CDC On Boot | Enable |
| CPU Frequency | 240MHz (WiFi) |
| Core Debug Level | None |
| USB DFU On Boot | Disable |
| Erase All Flash Before Sketch Upload | Disable |
| Events Run On | Core1 |
| Flash Mode | QIO 80MHz |
| Flash Size | 16MB (128Mb) |
| Arduino Runs On | Core1 |
| USB Firmware MSC On Boot | Disable |
| Partition Scheme | 16M Flash (3M APP/9.9MB FATFS) |
| PSRAM | OPI PSRAM |
| Upload Mode | UART0/Hardware CDC |
| Upload Speed | 921600 |
| USB Mode | CDC and JTAG |
Options in bold are required. Others should be selected based on your actual conditions.
Click Upload and wait for compilation and writing to complete.
If upload fails or the USB device keeps flashing, check the FAQ below.
LilyGo T-Display-S3 as the board, but the partition table is fixed to 16M Flash (3M APP/9.9MB FATFS).For the ESP-IDF version of T-Display-S3 examples, see LilyGo-Display-IDF.
| Name | GPIO | Note |
|---|---|---|
| LCD BL | 38 | Backlight |
| LCD D0 | 39 | |
| LCD D1 | 40 | |
| LCD D2 | 41 | |
| LCD D3 | 42 | |
| LCD D4 | 45 | |
| LCD D5 | 46 | |
| LCD D6 | 47 | |
| LCD D7 | 48 | |
| LCD RST | 5 | Reset |
| LCD CS | 6 | Chip Select |
| LCD DC | 7 | Data/Command |
| LCD WR | 8 | Write |
| LCD RD | 9 | Read |
| Power On | 15 | LCD power control |
| Button 1 | 0 | BOOT button |
| Button 2 | 14 | |
| Battery Volt | 4 | ADC |
| IIC SCL | 17 | |
| IIC SDA | 18 | |
| Touch INT | 16 | Touch interrupt |
| Touch RES | 21 | Touch reset |
| SD CMD | 13 | SD card |
| SD CLK | 11 | SD card |
| SD D0 | 12 | SD card |
[!IMPORTANT]
Note: GPIO15 is the peripheral power control pin. You must set it HIGH before using the board, otherwise the LCD and other peripherals will not work. For battery-powered or 5V Pin Header usage:
pinMode(15, OUTPUT); digitalWrite(15, HIGH);SD card pins (SD CMD/CLK/D0) are only available on boards with the SD Shield add-on. The standard T-Display-S3 board does not have an onboard SD card slot.
The battery ADC pin can only read the battery voltage when the USB-C port is not plugged in; it cannot read the battery voltage after the USB-C port is plugged in.
| Product (PinMap) | Schematic | Dimensions | PCB 3D | PinMap |
|---|---|---|---|---|
| T-Display-S3 | schematic | DWG | STP | PinMap |
| T-Display-S3-Touch | schematic | DWG | STP | PinMap |
| T-Display-S3-MIDI | schematic | N.A | N.A | N.A |
The screen does not light up when using battery.
setup():
void setup() {
// Turn on display power
pinMode(15, OUTPUT);
digitalWrite(15, HIGH);
}
The program uploads successfully, but nothing is displayed on the screen.
Arduino_GFXDemo first. If nothing is displayed, the issue is likely with the hardware.Arduino_GFXDemo works but TFT_eSPI does not, the User_Setup_Select configuration may have been overwritten. See FAQ #3 to reconfigure TFT_eSPI.How to update TFT_eSPI or verify the pin configuration is correct?
C:\Users\YourName\Documents\Arduino\libraries\TFT_eSPI).User_Setup_Select.h, comment out (or delete) the default #include <User_Setup.h> line.Setup206_LilyGo_T_Display_S3.h, uncomment it, save, and close:
#include <User_Setups/Setup206_LilyGo_T_Display_S3.h> // LilyGo T-Display S3 (ESP32S3 + ST7789 170x320 TFT)
Cannot upload any sketch β please enter upload mode manually.
If you use an external power supply instead of USB-C, please disable the CDC option. The board waits for USB access on startup when CDC is enabled.
Tools > USB CDC On Boot > Disable
Disabling USB CDC turns off Serial redirection to USB-C. Serial output will come from GPIO43 and GPIO44 instead.
platformio.ini:
build_flags =
; -DARDUINO_USB_CDC_ON_BOOT=1 ; Enable: prints and waits for terminal on startup
-UARDUINO_USB_CDC_ON_BOOT ; Disable: no blocking on startup
If none of the above works, flash the factory firmware for quick verification. See here.
Can I use an external 5V pin for power? See issues/205.
How to adjust the charging current? The default charging current is 500mA. See issues/230.
| Function | Color |
|---|---|
| Charge LED | Red |
| V3V Indicator | Green |
| Features | Details |
|---|---|
| πUSB-C input voltage | 5V |
| πBattery voltage | 3.7V~4.2V |
| πBattery Connector Model | JST 1.25 mm |
| πVBUS (pin header) | 5V |
| πVBAT (pin header) | 4.2V |
901 followers Β· starred Dec 2023
19 followers Β· starred Jan 2025
16 followers Β· starred Jul 2025