The 1.8″ ST7735 is the cheapest colour screen in Indian shops and a good fit for the S3: the chip’s hardware SPI drives it quickly, and the module is 3.3 V already, so no level shifting.
Wire SDA (MOSI) to GPIO11, SCK to GPIO12, CS to GPIO10, A0 to GPIO15 and RESET to GPIO16, and power the board and backlight from 3V3.
Wiring
| ESP32-S3-DevKitC-1 | 1.8" ST7735 colour TFT (128×160) | Wire | Notes |
|---|---|---|---|
| 3V3 | VCC | red | |
| GND | GND | black | |
| 10 | CS | purple | |
| 16 | RESET | orange | |
| 15 | A0 | blue | A0 is the data/command (DC) pin. |
| 11 | SDA | green | SDA here is SPI MOSI, not I2C. |
| 12 | SCK | yellow | |
| 3V3 | LED | red | Backlight. Use a GPIO with PWM instead to dim it. |
3.3–5 V on VCC (on-board regulator on most boards) part, 3.3 V board. The ST7735 is a 3.3 V chip. ESP32 and Pico connect directly. On a 5 V Arduino, put a level shifter or 1 kΩ / 2 kΩ dividers on CS, RESET, A0, SDA and SCK — 5 V signals shorten the display’s life.
Board quirks
- The S3’s fast hardware SPI is on GPIO11 (MOSI) and GPIO12 (SCK). The display has no MISO, so GPIO13 stays free.
- GPIO15/16 for A0/RESET have no boot role. On the S3, Arduino core 3.x also uses GPIO15/16 as Serial1’s default pins — if you add a UART device later, give Serial1 other pins.
- The same 1.8″ board comes with different panel tabs. Wrong colours or a band of noise at the edges means you need
INITR_GREENTABorINITR_REDTABinstead ofINITR_BLACKTAB. - The sketch shows the PSRAM size: 0 KB is normal with the default settings. N8R8/N16R8 boards report 8192 KB once you select OPI PSRAM in Tools.
Code
// 1.8" ST7735 128x160 SPI TFT on an ESP32-S3-DevKitC-1 (hardware SPI on the default FSPI pins).
// VCC → 3V3, GND → GND, CS → GPIO10, RESET → GPIO16, A0 (DC) → GPIO15, SDA → GPIO11 (MOSI),
// SCK → GPIO12, LED → 3V3 (backlight).
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
constexpr int8_t TFT_CS = 10;
constexpr int8_t TFT_DC = 15;
constexpr int8_t TFT_RST = 16;
Adafruit_ST7735 tft(TFT_CS, TFT_DC, TFT_RST); // uses SPI: SCK 12, MOSI 11 on the S3
void setup() {
Serial.begin(115200);
tft.initR(INITR_BLACKTAB); // try INITR_GREENTAB / INITR_REDTAB if colours or edges look wrong
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_CYAN);
tft.setTextSize(2);
tft.setCursor(8, 8);
tft.print("ESP32-S3");
tft.setTextSize(1);
tft.setTextColor(ST77XX_WHITE);
tft.setCursor(8, 34);
tft.printf("PSRAM: %u KB", ESP.getPsramSize() / 1024);
Serial.println("ST7735 ready");
}
void loop() {
static uint32_t frame = 0;
tft.fillRect(8, 60, 150, 20, ST77XX_BLACK);
tft.setCursor(8, 60);
tft.setTextSize(2);
tft.setTextColor(ST77XX_YELLOW);
tft.printf("Up %lu s", millis() / 1000);
uint16_t c = tft.color565((frame * 8) & 0xFF, 128, 255 - ((frame * 8) & 0xFF));
tft.fillRect(8, 90, 144, 24, c);
frame++;
delay(500);
}// 1.8" ST7735 128x160 SPI TFT on an ESP32-S3-DevKitC-1 (hardware SPI on the default FSPI pins).
// VCC → 3V3, GND → GND, CS → GPIO10, RESET → GPIO16, A0 (DC) → GPIO15, SDA → GPIO11 (MOSI),
// SCK → GPIO12, LED → 3V3 (backlight).
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
constexpr int8_t TFT_CS = 10;
constexpr int8_t TFT_DC = 15;
constexpr int8_t TFT_RST = 16;
Adafruit_ST7735 tft(TFT_CS, TFT_DC, TFT_RST); // uses SPI: SCK 12, MOSI 11 on the S3
void setup() {
Serial.begin(115200);
tft.initR(INITR_BLACKTAB); // try INITR_GREENTAB / INITR_REDTAB if colours or edges look wrong
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_CYAN);
tft.setTextSize(2);
tft.setCursor(8, 8);
tft.print("ESP32-S3");
tft.setTextSize(1);
tft.setTextColor(ST77XX_WHITE);
tft.setCursor(8, 34);
tft.printf("PSRAM: %u KB", ESP.getPsramSize() / 1024);
Serial.println("ST7735 ready");
}
void loop() {
static uint32_t frame = 0;
tft.fillRect(8, 60, 150, 20, ST77XX_BLACK);
tft.setCursor(8, 60);
tft.setTextSize(2);
tft.setTextColor(ST77XX_YELLOW);
tft.printf("Up %lu s", millis() / 1000);
uint16_t c = tft.color565((frame * 8) & 0xFF, 128, 255 - ((frame * 8) & 0xFF));
tft.fillRect(8, 90, 144, 24, c);
frame++;
delay(500);
}Library: Adafruit ST7735 and ST7789 Library (Adafruit) — compiled with Adafruit ST7735 and ST7789 Library 1.12.0.
Expected serial output
ST7735 readyST7735 ready
Common errors
White screen
No data reaching the panel: check CS, A0 and RESET pin numbers, and that SDA/SCK go to 11/12.
Colours swapped (red shows as blue)
Panel variant. Try INITR_GREENTAB or INITR_REDTAB.