Позвонить Telegram Viber
График работы: пн–пт 9:00–18:00

Дисплей 3.5" TFT LCD 320×480 SPI: ST7796S или ILI9488? Подключение к esp32

RizneVdim

Время сборки: 10 мин

Сложность: низкая

Компоненты

  • esp32 s3 wroom
  • Display st7796s
  • dupont

 3.5" TFT дисплеи с SPI интерфейсом — популярное решение для проектов на ESP32, особенно в корпусных устройствах, сенсорных панелях и DIY-интерфейсах. 3.5" TFT LCD дисплеи с разрешением 320×480 и SPI интерфейсом широко продаются под маркировкой ST7796S SPI module. Однако на практике часто выясняется, что реальный контроллер внутри может отличаться от заявленного.

Важный нюанс:

  • даже если на плате написано ST7796S, реальный контроллер может отличаться.

В нашем случае дисплей “из коробки” не заработал как ожидалось, хотя SPI и инициализация проходили без ошибок.

  • В конце статьи — готовый рабочий код

По итогам статьи вы получите:

  • Полностью работающий 3.5" TFT дисплей на ESP32-S3
  • Готовый рабочий код для Arduino IDE (в конце статьи)
  • Проверенную конфигурацию TFT_eSPI

Компоненты

  • ESP32-S3 WROOM 30 pin
  • TFT LCD 3.5" 320×480 SPI
  • Провода Dupont / пайка
  • Питание 3.3V (при тесте запитывалось от пинов esp32)

Тестим

Для подключения дисплея к esp32 s3 wroom будем использовать стандартную библиотеку TFT_eSPI SPI Для подключения дисплея нужно настроить конфигурационный файл в папке библиотеки User_Setup.h который находится в: C:\Users\_Name_\Documents\Arduino\libraries\TFT_eSPI\User_Setup.h

#define USER_SETUP_LOADED 1

#define ILI9488_DRIVER

#define TFT_WIDTH  320
#define TFT_HEIGHT 480

// SPI (мінімальний набір)
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   15
#define TFT_DC   16
#define TFT_RST  -1
#define TFT_MISO -1

#define SPI_FREQUENCY  10000000
#define SPI_READ_FREQUENCY  10000000

// шрифти вимкнено для тесту
#undef LOAD_GLCD
#undef LOAD_FONT2
#undef LOAD_FONT4
#undef LOAD_FONT6
#undef LOAD_FONT7
#undef LOAD_FONT8
#undef LOAD_GFXFF
#undef SMOOTH_FONT

Важно:

В процессе тестирования выяснилось, что реальный контроллер дисплея не соответствует маркировке. Обратите внимание что дисплей заработал после того как в настройках указали #define ILI9488_DRIVER вместо логичного #define ST7796_DRIVER

Соответствие пинов: дисплей | esp32s3 wroom

MOSI → GPIO 23

SCLK → GPIO 18

CS → GPIO 5

DC → GPIO 2

RST → не используется (или -1)

BL → 3.3V

После подключения обязательно проверь питание подсветки (BL) она должна быть подключена к + 3,3v.

Код и логика работы

Дисплей работает через библиотеку TFT_eSPI.  Логика простая:

  • инициализация SPI дисплея
  • проверка подключения
  • циклическая заливка экрана цветами
  • вывод статуса в Serial Monitor

Полный рабочий скетч находится в конце статьи.

Настройка и проверка

После прошивки проверяем:

  • появляется ли заливка на экране
  • меняются ли цвета
  • есть ли лог в Serial Monitor

Если экран остаётся белым:

  • проверь питание BL
  • снизь SPI частоту до 8–20 MHz
  • проверь драйвер дисплея

Возможные проблемы

Белый экран

чаще всего неправильный драйвер или нет подсветки BL

Инициализация проходит, но нет изображения

дисплей не ST7796S, а другой контроллер

Артефакты / мерцание

слишком высокая SPI частота

Итог

  • 3.5" SPI TFT дисплеи — отличное решение для ESP32 проектов, но важно учитывать:
  • маркировка ST7796S не всегда соответствует реальному контроллеру
  • часто требуется подбор драйвера (в нашем случае ILI9488)
  • правильная настройка TFT_eSPI решает 90% проблем

Главное правило:

Если дисплей “живой, но белый” — это почти всегда не код, а драйвер или подсветка

Scatch ST7796S / ILI9488 / Подключение к esp32
#include <TFT_eSPI.h>

TFT_eSPI tft = TFT_eSPI();

// Массив цветов для заливки
uint16_t colors[] = {
    TFT_BLACK,
    TFT_RED,
    TFT_GREEN,
    TFT_BLUE,
    TFT_YELLOW,
    TFT_CYAN,
    TFT_MAGENTA,
    TFT_WHITE,
    TFT_ORANGE,
    TFT_PINK,
    TFT_NAVY,
    TFT_DARKGREEN
};

const int colorCount = sizeof(colors) / sizeof(colors[0]);

bool displayOK = false;

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("\nST7796 Test Start");

  Serial.println("Waiting before display init...");
  delay(2000);   // даём питание и SPI стабилизироваться

  Serial.println("Initializing TFT...");

  // Инициализация дисплея
  tft.init();
  delay(500);

  // Проверка (TFT_eSPI не даёт прямой verify, поэтому косвенно)
  tft.fillScreen(TFT_BLACK);

  // Если экран "жив", обычно дальше нет зависаний SPI
  displayOK = true;

  if (displayOK) {
    Serial.println("Display INIT OK");
  } else {
    Serial.println("Display INIT FAILED (check wiring / SPI)");
  }

  tft.setRotation(1);

  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);

  tft.setCursor(10, 10);
  tft.println("INIT DONE");
}

void loop() {
  if (!displayOK) {
    Serial.println("Display not ready!");
    delay(2000);
    return;
  }

  static uint8_t i = 0;

  tft.fillScreen(colors[i]);

  tft.setTextColor(TFT_WHITE, colors[i]);

  tft.setCursor(20, 50);
  tft.println("ST7796 320x480");

  tft.setCursor(20, 100);
  tft.print("Color: ");
  tft.println(i);

  Serial.printf("Color index: %d\n", i);

  i = (i + 1) % colorCount;

  delay(3000);   // как ты хотел — 3 секунды
}

С этим покупают:

  • Кнопка тактовая 12x12x4.3 мм DIP 4 pin — универсальная для электроники и DIY

    Кнопка тактовая 12x12x4.3 мм DIP 4 pin — универсальная для электроники и DIY
    3 грн
    ПОДРОБНЕЙ
  • Кабель DuPont папа > мама 20 см (2,54 мм)

    Кабель DuPont папа > мама 20 см (2,54 мм)
    2 грн
    ПОДРОБНЕЙ
  • Кабель DuPont папа-папа 20 см (2.54 мм) для Arduino и макетных плат

    Кабель DuPont папа-папа 20 см (2.54 мм) для Arduino и макетных плат
    2 грн
    ПОДРОБНЕЙ

Комментарии к статье

Пока нет комментариев. Будьте первым!

Добавить комментарий