5

Экран 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);
}

1
Автор поста оценил этот комментарий

Белый экран на 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).

раскрыть ветку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества