ILI9341 TFT 2.4″ / 2.8″ (240×320, SPI, touch)
ILI9341 SPI TFT pinout (VCC, GND, CS, RESET, DC, SDI, SCK, LED, SDO, T_ pins), J1 jumper, 3.3 V-only signals, touch (XPT2046) and fixes for white screens.
Community draft — report a mistake
3.3 V or 5 V? VCC can be 5 V, but every signal pin is 3.3 V only. ESP32 and Pico connect directly. On an Uno use a level shifter (74LVC245 / CD4050) or 1 kΩ / 2 kΩ dividers on CS, RESET, DC, SDI and SCK — 5 V signals give a white screen or a dead panel.
These red SPI TFT modules use the ILI9341 controller: 240×320 pixels, 65 000 colours, on a 2.4″ or 2.8″ panel, usually with an XPT2046 resistive touch controller and a microSD slot on the same board. They’re the go-to screen for dashboards, menus and small games on ESP32.
The display, touch and SD card are three separate SPI devices. They can share SCK, MOSI and MISO, but each needs its own chip select. On ESP32, TFT_eSPI (configured in its User_Setup.h) is several times faster than the Adafruit library and includes touch calibration.
Not the same as the 2.4″ Uno shield. The plug-on shields with 8 data pins (MCUFRIEND style) use a parallel bus and a different library. This page is for the SPI module with a single row of 14 pins (VCC to T_IRQ).
Prices are indicative (Nov 2026) and vary by seller.
Pinout
| Pin | What it does |
|---|---|
VCC | 5 V (J1 open) or 3.3 V (J1 bridged) — about 80–100 mA with backlight |
GND | Ground |
CS | Display chip select |
RESET | Reset, active LOW (or tie to 3.3 V / the board’s RST) |
DC | Data / command select (labelled DC/RS on some boards) |
SDI(MOSI) | SPI data into the display |
SCK | SPI clock |
LED | Backlight — to 3.3 V (or a GPIO / PWM for dimming). Nothing shows if it is left open. |
SDO(MISO) | SPI data out of the display (only needed to read the panel back; leave free if the bus is shared) |
T_CLK | Touch controller (XPT2046) SPI clock — can share SCK |
T_CS | Touch chip select (separate GPIO) |
T_DIN | Touch SPI data in — can share MOSI |
T_DO | Touch SPI data out — can share MISO |
T_IRQ | Touch interrupt, LOW while touched (optional) |
Library
Adafruit ILI9341 by Adafruit (also install Adafruit GFX Library; on ESP32, TFT_eSPI by Bodmer is faster)
Arduino IDE → Library Manager → search the name above. Each guide lists the exact version we compile against.
Use it with
Common errors
White screen, backlight on
The panel isn’t being initialised: check CS, DC and RESET pin numbers, 3.3 V signal levels, and that you used the ILI9341 driver (some lookalike boards carry an ST7789 or ILI9488).
Colours inverted or image mirrored
Use setRotation(0–3) for orientation; for inverted colours call invertDisplay(false) or select the right panel variant in TFT_eSPI’s setup file.
Touch reads nothing or is upside down
Touch is a separate chip: use the XPT2046_Touchscreen library with its own T_CS pin, then map raw values to pixels with your own calibration (raw range is about 200–3800).
SD card or touch stops the display working
Every device on the shared SPI bus needs its own CS held HIGH when idle. Set all CS pins as outputs and HIGH before starting any of them.