Interfacing Arduino with ST7789 TFT Display – Graphics Test Example

This Arduino tutorial shows how to interface the UNO board with ST7789 TFT display.
The ST7789 TFT module contains a display controller with the same name: ST7789. It’s a color display that uses SPI interface protocol and requires 3, 4 or 5 control pins, it’s low cost and easy to use. This display is an IPS display, it comes in different sizes (1.3″, 1.54″ …) but all of them should have the same resolution of 240×240 pixel, this means it has 57600 pixels. This module works with 3.3V only and it doesn’t support 5V (not 5V tolerant).

TFT: Thin-Film Transistor.
SPI: Serial Peripheral Interface.
IPS: In-Plane Switching.

The following image shows a ST7789 display module provided by Adafruit Industries:

Adafruit ST7789 TFT display module
Adafruit ST7789 TFT display module

Another version of the ST7789 display module is shown below. This one has no CS (chip select) pin, its internally attached to GND:

ST7789 TFT display without CS pin
ST7789 TFT display without CS pin

Project Hardware Required:

  • Arduino UNO board
  • ST7789 TFT display module (1.3″, 1.54″ …)
  • 4 x 3.3k ohm resistor (+1 if the display module has CS pin)
  • 4 x 2.2k ohm resistor (+1 if the display module has CS pin)
  • Breadboard
  • Jumper wires
Arduino uno with ST7789 IPS TFT display
Arduino uno with ST7789 IPS TFT display

Interfacing Arduino UNO with ST7789 TFT circuit:
Project circuit schematic diagram is shown below.

The ST7789 display module shown in project circuit diagram has 7 pins: (from right to left): GND (ground), VCC, SCL (serial clock), SDA (serial data), RES (reset), DC (or D/C: data/command) and BLK (back light).
Connecting the BLK pin is optional. The back light turns off when the BLK pin connected to the ground (GND).

Arduino ST7789 TFT display circuit
Arduino ST7789 TFT display circuit

As mentioned above, the ST7789 TFT display controller works with 3.3V only (power supply and control lines). The display module is supplied with 3.3V (between VCC and GND) which comes from the Arduino board.

All Arduino UNO board output pins are 5V, connecting a 5V pin to the ST7789 TFT display may damage its controller.
To connect the Arduino to the display module, I used voltage divider for each line which means there are 4 voltage dividers. Each voltage divider consists of 2.2k and 3.3k resistors, this drops the 5V into 3V which is sufficient.

If the display module has a CS pin (Chip Select) then it should be connected to Arduino digital pin 10 through another voltage divider.

So, the ST7789 TFT display is connected to the Arduino board as follows (each one through voltage divider):
RST pin is connected to Arduino digital pin 8,
DC pin is connected to Arduino digital pin 9,
SDA pin is connected to Arduino digital pin 11,
SCL pin is connected to Arduino digital pin 13.

Other pins are connected as follows:
VCC pin is connected to Arduino 3V3 pin,
GND pin is connected to Arduino GND pin,
BL (LED) pin is connected to Arduino 3V3 pin (optional).

Interfacing Arduino UNO with ST7789 TFT code:
The following Arduino code requires two libraries from Adafruit Industries:
The first library is a driver for the ST7789 TFT display which can be installed from Arduino IDE library manager (Sketch —> Include Library —> Manage Libraries …, in the search box write “st7789” and install the one from Adafruit).

The second library is Adafruit graphics library which can be installed also from Arduino IDE library manager.

Both libraries can be installed manually, first download them from the following 2 links:
Adafruit ST7789 TFT library    —->  direct link
Adafruit graphics library        —->  direct link

After the download, go to Arduino IDE —> Sketch —> Include Library —> Add .ZIP Library … and browse for the .zip file (previously downloaded).
The same thing for the other library file.

Hints:
The 2 library files are included in the main code as shown below.
Including Arduino SPI library is optional!

The ST7789 TFT module pins (CS, RST and DC) connections are defined as shown below:

The other display pins (SDA and SCL) are connected to Arduino hardware SPI pins (digital pin 11 and digital pin 13).

The Adafruit ST7789 library is initialized with this line:

And the TFT display is initialized using the following command:

The display may not work if it has a CS pin, try with SPI_MODE0 which is the default mode of the library or just use: tft.init(240, 240);

Rest of code is described through comments.

Full Arduino code:

The video below shows my breadboard test circuit:

2 comments

  1. Hello, i tested it with Arduino Micro Pro. As is described, it was not working. After change Res to pin 9, DC to pin 8, BLK to pin 10 is now working nice. Thank for inspiration.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.