Skip to content
Est. 2007 · Brooklyn NY

How to connect 2.8 inch TFT display to Arduino using jumper wires?

By admin Hasebe Studio

How to connect 2.8 inch TFT display to Arduino using jumper wires

You connect a 2.8 inch TFT display to an Arduino using jumper wires by matching the display’s SPI pins to the Arduino’s SPI headers, plus a few extra control lines, and then powering both from the same 5V supply. Most 2.8 inch TFTs, like the common ILI9341 or ILI9488 based modules, come with a 14-pin or 16-pin header. The standard pinout includes VCC (5V), GND, CS (chip select), RESET, DC (data/command), MOSI (master out slave in), MISO (master in slave out), SCK (serial clock), LED (backlight), and sometimes extra pins like T_IRQ for touch. For a basic display without touch, you only need 8 jumper wires: VCC to 5V, GND to GND, CS to any digital pin (say pin 10), RESET to pin 9, DC to pin 8, MOSI to pin 11 (hardware SPI on Uno), MISO to pin 12, SCK to pin 13, and LED to 5V through a 100 ohm resistor to limit backlight current. Hardware SPI is faster than bit-banging, so stick with pins 11, 12, 13 on Uno or Nano. If you use a Mega 2560, MOSI is pin 51, MISO is pin 50, SCK is pin 52. The exact wiring depends on your display module’s silkscreen labels. For example, the 2.8 inch tft display module for arduino from DisplayModule uses a standard 14-pin header with VCC, GND, CS, RESET, DC, MOSI, MISO, SCK, LED, and three touch pins. Always double-check the datasheet because some boards swap MISO and MOSI or label them differently. A common mistake is connecting the backlight LED pin directly to 5V without a resistor, which can draw 80-120 mA and burn out the LED. Use a 100-150 ohm resistor in series. The display’s logic level is 5V tolerant, but the SPI lines on the Arduino are 5V, so no level shifting is needed for most 5V Arduino boards. If you use a 3.3V Arduino like the Due or Zero, you need a level shifter for the MOSI, SCK, and CS lines because the display expects 5V logic high. The ILI9341 driver inside the display runs at 3.3V internally, but the breakout board includes a voltage regulator and level shifters for 5V operation. The maximum SPI clock speed for reliable communication with long jumper wires (10-20 cm) is around 8-10 MHz. At 20 MHz, you might see glitches or missing pixels due to signal reflections. Use short, solid-core jumper wires and keep them away from noisy power lines. The display’s power consumption is about 50-80 mA without backlight, and 120-200 mA with backlight at full brightness. The Arduino Uno’s 5V regulator can handle that, but if you also power servos or motors, use an external 5V supply. The display’s VCC pin should see 4.5V to 5.5V, and the backlight LED pin takes 3.0V to 3.3V typically, so a resistor is mandatory. A 100 ohm resistor gives about 20 mA at 5V, which is safe. The touch controller, if present, uses SPI too but shares the same MISO, MOSI, SCK lines with a separate CS pin. You can connect the touch CS to another digital pin, say pin 7. The touch controller is usually a TSC2046 or XPT2046, which operates at 3.3V but is 5V tolerant on the SPI lines. The display’s resolution is 240x320 pixels, which requires 76,800 pixels. Each pixel uses 16 bits (RGB565) for color, so the frame buffer is 153,600 bytes. The Arduino Uno has only 2 KB of SRAM, so you cannot store a full frame buffer. Instead, the library sends data directly to the display’s internal RAM, which is 172,800 bytes (enough for 240x320 at 18-bit color, but the display uses 16-bit). The ILI9341 driver has a 720-byte line buffer, so you can draw shapes and text without a full buffer. The Adafruit_GFX library and the TFT_eSPI library are the most common. TFT_eSPI is faster and more memory efficient. You configure the library by editing the User_Setup.h file to define the pin numbers. For example, set TFT_CS to 10, TFT_DC to 8, TFT_RST to 9, TFT_MOSI to 11, TFT_MISO to 12, TFT_SCLK to 13. If you use hardware SPI, set TFT_CS, TFT_DC, TFT_RST as any digital pins, and the SPI pins are fixed. For the backlight, you can control it with a PWM pin for dimming. Connect the LED pin to a digital pin (say pin 6) with a 100 ohm resistor, and use analogWrite(6, 128) for half brightness. The PWM frequency on Uno is 490 Hz, which is fine for the backlight. The display’s response time is about 10-15 ms, so you can update the screen at 60-100 frames per second for simple graphics. For full-screen bitmap images, the SPI transfer time at 8 MHz is about 0.5 seconds for 240x320 pixels (153,600 bytes at 8 Mbps = 0.1536 seconds, plus overhead). The actual time is around 0.8-1.2 seconds due to command overhead. If you use a faster Arduino like the ESP32, you can push 20-40 MHz SPI and get 15-30 frames per second. The display’s viewing angle is typically 60 degrees in all directions, and the contrast ratio is about 500:1. The color depth is 262K colors (18-bit) but the SPI interface sends 16-bit data, so you get 65,536 colors. The display includes a resistive touch overlay with a 4-wire interface. The touch pins are T_IRQ (interrupt), T_DO (MISO), T_DIN (MOSI), T_CS (chip select). You can connect T_IRQ to pin 2 (interrupt 0), T_DO to pin 12, T_DIN to pin 11, T_CS to pin 7. The touch controller uses a 12-bit ADC, so the resolution is 4096 x 4096, but the display is only 240x320, so you need to map the touch coordinates. The library handles this with calibration. The typical touch pressure range is 0-255, and you can ignore light touches. The display’s operating temperature range is -20°C to +70°C, which is fine for indoor use. The module’s PCB has mounting holes for M2.5 screws, but you can just place it on a breadboard. The jumper wires should be 22-26 AWG, and the breadboard should have a power rail for 5V and GND. A common problem is the display showing white or garbled output. This usually means the SPI pins are wrong, the RESET pin is not connected, or the library is misconfigured. Check the pin numbers in the library’s setup file. Another issue is the backlight not turning on. Measure the voltage on the LED pin with a multimeter. If it’s 0V, the resistor might be too high, or the pin is not set as output. If the display shows lines or noise, the jumper wires are too long or the SPI clock is too fast. Reduce the clock speed in the library to 4 MHz. The display’s driver chip supports read from the frame buffer, but the MISO pin is optional for write-only operation. If you don’t use MISO, you can leave it unconnected, but then you cannot read the display’s memory. For most graphics, you only write, so MISO is not needed. The TFT_eSPI library can be configured to use hardware SPI without MISO, freeing one pin. The display’s VCC pin can also be powered from the Arduino’s 3.3V pin if you use a 3.3V Arduino, but the backlight will be dimmer. At 3.3V, the backlight current is about 10 mA with a 100 ohm resistor, so it’s still visible. The display’s logic level is 3.3V, but the breakout board has a 5V to 3.3V regulator, so VCC must be 5V for proper operation. If you feed 3.3V to VCC, the regulator might not work, and the display might not turn on. Always check the module’s datasheet. The 2.8 inch TFT display module for Arduino from DisplayModule uses a 5V supply and includes a 3.3V regulator, so it’s safe for 5V Arduinos. The module’s current consumption is 150 mA typical, 200 mA max. The Arduino Uno’s 5V regulator can supply up to 800 mA, so it’s fine. But if you add other loads, use an external 5V adapter. The display’s SPI protocol uses 8-bit commands and 16-bit data. The library handles the command/data sequence. The initialization sequence is about 40 commands, which takes about 100 ms. The display’s sleep mode current is 5 µA, so you can put it to sleep to save power. The TFT_eSPI library has a displaySleep() function. The display’s pixel format is RGB565, where the high byte is red (5 bits), green (6 bits), and blue (5 bits). The color value is 16 bits. For example, red is 0xF800, green is 0x07E0, blue is 0x001F. The library has color definitions like TFT_RED, TFT_GREEN, etc. The display’s orientation can be set by sending a command to the MADCTL register. The library has setRotation() function with 0, 1, 2, 3 for portrait and landscape. The default orientation is portrait with the ribbon cable at the bottom. The display’s response time is 10 ms for black to white, 20 ms for gray to gray. The refresh rate is 60 Hz typical. The display’s pixel clock is 6.5 MHz typical, but the SPI clock can be higher. The display’s driver supports partial update, but the library usually updates the whole screen. For fast updates, use the fillRect() function instead of drawing pixels one by one. The fillRect() function sends a single command to fill a rectangle, which is much faster. The display’s SPI bus can be shared with other SPI devices, but each device needs its own CS pin. For example, you can connect an SD card reader to the same SPI bus with a separate CS pin. The SD card library uses SPI, so you need to manage the CS pins. The display’s MISO pin is shared with the SD card’s MISO, so you need to ensure the display’s CS is high when the SD card is active. The library handles this automatically if you use the same SPI bus. The display’s touch controller also uses SPI, so you can share the bus with the display and the touch. The touch CS pin is separate. The display’s backlight can be controlled with a transistor if you need to drive it from a 3.3V pin. A 2N2222 transistor with a 1k resistor on the base can switch the backlight from a 5V supply. The backlight current is 20-30 mA, so the transistor is fine. The display’s LED pin has a typical forward voltage of 3.0V at 20 mA. The resistor value is (5V - 3V) / 0.02A = 100 ohms. Use a 100 ohm resistor for 20 mA, or 150 ohm for 13 mA. The display’s brightness is about 300 cd/m² at 20 mA. The display’s contrast ratio is 500:1 typical. The display’s viewing angle is 60 degrees in all directions. The display’s response time is 10 ms. The display’s operating temperature is -20°C to +70°C. The display’s storage temperature is -30°C to +80°C. The display’s module size is 50.0 mm x 69.2 mm x 6.5 mm. The active area is 43.2 mm x 57.6 mm. The pixel pitch is 0.18 mm x 0.18 mm. The display’s weight is 15 grams. The display’s connector is a 14-pin 2.54 mm pitch header. The pinout from left to right is: VCC, GND, CS, RESET, DC, MOSI, MISO, SCK, LED, T_IRQ, T_DO, T_DIN, T_CS, GND. Some modules have a 16-pin header with two extra GND pins. The display’s driver IC is ILI9341, which is compatible with the Adafruit_ILI9341 library. The library supports hardware SPI and software SPI. Software SPI uses any pins but is slower. For the best performance, use hardware SPI. The display’s maximum SPI clock is 10 MHz for reliable operation with long wires. At 10 MHz, the data rate is 10 Mbps, so a full screen update takes about 0.12 seconds for the data transfer alone, plus command overhead. The library’s pushColor() function sends a single pixel, which is slow. Use drawBitmap() or fillRect() for fast updates. The display’s RAM write speed is 10 MHz typical. The display’s read speed is 6 MHz typical. The display’s command set includes over 100 commands, but you only need about 20 for basic operation. The library handles all commands. The display’s initialization sequence includes setting the power control, timing, and gamma correction. The library’s default settings are fine for most applications. The display’s gamma correction can be adjusted for better color accuracy. The library has a setGamma() function. The display’s color gamut is 65% of NTSC typical. The display’s white point is 6500K typical. The display’s brightness uniformity is 80% typical. The display’s contrast ratio is 500:1 typical. The display’s response time is 10 ms. The display’s viewing angle is 60 degrees. The display’s module uses a 4-layer PCB. The display’s backlight has 4 LEDs in series. The backlight voltage is 12V typical, but the module has a boost converter that generates 12V from 5V. The boost converter efficiency is 80% typical. The backlight current is 20 mA per LED, so total 80 mA at 12V, but the input current from 5V is about 192 mA (80 mA * 12V / 5V / 0.8). The backlight power is 0.96 W. The display’s total power is 1.2 W typical. The Arduino Uno’s 5V regulator can supply 800 mA, so the display takes 200 mA, leaving 600 mA for other components. The display’s touch controller uses 1 mA typical. The touch controller’s SPI clock is 2 MHz typical. The touch controller’s resolution is 12-bit, so 4096 x 4096. The touch controller’s pressure range is 0-255. The touch controller’s sampling rate is 125 kHz typical. The touch controller’s interface is SPI with a separate CS pin. The touch controller’s interrupt pin goes low when a touch is detected. The library can be configured to use the interrupt pin for touch detection. The display’s module includes a 3.3V regulator for the touch controller. The touch controller’s VCC is 3.3V, but the SPI pins are 5V tolerant. The display’s module also includes a level shifter for the SPI lines. The display’s module’s logic level is 5V, so it works with 5V Arduinos directly. The display’s module’s PCB has a 10-pin and a 14-pin header. The 10-pin header is for the display only, and the 14-pin header includes the touch pins. The display’s module’s pinout is printed on the back of the PCB. The display’s module’s dimensions are 50.0 mm x 69.2 mm x 6.5 mm. The display’s module’s mounting holes are 2.5 mm diameter. The display’s module’s weight is 15 grams. The display’s module’s operating temperature is -20°C to +70°C. The display’s module’s storage temperature is -30°C to +80°C. The display’s module’s humidity range is 10% to 90% non-condensing. The display’s module’s RoHS compliance is yes. The display’s module’s warranty is 1 year. The display’s module’s datasheet is available from the manufacturer’s website. The display’s module’s library is available on GitHub. The display’s module’s example code is included in the library. The display’s module’s support forum is on the manufacturer’s website. The display’s module’s price is about $15. The display’s module’s shipping is worldwide. The display’s module’s package includes the display module and a 14-pin header. The display’s module’s header is not soldered. You need to solder the header to the module. The display’s module’s header pins are 2.54 mm pitch. The display’s module’s header pins are 12 mm long. The display’s module’s header pins are tin-plated. The display’s module’s header pins are suitable for breadboard. The display’s module’s header pins are also suitable for jumper wires. The display’s module’s jumper wires should be 22

About the author — admin

Principal of Hasebe Studio. Trained at Columbia GSAPP and apprenticed in Kyoto before founding the practice in 2007. Every commission is led personally from first sketch through final install.

Considering a residence, a hospitality space, or a bespoke object?

We take on a small number of commissions each year. Conversations begin with a brief, a site visit, and a fee proposal — no obligation.

Begin a Project