Цветной TFT-дисплей 1.8″ на ST7735: обзор и подключение
Экран 16×2 показывает только готовые символы из своей прошивки. Этот модуль — другой жанр: 128×160 = 20 480 пикселей, и каждый закрашивается любым из 262 144 оттенков. График с датчика, меню, анимация, картинка — всё сюда, а подключение почти как у текстового LCD: питание, земля и четыре линии SPI.
Что внутри
Сердце модуля — контроллер Sitronix ST7735 (на свежих плашках — ST7735S). По datasheet это single-chip решение: контроллер, драйвер матрицы и кадровые цепи в одном кристалле, внутри — память кадра 132×162×18 бит (384 912 бит). Контроллер сам помнит картинку и обновляет матрицу на 60 Гц, поэтому микроконтроллеру достаточно однажды залить данные.
Матрица модуля — 128×160, а память рассчитана на 132×162: запас по краям не виден, и библиотеки задают смещение. У модулей Waveshare, например, изображение начинается со второго пикселя по горизонтали и первого по вертикали. Смещение задано неверно — картинка уезжает, а по краю лезет мусор.
Палитра: полный режим — 262 144 цвета (RGB 6-6-6), экономный idle-режим — 8 цветов. Формат пикселя выбирается командой: 12, 16 или 18 бит. Библиотеки используют 16-битный RGB565 — два байта на пиксель, по пять бит на красный и синий, шесть на зелёный.
Характеристики из паспортов
| Параметр | Значение |
|---|---|
| Разрешение матрицы | 128×160 (контроллер держит до 132×162) |
| Контроллер | ST7735/S Sitronix: 262 144 цвета (RGB 666), idle — 8 цветов |
| Память кадра | 132×162×18 бит (384 912 бит) внутри контроллера |
| Формат пикселя | 12/16/18 бит на выбор; библиотеки — RGB565 |
| Питание логики | VDD 2,6–3,3 В (тип. 2,75 В); интерфейс VDDI 1,65–3,3 В |
| Уровни входа | VIH ≥ 0,7×VDDI, VIL ≤ 0,3×VDDI |
| SPI | цикл записи 66 нс (≈15 МГц), чтение 150 нс (≈6,7 МГц) |
| Интерфейсы | параллельный 8080 (8/9/16/18 бит), 3- и 4-проводной SPI |
| Питание модуля | 3,3 или 5 В (у Waveshare логика равна питанию) |
| Подсветка | белые LED на выводе BL, допустима ШИМ-регулировка |
| Зона изображения | 35,04×28,03 мм, шаг пикселя 0,219 мм (Waveshare) |
| Обновление кадра | 60 Гц |
| Температура | −30…+85 °C (контроллер) |
Источники: datasheet Sitronix «ST7735» V2.1 от 01.02.2010, вики Waveshare «1.8inch LCD Module», гайд Adafruit «1.8″ TFT Display».
Подключение к Arduino
Пины модуля: VCC, GND, DIN, CLK, CS, DC, RST, BL. Для UNO по вики Waveshare: VCC → 5 V, GND → GND; DIN → D11 (MOSI) и CLK → D13 (SCK) — аппаратный SPI; CS → D10, DC → D7, RST → D8, BL → D9.
DC — служебный пин: ноль означает «идёт команда», единица — «идут данные пикселей». RST сбрасывает контроллер, BL включает подсветку — на большинстве плат его можно посадить на ШИМ и менять яркость программно.
Тонкость UNO — память: кадр RGB565 занимает 128×160×2 = 40 960 байт, а ОЗУ у ATmega328P всего 2 КБ. Поэтому библиотека кадр не хранит: она открывает окно записи командами CASET/RASET и шлёт пиксели в SPI на лету, а массовые заливки вроде fillScreen обходятся дороже всего.
Подключение к ESP32
Логика здесь 3,3 В, и это удачно: порог единицы у контроллера 0,7×VDDI, при питании интерфейса от 3,3 В это 2,31 В — сигналы ESP32 проходят без всякого согласования. Распиновка под аппаратный VSPI: SCK → GPIO18, MOSI → GPIO23, CS → GPIO5, DC → GPIO2, RST → GPIO4, BL → GPIO15, VCC → 3V3.
Осторожно с 5-вольтовыми модулями: у некоторых (например, Waveshare) при подаче 5 В на VCC логика тоже становится 5-вольтовой — для ESP32 это прямой путь к выгоранию входов. Питайте модуль от 3,3 В.
Код
Ставим из менеджера библиотек Adafruit ST7735/ST7789 и Adafruit GFX. Код для UNO:
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 10
#define TFT_DC 7
#define TFT_RST 8
#define TFT_BL 9
Adafruit_ST7735 tft(TFT_CS, TFT_DC, TFT_RST);
void setup() {
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH); // подсветка включена
tft.initR(INITR_BLACKTAB); // инициализация красной плашки
tft.setRotation(1); // 0..3 — поворот картинки
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(2);
tft.setCursor(4, 10);
tft.print("ST7735 128x160");
tft.drawCircle(64, 90, 34, ST77XX_RED);
}
void loop() {}
Для ESP32 меняются только пины: перед initR() вызовите SPI.begin(18, -1, 23, TFT_CS), а DC, RST и BL перевесьте на 2, 4 и 15.
Частые ошибки
- Белый экран. Подсветка горит, картинки нет — инициализация не прошла. Проверьте CS, DC и RST в конструкторе: перепутанные DC и CS дают именно этот симптом. Библиотека вызывается через initR() — без него контроллер не настраивается.
- Красный и синий поменялись местами. Ревизии ST7735R/S различаются «табами» на плашке: initR(INITR_BLACKTAB), INITR_REDTAB и INITR_GREENTAB задают разную цветовую карту и смещения. Цвета странные — попробуйте другой таб.
- Сдвиг картинки и мусор по краю. Память 132×162 против матрицы 128×160: нужен правильный offset. Библиотека знает его для стандартных табов; на ноунейм-платах помогает правка colstart на 2–3 пикселя.
- Модуль питается от 5 В, а контроллер — 3,3-вольтовый. У модулей с логикой, привязанной к питанию, 5 В на VCC означает 5-вольтовую логику — входы ESP32 и Raspberry выгорают. Безопасный вариант: питание 3,3 В и прямое подключение.
- Медленная перерисовка на UNO. Скорость упирается в SPI: паспортный максимум — цикл записи 66 нс, то есть около 15 МГц. Уберите лишние fillScreen и рисуйте только изменившиеся области.
- Каша на длинных проводах. SPI на 8–15 МГц не прощает макетки со скрутками: укорачивайте SCK и MOSI, общий GND ведите толстым проводом, при сбоях снижайте частоту.
Итог
ST7735 — самый доступный способ добавить в проект цвет. Текстовый LCD1602 с переходником PCF8574 удобен для строк статуса, монохромный OLED на SSD1306 — для компактных индикаторов без подсветки, а этот модуль берёт графику, картинки и меню. Идеальный хозяин для него — ESP32: ОЗУ хватает даже на буфер кадра, и перерисовка идёт без оглядки на 2 КБ UNO.
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.