Project Overview Arduino + 1.8-inch ST7735 TFT (128×160): drive a full-color SPI display....
Arduino + 1.8-inch ST7735 TFT (128×160): drive a full-color SPI display. This guide shows how to wire an ST7735 TFT module to an Arduino (UNO or Nano), install the Adafruit libraries, run the graphictest example, and then build a simple custom screen with text and a counter.
Note: The 1.8-inch ST7735 module is officially 3.3 V logic. On a 5 V Arduino, drop each control line through a 1 kΩ resistor in series so you do not blow the controller inputs over time. Some boards have an on-board level shifter and tolerate 5 V directly, but the resistors are cheap insurance regardless.
Goal: Make sure you are looking at the right side of the board.
What to do: The breakout has two pin rows. The 8-pin row is for the TFT display itself. The 16-pin row drives the on-board SD card slot, which we will ignore. From the TFT side, you will see these pin labels: RST, CS, D/C, DIN (MOSI), SCLK, VCC, BL, GND.
Expected result: You can find each labelled pin on the back of the module.
Goal: Connect 8 lines, 5 of them through 1 kΩ resistors.
What to do: Use this pin map (Arduino UNO or Nano are identical):
Without the resistors the screen often shows streaky noise and a bright glow at the top, which are classic symptoms of overdriving the controller. With them in place the image is clean.
Expected result: Screen powers up white (or noisy) until the sketch initialises it.
Goal: Get the GFX rendering primitives plus the ST7735-specific driver.
What to do: In Arduino IDE Library Manager, install:
Expected result: Examples like graphictest show up under File → Examples → Adafruit ST7735 and ST7789.
Goal: Confirm the wiring with the canonical demo.
What to do: Open File → Examples → Adafruit ST7735 and ST7789 → graphictest. Adjust the pin defines at the top of the sketch to match your wiring (D9 for CS, D8 for DC, D7 for RST). Make sure the initialiser line uses the right tab colour for your board:
tft.initR(INITR_BLACKTAB); // most red-PCB 1.8" modules
// tft.initR(INITR_GREENTAB); // try this if reds and blues swap
// tft.initR(INITR_REDTAB); // last resort, older boards
Upload. The demo cycles through colour fills, lines, circles, rectangles, and a Hello-World text test.
Expected result: Smooth animation across the full 128×160 screen with crisp colours.
Goal: Replace the demo with something you wrote.
What to do:
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 9
#define TFT_RST 7
#define TFT_DC 8
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(6, 8);
tft.setTextColor(ST77XX_CYAN);
tft.setTextSize(2);
tft.print("ShillehTek");
tft.setCursor(6, 36);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(1);
tft.print("1.8\" ST7735 demo");
}
unsigned long counter = 0;
void loop() {
tft.fillRect(6, 60, 120, 16, ST77XX_BLACK);
tft.setCursor(6, 60);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.print(counter++);
delay(500);
}
If your colours look wrong (red and blue swapped), change INITR_BLACKTAB to INITR_GREENTAB and re-upload.
Expected result: “ShillehTek” in cyan, sub-line in white, and a yellow counter ticking up twice a second.
Goal: Expand the same wiring and libraries into a real UI for your project.
drawRGBBitmap() call - convert PNGs with an image converter
SD library; the 16-pin row exposes the SPI signals)Expected result: You have a working baseline sketch and clear next steps to turn the TFT into a dashboard.
The 1.8-inch ST7735 TFT is an inexpensive way to add a full-color 128×160 SPI display to an Arduino project while keeping the familiar Adafruit GFX API. After wiring with simple series resistors, you can run the graphictest example and then build your own screens quickly.
Want the exact parts used in this build? Grab them from ShillehTek.com. If you want help customizing this project or building something for your product, check out our IoT consulting services.