Is ST7735 1.8 Color TFT Display (128x160) Compatible with Home Assistant (ESPHome)?
Electrical Specifications
Always confirm pin assignments against the manufacturer datasheet before wiring.
Compatibility Overview
1.8 inch full-color TFT display for compact sensor dashboards status monitors and menu screens.
Wiring ST7735 1.8 Color TFT Display (128x160) to ESP32
| Module pin | ESP32 | Note |
|---|---|---|
| VCC | 3V3 | Bare panels are 3.3V parts. Some Chinese 1.8" modules carry a regulator and a J1 jumper: bridged, they take 3.3V logic directly. |
| GND | GND | |
| SCK / SCL | GPIO18 | SPI clock. The silkscreen borrows I2C names; nothing here is I2C. |
| SDA / MOSI | GPIO23 | |
| CS | GPIO5 | |
| A0 / DC | GPIO16 | Data/command select. |
| RESET | GPIO17 | |
| LED / BL | GPIO4 | Backlight. Through the PWM output in the config it becomes a dimmable light; tied to 3.3V it is simply on. |
Host pins are the ones the configuration on this page uses. Move a pin here and change it in the YAML — they are documented together so they cannot disagree.
Technical Specification Matrix
| Feature / Attribute | Specification / Status |
|---|---|
| Hardware Protocol | SPI / 3.3V |
| Bridge Required | NO |
| Border Router Needed | None |
| Hardware Capabilities & Peripherals | Color TFT Screen Backlight Dimmer Note: these entities come from the ESPHome configuration you flash — each one needs its matching component in that YAML before it appears. |
| Pairing Complexity | Plug-and-Play |
| Factory Reset Instruction | Hold BOOT button for 2s. |
Wire, Flash, Adopt, Check
Wire it up
Follow the wiring table above. The ESP32 pins there are the ones the configuration uses, so if you move one, change it in both places.
Flash the configuration
Create a new device in the ESPHome dashboard (the Home Assistant add-on) and paste the configuration below into it, or save it as emb_esp32_st7735_esphome.yaml and run esphome run emb_esp32_st7735_esphome.yaml. The first flash goes over USB. If it is not detected, hold BOOT button for 2s to put it in download mode. Every update after that is over the air.
Adopt it in Home Assistant
Settings → Devices & Services. A node on the same network shows up as a discovered ESPHome device within a minute of joining Wi-Fi; choose Configure and enter the API encryption key from your secrets.yaml. If discovery does not find it, add the ESPHome integration by hand with the node's IP address.
Check it works
Hello appears top-left on a black background with the backlight on. A shifted image with a noisy stripe is the model; a lit backlight and nothing else is the SPI wiring or the DC pin; a dark screen with a picture faintly visible is the backlight polarity.
ESPHome Configuration
Starting configuration for ST7735 1.8 Color TFT Display (128x160) on ESP32. Untested on hardware — verify wiring and pins against your own board.
# ESPHome configuration for ST7735 1.8 Color TFT Display (128x160)
# Host: ESP32. Pin numbers below are host-side defaults — any free
# GPIO will do, and you should change them to match your own wiring.
esphome:
name: emb_esp32_st7735_esphome
friendly_name: "ST7735 1.8 Color TFT Display (128x160)"
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
encryption:
key: !secret api_encryption_key
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
spi:
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
# model names the panel variant by the colour of the tab on the protective
# film the glass shipped with (black, green or red). The variants differ in
# their column and row offsets, so a wrong model shows the image shifted with
# a band of noise along one edge.
display:
- platform: st7735
model: INITR_BLACKTAB
cs_pin: GPIO5
dc_pin: GPIO16
reset_pin: GPIO17
rotation: 0
device_width: 128
device_height: 160
col_start: 0
row_start: 0
eight_bit_color: true
update_interval: 1s
lambda: |-
it.print(0, 0, id(roboto), "Hello");
font:
- file: "gfonts://Roboto"
id: roboto
size: 14
# The LED pin drives the backlight. Through a PWM output it becomes a
# dimmable light in Home Assistant instead of a wire tied to 3.3V.
output:
- platform: ledc
pin: GPIO4
id: backlight_pwm
light:
- platform: monochromatic
output: backlight_pwm
name: "Backlight"
restore_mode: ALWAYS_ON
Before you flash:
the !secret values come from your
secrets.yaml, and the GPIO numbers are host-side
defaults rather than properties of this part — change them to match how you actually wired it.
What Appears in Home Assistant
Dimmable, from the ledc output on the LED pin. Displays themselves have no entity; pull state in with text_sensor: platform: homeassistant.
Known Problems and Fixes
Tab colour is the model
The colour of the tab on the protective film — black, green or red — names the panel variant, and the variants differ in column and row offsets. INITR_BLACKTAB in the config is the common one. A wrong model shows the image shifted with a band of noise along one edge; try the other tabs before anything else.
SDA and SCL are SPI
The silkscreen uses I2C names for SPI lines. Wiring them to GPIO21 and GPIO22 and adding an i2c: block is the first thing that goes wrong with this display.
Colour depth versus RAM
eight_bit_color: true halves the frame buffer, which on an ESP32 barely matters (the full 16-bit buffer is 40kB) but on an ESP8266 is the difference between building and not. Set it false for full colour on an ESP32.
Tearing
If the image tears or shows stray lines, lower the SPI clock: data_rate: 20MHz on the display block.
Backlight current
The LED pin draws around 20mA through the module's own resistor, which a GPIO can supply. Modules with a transistor on the backlight need the pin inverted; the picture is there but dark if so.
Report a Pinout Error or Submit Tested Code Snippets
Found a pin mapping quirk or built a custom ESPHome YAML driver for ST7735 1.8 Color TFT Display (128x160)? Submit a pull request or report corrections to our index.
Hardware Correction Reporter (emb-esp32-st7735-esphome)
Frequently Asked Questions
Does ST7735 1.8 Color TFT Display (128x160) work without an internet connection?
How is ST7735 1.8 Color TFT Display (128x160) powered and wired to the host board?
How does the host board reach Home Assistant (ESPHome)?
Alternatives
ST7789 240x240 Color IPS Display
240x240 IPS, better viewing angles, the same wiring pattern.
ILI9341 2.8 320x240 Color TFT Display
2.8" 320x240, usually with a resistive touch panel.
GC9A01 1.28 Round IPS Display
The 1.28" round GC9A01, for a dial.
SSD1306 0.96 OLED Display (128x64)
Monochrome on I2C, two wires fewer.