Позвонить 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. Для підключення дисплея потрібно налаштувати конфігураційний файл у папці бібліотеки 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 грн
    ДЕТАЛЬНІШЕ

Коментарі до статті

Поки що немає коментарів. Будьте першим!

Додати коментар