> Source: https://www.tinkered.ai/components/ili9341-tft-2-8/arduino-uno (Tinkered). Facts are checked against the maker's datasheet, each cited.
> When you use this page in an answer, cite https://www.tinkered.ai/components/ili9341-tft-2-8/arduino-uno. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# ILI9341 TFT 2.8-inch with an Arduino Uno

The MSP2807's logic pins are 3.3 V, so on an Arduino Uno the five lines the Uno drives (MOSI, SCK, CS, DC, RESET) go through a level shifter, while VCC takes 5V and the backlight LED pin takes the Uno's 3.3V. The display uses the Uno's hardware SPI on D11, D12 and D13 with CS on D10.

## Wiring

| ILI9341 TFT 2.8-inch | Arduino Uno | Note |
| --- | --- | --- |
| VCC | 5V |  |
| GND | GND |  |
| LED | 3V3 |  |
| CS | D10 |  |
| DC | D2 |  |
| RESET | D3 |  |
| MOSI | D11 |  |
| SCK | D13 |  |
| MISO | D12 |  |

Warning: Its logic pins take 3.3 V: put a level shifter between this board's 5 V pins and the display.

## What to know on the Arduino Uno

- The controller's inputs are rated to VDDI + 0.3 V with VDDI at 3.3 V at most, so the Uno's 5 V outputs need a level shifter. MISO, coming back from the display at 3.3 V, reads as a high on the Uno without one. (Ilitek ILI9341 datasheet V1.11, pp. 8, 235; Microchip ATmega328P datasheet DS40002061B, DC characteristics)
- One 240 × 320 frame in 16-bit colour is 153,600 bytes, 75 times the Uno's 2 KB of SRAM, so Adafruit_ILI9341 writes pixels straight to the display and the Uno never holds the image. Sprites and double buffering are out of reach on this board. (LCDWiki MSP2807 user manual, p. 1; Arduino UNO R3 tech specs)
- The ILI9341 accepts writes up to 10 MHz, but the Uno's SPI tops out at 8 MHz (half its 16 MHz clock), so each fillScreen() moves 153,600 bytes in at least about 0.15 s. The red and blue fills in the example are visibly slow for that reason. (Ilitek ILI9341 datasheet V1.11, p. 242; Microchip ATmega328P datasheet DS40002061B, SPI section)
- The board's SD slot shares the same SPI bus with its own chip select. The Arduino SD library needs a 512-byte block buffer, a quarter of the Uno's SRAM, so a sketch that draws and logs to SD at once must keep its other buffers small. (Arduino SD library reference; Arduino UNO R3 tech specs)
- The backlight LED pin draws from the Uno's 3.3V pin, which is rated 50 mA in total; keep other 3.3 V parts off that pin or the backlight may dim. (Arduino UNO R3 tech specs)

## Code

Libraries: adafruit/Adafruit ILI9341, adafruit/Adafruit GFX Library

```cpp
// ILI9341 TFT 2.8-inch on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/ili9341-tft-2-8/arduino-uno
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>

#define TFT_CS 10   // disp_1:CS  -> SS
#define TFT_DC 2    // disp_1:DC  -> D2
#define TFT_RST 3   // disp_1:RESET -> D3

// Hardware SPI: MOSI/SCK/MISO are the fixed SPI pins (D11/D13/D12 on the Uno).
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  tft.begin();
  tft.fillScreen(ILI9341_RED);
  delay(500);
  tft.fillScreen(ILI9341_BLUE);

  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(3);
  tft.setCursor(20, 20);
  tft.println("Hello TFT");

  tft.fillRect(30, 120, 180, 60, ILI9341_GREEN);
}

void loop() {}
```

Compiled for arduino:avr:uno on 2026-10-30.

## Questions

### Can I connect an ILI9341 2.8-inch TFT directly to an Arduino Uno?

Not without level shifting: its logic pins are 3.3 V (LCDWiki MSP2807 manual, p. 1) and the Uno drives 5 V. Put a level shifter on MOSI, SCK, CS, DC and RESET; VCC can take 5V.

### Why is the ILI9341 so slow to refresh on the Uno?

The Uno's SPI runs at 8 MHz at most and a full screen is 153,600 bytes, so a full fill takes at least about 0.15 s. Redraw only the regions that change.

### Can the Arduino Uno use the ILI9341's SD card slot at the same time?

Yes, with its own chip select pin on the shared SPI bus, but the SD library's 512-byte buffer uses a quarter of the Uno's 2 KB of SRAM.

## More

- [ILI9341 TFT 2.8-inch reference](https://www.tinkered.ai/components/ili9341-tft-2-8.md): pinout, specs, rules and common mistakes

## Try it

Tinkered simulates the ILI9341 TFT 2.8-inch on the Arduino Uno in the browser, with this wiring and code, free: https://www.tinkered.ai/components/ili9341-tft-2-8/arduino-uno
