Boards / Common wiring

ESP32-S3 + ILI9341 SPI

ESP32-S3 DevKitC wired to a 2.8" ILI9341 with XPT2046 touch.

ESP32-S3 + ILI9341 SPI: a 240 by 320 panel, drawn from the preset
Drawn from the preset - no vendor photograph of this board was published.

Building for it

A project is made for one toolchain, picked when you start it. All four can drive this board:

Toolchain
Arduino (C++)Every board, every widget and every peripheral here. The most control, and the most to set up. Start a project
MicroPythonChange a screen by editing a file on the board. No compiler once it is flashed. Start a project
ESPHomeNo compiler to install, and the panel can join Home Assistant as real entities. Start a project
ESP-IDF (C)Espressif's own framework: esp_lcd, the component registry and idf.py, with nothing of Arduino in it. Start a project

At a glance

PartDetail
MakerGeneric
MCUESP32-S3
Xtensa LX7 dual-core @ 240 MHz, 512 KB SRAM (+ 2-16 MB PSRAM on most modules)
DisplayIlitek ILI9341, 240 x 320 px, SPI (4-wire serial), 16-bit colour
TouchXPTek XPT2046 (resistive, SPI)
BacklightGPIO 47, dimmable (PWM)
Memory16 MB flash, 8 MB octal PSRAM (N16R8)
Graphics libraryLovyanGFX

Display pins

ILI9341 on SPI (4-wire serial): SPI clock 40 MHz, host SPI2_HOST, BGR colour order, inversion off.

SignalPin
SCK / CLKGPIO 12
MOSI / SDAGPIO 11
MISO / SDOGPIO 13
CSGPIO 10
DC / RSGPIO 14
RESETGPIO 21
BacklightGPIO 47

Touch pins

XPT2046: 2500 kHz, shares the display bus.

SignalPin
SCKGPIO 12
MOSIGPIO 11
MISOGPIO 13
CSGPIO 9
IRQ / PENIRQGPIO 8

Check your revision. Wiring template - change the pins to match your build.

Designing for it in LCD Wizard

The parts

ILI9341. The most common hobby TFT. 2.2"-2.8" modules, usually with an XPT2046 resistive panel.

XPT2046. The classic 4-wire resistive controller. Needs calibration. Can share the display SPI bus with its own CS.

ESP32-S3. The only common Arduino target with a hardware RGB565 LCD peripheral. PSRAM is effectively required for RGB panels.

LovyanGFX. Widest panel and bus coverage, DMA on ESP32. Configured with a C++ config class.

The pinout on one page

Every pin above, laid out to print and keep beside the bench. Generated from this preset, so it says exactly what the designer writes into lcd_pins.h.

Download the pinout (PNG)Open it as SVG

The same pins as data - board.json and pins.csv - are in the open pinout dataset on GitHub, free to reuse under CC BY 4.0.

Designs for this board

Clone any of them into the designer, or see every design for this board in the gallery.

ESP32-S3 + GC9A01 1.28" round240x240 round panel with CST816S single-touch. Popular for watch faces and gauges.ESP32-S3 · GC9A01 / GC9A01A 240 x 240 · CST816S touch
ESP32 + ILI9341 2.8" SPIThe classic breadboard combination: ESP32 DevKit, 2.8" ILI9341, XPT2046 resistive touch on the same SPI bus.ESP32 · ILI9341 240 x 320 · XPT2046 touch
LCDWIKI 2.8" ESP32-S3 (ES3C28P)2.8" 240x320 IPS ILI9341V over SPI with FT6336G capacitive touch, an ES8311 codec with microphone and speaker output, a WS2812 LED, a 4-bit SD slot and battery charging.ESP32-S3 · ILI9341 240 x 320 · FT6236 / FT6336U touchPurchase this board
STM32F407 + ILI9341 SPIBlack pill / Discovery style wiring using SPI1 and an XPT2046 touch panel.STM32F4 · ILI9341 240 x 320 · XPT2046 touch
Raspberry Pi Pico + ILI9341SPI0 driving a 2.8" ILI9341 with XPT2046 touch.RP2040 · ILI9341 240 x 320 · XPT2046 touch
ESP32-S3 + ST7701S 480x480 round480x480 RGB panel that needs a 3-wire SPI init sequence alongside the RGB bus.ESP32-S3 · ST7701 / ST7701S 480 x 480 · CST328 touch

Next