TFT LCD displays bring full-colour graphics to Arduino and ESP32 projects, offering resolutions and sizes far beyond what monochrome OLEDs can provide. The three most popular TFT LCD controllers — ST7735, ILI9341, and ILI9488 — serve different project needs from compact wearables to full dashboard interfaces. This guide compares all three, covers SPI wiring, and helps you choose the right TFT display for your project.
Table of Contents
- TFT LCD Technology Overview
- ST7735: Compact 1.8″ Colour Display
- ILI9341: The Versatile 2.4″ Standard
- ILI9488: Large 3.5″ Full-Colour Display
- SPI Wiring for All Three
- Touchscreen Integration
- Performance Comparison
- Frequently Asked Questions
- Conclusion
TFT LCD Technology Overview
TFT (Thin Film Transistor) LCDs use active-matrix technology where each pixel has its own transistor, enabling fast refresh rates and full 16-bit colour (65,536 colours). Unlike OLEDs, TFTs require a backlight, which means they consume more power but are also brighter in direct sunlight.
ST7735: Compact 1.8″ Colour Display
The ST7735 drives a 128×160 pixel, 1.8″ TFT display. It is the smallest and cheapest colour display option, ideal for compact projects. Features:
- Resolution: 128×160 pixels
- Colour: 18-bit (262K colours), typically driven at 16-bit
- Interface: SPI (up to 15.2 MHz)
- Size: 1.8 inches diagonal
- Price: ₹200-350
Best for: portable projects, wearable devices, simple status displays, and projects where space is limited.
ILI9341: The Versatile 2.4″ Standard
The ILI9341 is the most popular TFT display for Arduino projects. The 240×320 pixel, 2.4″ display provides a good balance of size, resolution, and speed. Most modules include a resistive touchscreen.
- Resolution: 240×320 pixels
- Colour: 18-bit (262K colours)
- Interface: SPI (up to 40 MHz on ESP32)
- Touchscreen: Resistive (most modules include XPT2046 controller)
- Price: ₹400-600
ILI9488: Large 3.5″ Full-Colour Display
The ILI9488 drives a 320×480 pixel, 3.5″ display. This is the largest commonly available SPI TFT and is suitable for dashboard-style interfaces, image viewers, and complex GUIs.
- Resolution: 320×480 pixels
- Colour: 18-bit
- Interface: SPI (slower due to larger pixel count)
- Touchscreen: Resistive or capacitive (varies by module)
- Price: ₹600-1,000
SPI Wiring for All Three
// Common SPI Wiring (Arduino Uno)
// TFT VCC → 5V (or 3.3V, check module)
// TFT GND → GND
// TFT CS → D10
// TFT RST → D9
// TFT DC → D8
// TFT MOSI → D11 (SPI MOSI)
// TFT SCK → D13 (SPI SCK)
// TFT LED → 3.3V (backlight, some need a resistor)
// TFT MISO → D12 (SPI MISO, only for touchscreen)
// ESP32 SPI Wiring (VSPI)
// TFT CS → GPIO5
// TFT RST → GPIO4
// TFT DC → GPIO2
// TFT MOSI → GPIO23
// TFT SCK → GPIO18
// TFT MISO → GPIO19
Touchscreen Integration
Most ILI9341 and ILI9488 modules include a resistive touchscreen with an XPT2046 touch controller. This connects via a separate SPI channel (share MOSI/MISO/SCK but use a different CS pin).
#include <XPT2046_Touchscreen.h>
#define TOUCH_CS 15 // Separate CS for touch controller
XPT2046_Touchscreen ts(TOUCH_CS);
void setup() {
ts.begin();
ts.setRotation(1);
}
void loop() {
if (ts.touched()) {
TS_Point p = ts.getPoint();
// Map raw touch coordinates to screen pixels
int x = map(p.x, 200, 3700, 0, 320);
int y = map(p.y, 200, 3700, 0, 240);
Serial.printf("Touch at: %d, %dn", x, y);
}
}
Performance Comparison
| Metric | ST7735 | ILI9341 | ILI9488 |
|---|---|---|---|
| Full Screen Clear | 15ms | 35ms | 90ms |
| Text Rendering | Fast | Good | Slow |
| Image Display | Quick (20KB) | Moderate (150KB) | Slow (300KB) |
| SPI Clock (ESP32) | 27 MHz | 40 MHz | 27 MHz |
| Arduino Uno Usable | Yes | Yes (slow) | Barely |
For the ILI9488, ESP32 is strongly recommended over Arduino Uno. The larger pixel count requires faster SPI and more RAM for frame buffers.
Frequently Asked Questions
Which TFT library should I use?
For Arduino Uno: Adafruit_GFX + Adafruit_ST7735 or Adafruit_ILI9341. For ESP32: TFT_eSPI by Bodmer offers significantly better performance with hardware SPI DMA. The TFT_eSPI library supports all three controllers.
Can I display images on these TFTs?
Yes. Convert images to BMP format at the display’s resolution, store on an SD card, and use the library’s BMP drawing function. For faster loading, convert to a raw RGB565 binary format. The Arduino Uno’s limited RAM (2KB) restricts image display; use ESP32 for image-heavy projects.
How do I improve display speed on Arduino Uno?
Use hardware SPI (pins 11, 13), reduce the colour depth to 8-bit where possible, avoid full screen clears (only update changed regions), and use the fastest SPI clock your display module supports.
What is the difference between SPI and parallel TFTs?
SPI TFTs use 4-5 data pins but are slower. Parallel (8/16-bit) TFTs use 8-16 data pins but are 4-8x faster. Parallel shields are available for Arduino Mega and are the only practical option for video playback or complex animations at the ILI9488 resolution.
Conclusion
Choose the ST7735 for compact, budget projects; the ILI9341 for the best all-round balance of size, resolution, and touchscreen; and the ILI9488 for dashboard-style displays where screen real estate matters most. All three are well-supported by Arduino libraries and available at affordable prices. Find TFT displays, shields, and microcontrollers at Zbotic to bring colour to your next project.
Add comment