Экран ST7735S TZT 1.77" на ESP32-C3
Господа, помогите пожалуйста настроить экран. Я купил st7735s tzt 1.77" и для подключения использую ACELEX supermini ESP32-с3. Что не делаю экран остаётся белым и ничего не показывает. Подключил по следующей схеме:
VCC → 3.3V
GND→ GND
SCLK→ GPIO4
MOSI→ GPIO6
CS → GPIO7
DC→ GPIO2
RST→ GPIO3
BLK→ GPIO8
Пробовал через библиотеку TFT_eSPI и менял User_Setup.h до следующей конфигурации:
#define TFT_MISO -1
#define TFT_MOSI 6
#define TFT_SCLK 4
#define TFT_CS 7
#define TFT_DC 2
#define TFT_RST 3
#define TFT_BL 8
#define TFT_BACKLIGHT_ON HIGH
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define ST7735_DRIVER
#define TFT_RGB_ORDER TFT_RGB
#define INIT_SEQUENCE_3
#define SPI_FREQUENCY 40000000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
с следующим кодом:
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200);
Serial.println("TZT 1.77\" + ESP32-C3 + TFT_eSPI");
tft.init();
tft.setRotation(1);
pinMode(8, OUTPUT);
digitalWrite(8, HIGH);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
tft.drawString("TZT 1.77\"", 10, 20);
tft.drawString("WORKING!", 10, 50);
tft.fillCircle(120, 80, 30, TFT_RED);
tft.fillRect(10, 90, 60, 40, TFT_GREEN);
tft.drawLine(0, 0, 160, 128, TFT_BLUE);
}
void loop() {
tft.fillScreen(TFT_RED); delay(500);
tft.fillScreen(TFT_GREEN); delay(500);
tft.fillScreen(TFT_BLUE); delay(500);
}
не вышло, пробовал и через библиотеку ESP32 core со следующим кодом:
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 7
#define TFT_RST 3
#define TFT_DC 2
#define TFT_BL 8
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(115200);
Serial.println("ST7735S TZT 1.77\" + ESP32-C3");
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
tft.initR(INITR_144GREENTAB);
tft.setRotation(1);
tft.fillScreen(ST7735_BLACK);
tft.setTextColor(ST7735_WHITE);
tft.setTextSize(2);
tft.setCursor(10, 20);
tft.println("TZT OK!");
tft.setCursor(10, 50);
tft.println("ESP32-C3");
tft.fillCircle(100, 80, 25, ST7735_RED);
tft.drawRect(10, 70, 60, 40, ST7735_YELLOW);
tft.drawLine(0, 0, 160, 128, ST7735_BLUE);
Serial.println("ЭКРАН ДОЛЖЕН ПОКАЗАТЬ ЦВЕТА!");
}
void loop() {
tft.fillScreen(ST7735_RED); delay(500);
tft.fillScreen(ST7735_GREEN); delay(500);
tft.fillScreen(ST7735_BLUE); delay(500);
}



Белый экран на ST7735S — это очень частая ситуация, и почти всегда она означает: питание подано, но инициализация SPI или выводов не совпадает (CS/DC/RST/MOSI/SCLK), или инициализационная последовательность для конкретной версии дисплея (разновидности ST7735) — неверна.
Проверь питание
VCC → 3.3 В — верно. Не подключай к 5 В!
GND → GND — обязательно общее с ESP32.
BLK → 8 (через digitalWrite HIGH) — допустимо, но лучше просто напрямую на 3.3 В, чтобы исключить ошибки.
Попробуй временно подключить BLK напрямую к 3.3V (без кода) и проверь, остаётся ли экран белым — должен загореться равномерно белым (что он и делает — значит питание есть).
На ESP32-C3 SPI не на любых пинах работает.
Некоторые пины зарезервированы для внутренней flash-памяти, и если ты используешь GPIO6 — это ошибка!
GPIO6–GPIO11 у ESP32-C3 связаны со встроенной flash!
Их нельзя использовать для SPI-дисплеев.
Поэтому подключение нужно изменить:
Назначение Было Нужно
SCLK GPIO4 Оставляем
MOSI GPIO6 Заменить, например, на GPIO5
CS GPIO7 можно
DC GPIO2 можно
RST GPIO3 можно
BLK GPIO8 можно (или прямо к 3.3V)
Исправленный вариант конфигурации для TFT_eSPI
Открой User_Setup.h
или лучше User_Setup_Select.h → создай свой User_Setup_ST7735_ESP32C3.h) и пропиши:
#define ST7735_DRIVER
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define TFT_MISO -1
#define TFT_MOSI 5
#define TFT_SCLK 4
#define TFT_CS 7
#define TFT_DC 2
#define TFT_RST 3
#define TFT_BL 8
#define TFT_BACKLIGHT_ON HIGH
#define LOAD_GLCD
#define SPI_FREQUENCY 27000000
#define SPI_READ_FREQUENCY 20000000
SPI_FREQUENCY 40MHz может быть слишком много для некоторых ST7735S – особенно китайских. Лучше начать с 27 MHz.
минимальный пример для TFT_eSPI
#include <TFT_eSPI.h>
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200);
Serial.println("ST7735S test ESP32-C3");
pinMode(8, OUTPUT);
digitalWrite(8, HIGH);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
tft.drawString("ST7735S OK", 10, 10);
}
void loop() {
tft.fillScreen(TFT_RED);
delay(500);
tft.fillScreen(TFT_GREEN);
delay(500);
tft.fillScreen(TFT_BLUE);
delay(500);
}
Если всё ещё белый экран
Попробуй другие варианты инициализации:
В Adafruit-библиотеке попробуй:
tft.initR(INITR_BLACKTAB);
или
tft.initR(INITR_GREENTAB);
или
tft.initR(INITR_REDTAB);
— производители TZT иногда ставят нестандартный контроллер (хотя он ST7735S).