Здесь могла бы быть реклама
Она помогает блогу развиваться.
Кажется, сегодня она немного загрустила.

Главная страница » ESP32 / ESP8266 » LILYGO T-Display S3: настройка, распиновка и проекты
LILYGO T-Display S3: настройка, распиновка и проекты
ESP32 / ESP8266

LILYGO T-Display S3: настройка, распиновка и проекты

12.09.2026 26
LILYGO T-Display S3: настройка, распиновка и проекты

Практическое руководство по LILYGO T-Display S3: настройка Arduino IDE и TFT_eSPI, распиновка, первый скетч, Wi-Fi, I2C-датчики, питание и идеи проектов.

LILYGO T-Display S3 выглядит как почти готовый карманный прибор: ESP32-S3, цветной экран, две кнопки, USB-C и разъём для аккумулятора уже находятся на одной плате. На практике главный порог входа — не программирование, а правильная настройка дисплея и выбор свободных GPIO. Если начать со случайного примера для обычной ESP32, экран чаще всего останется чёрным.

Ниже — рабочая база для оригинальной T-Display S3 без приставок Touch, Pro и AMOLED. Сначала настроим Arduino IDE и проверим экран с кнопками, затем разберём Wi‑Fi, I2C-датчики, питание и подходящие идеи проектов.

Что установлено на плате

В основе T-Display S3 находится ESP32-S3R8 с 16 МБ Flash и 8 МБ OPI PSRAM. Штатный IPS-дисплей ST7789 имеет диагональ 1,9 дюйма и разрешение 170×320 пикселей. Он подключён к микроконтроллеру по 8-битной параллельной шине — это важно, потому что обычный SPI-профиль ST7789 здесь не подходит.

На стандартной версии доступны:

  • две кнопки на GPIO0 и GPIO14;
  • управление питанием периферии через GPIO15;
  • подсветка экрана на GPIO38;
  • измерение напряжения аккумулятора через GPIO4;
  • I2C на GPIO17 (SCL) и GPIO18 (SDA);
  • нативный USB ESP32-S3 через USB-C.

Стандартная T-Display S3 не имеет сенсорного слоя, встроенного LoRa-модуля и слота microSD. Контакты SD на GPIO11–13 относятся к отдельному Shield. Перед покупкой и прошивкой обязательно сверяйте надпись на плате: T-Display S3 Touch, Pro, AMOLED и MIDI используют другие схемы и библиотеки.

Актуальная таблица контактов и файлы платы собраны в официальном репозитории LILYGO.

Подготовка Arduino IDE

Добавьте пакет плат Espressif и выберите ESP32S3 Dev Module либо профиль LilyGo T-Display-S3, если он есть в установленном пакете. Для оригинальной платы производитель указывает такие основные параметры:

  • Flash Size — 16MB;
  • PSRAM — OPI PSRAM;
  • CPU Frequency — 240MHz (WiFi);
  • USB CDC On Boot — Enabled при работе через USB-C;
  • Upload Mode — UART0 / Hardware CDC;
  • Partition Scheme — 16M Flash (3MB APP / 9.9MB FATFS).

Если устройство питается не через USB-C, а от аккумулятора или контакта 5V, USB CDC иногда мешает нормальному старту. В таком случае отключите USB CDC On Boot, но учитывайте: вывод Serial через USB-C после этого пропадёт.

Для дисплея проще всего использовать библиотеки из каталога lib официального репозитория. В TFT_eSPI должен быть выбран профиль Setup206_LilyGo_T_Display_S3.h. В нём уже прописаны параллельная шина, контроллер ST7789, разрешение и реальные GPIO экрана.

Проверьте, что в User_Setup_Select.h подключён именно этот файл:

#include <User_Setups/Setup206_LilyGo_T_Display_S3.h>

Не подключайте одновременно другой User_Setup. Если пример компилируется, но экран показывает белое поле, полосы или мусор, первым делом проверяйте профиль TFT_eSPI и версию библиотек из репозитория LILYGO.

Первый рабочий скетч: экран и две кнопки

Этот пример включает питание периферии, запускает дисплей и выводит состояние обеих кнопок. Он подходит как стартовая точка для меню, часов, датчика или сетевой панели.

#include <Arduino.h>
#include <TFT_eSPI.h>

TFT_eSPI tft;

constexpr uint8_t PIN_POWER = 15;
constexpr uint8_t PIN_BACKLIGHT = 38;
constexpr uint8_t BUTTON_BOOT = 0;
constexpr uint8_t BUTTON_RIGHT = 14;

void drawButtonState() {
  const bool leftPressed = digitalRead(BUTTON_BOOT) == LOW;
  const bool rightPressed = digitalRead(BUTTON_RIGHT) == LOW;

  tft.fillRect(0, 55, 320, 70, TFT_BLACK);
  tft.setTextColor(TFT_CYAN, TFT_BLACK);
  tft.setTextSize(2);
  tft.setCursor(14, 65);
  tft.printf("BOOT: %s", leftPressed ? "ON" : "off");
  tft.setCursor(14, 95);
  tft.printf("RIGHT: %s", rightPressed ? "ON" : "off");
}

void setup() {
  Serial.begin(115200);

  pinMode(PIN_POWER, OUTPUT);
  digitalWrite(PIN_POWER, HIGH);

  pinMode(PIN_BACKLIGHT, OUTPUT);
  digitalWrite(PIN_BACKLIGHT, HIGH);

  pinMode(BUTTON_BOOT, INPUT_PULLUP);
  pinMode(BUTTON_RIGHT, INPUT_PULLUP);

  tft.init();
  tft.setRotation(1);
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);
  tft.setCursor(14, 18);
  tft.println("T-Display S3 ready");

  drawButtonState();
}

void loop() {
  static uint32_t lastRedraw = 0;

  if (millis() - lastRedraw >= 50) {
    lastRedraw = millis();
    drawButtonState();
  }
}

GPIO0 одновременно является кнопкой BOOT. Не удерживайте её во время сброса, иначе ESP32-S3 может перейти в режим загрузчика. Для обычного интерфейса обрабатывайте нажатие уже после запуска устройства.

Почему экран остаётся чёрным

У этой платы есть две разные линии, которые часто путают:

  • GPIO15 включает питание дисплея и другой периферии;
  • GPIO38 управляет подсветкой.

Для уверенного старта поднимите обе линии до вызова tft.init(). Если подсветка горит, но изображения нет, проблема обычно в профиле TFT_eSPI. Если экран полностью тёмный при питании от аккумулятора, чаще забыли включить GPIO15.

Другие типичные причины:

  1. Выбран профиль обычного SPI-дисплея вместо Setup206.
  2. Загружен пример для T-Display S3 Touch или AMOLED.
  3. В Arduino IDE отключена OPI PSRAM либо выбран неверный размер Flash.
  4. Плата зависла в режиме загрузчика из-за зажатой GPIO0.
  5. Используется USB-кабель только для питания без линий данных.

Если прошивка не загружается, зажмите BOOT, коротко нажмите RESET, отпустите RESET, затем BOOT и повторите загрузку. После прошивки нажмите RESET ещё раз.

Сканер Wi‑Fi на экране

T-Display S3 хорошо подходит для карманного индикатора сети. Библиотека WiFi входит в Arduino-ESP32, поэтому дополнительных зависимостей для сканирования не нужно.

#include <WiFi.h>

void showNetworks() {
  tft.fillScreen(TFT_BLACK);
  tft.setTextSize(1);
  tft.setCursor(4, 4);
  tft.println("Wi-Fi scan...");

  const int found = WiFi.scanNetworks();
  tft.fillScreen(TFT_BLACK);

  for (int i = 0; i < found && i < 9; ++i) {
    tft.setCursor(4, 4 + i * 18);
    tft.printf("%2d %4d dBm %s",
               i + 1,
               WiFi.RSSI(i),
               WiFi.SSID(i).substring(0, 18).c_str());
  }

  WiFi.scanDelete();
}

RSSI показывает уровень принятого сигнала, но не реальную скорость канала. Не запускайте полное сканирование каждую секунду: оно занимает время и мешает стабильному соединению. Подробнее о режимах станции, точки доступа и типичных обрывах читайте в материале как работает Wi‑Fi на ESP32.

Подключение BME280 и других I2C-датчиков

Для внешнего датчика удобно использовать штатные линии GPIO17 и GPIO18. Питание модулей должно быть 3,3 В, если их плата не содержит собственного стабилизатора и преобразователя уровней.

Начните с I2C-сканера:

#include <Wire.h>

void scanI2C() {
  Wire.begin(18, 17); // SDA, SCL

  for (uint8_t address = 1; address < 127; ++address) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {
      Serial.printf("I2C device: 0x%02Xn", address);
    }
  }
}

BME280 обычно отвечает по адресу 0x76 или 0x77. После проверки шины можно подключить библиотеку конкретного датчика и вывести температуру, влажность и давление крупными цифрами. Такой экран удобен как локальная панель: данные остаются видны даже при недоступном Home Assistant.

MQTT-панель для Home Assistant

Практичный сценарий — показывать на дисплее температуру, состояние реле или режим сигнализации и отправлять команды двумя кнопками. Архитектуру лучше разделить на четыре независимые части:

  1. подключение к Wi‑Fi с тайм-аутом;
  2. подключение к MQTT без бесконечной блокировки loop();
  3. подписка на топики состояния;
  4. перерисовка только изменившихся значений.

Не храните реальные пароли Wi‑Fi и MQTT в опубликованном репозитории. Для домашнего брокера создайте отдельного пользователя с доступом только к нужным топикам. Команда TOGGLE удобна для теста, но в автоматизации надёжнее передавать явные состояния ON и OFF.

Если вы только осваиваете Arduino, сначала разберите структуру setup(), loop() и функций, а затем добавляйте сеть и экран по одному блоку.

Питание от аккумулятора

Разъём аккумулятора делает плату удобной для переносных устройств, но показания GPIO4 требуют проверки. Производитель отдельно предупреждает: измерение напряжения аккумулятора через ADC работает корректно, когда USB-C не подключён. Коэффициент делителя и погрешность ADC лучше сверять с заводским примером и калибровать мультиметром на своей ревизии платы.

Экран обычно расходует больше энергии, чем сам микроконтроллер в спокойном режиме. Для автономного прибора:

  • выключайте подсветку после тайм-аута;
  • уменьшайте частоту обновления датчиков;
  • не держите постоянное Wi‑Fi-соединение без необходимости;
  • используйте light sleep или deep sleep, если устройство просыпается по расписанию.

GPIO38 можно использовать для включения и выключения подсветки. Плавную регулировку делайте через LEDC с учётом версии Arduino-ESP32: API настройки PWM между крупными версиями ядра менялся.

Подходящие проекты для T-Display S3

Плата особенно хороша там, где нужен небольшой цветной интерфейс:

  • настольные часы с NTP и индикацией доступности сети;
  • монитор температуры, влажности и давления на BME280;
  • MQTT-пульт для света и сценариев Home Assistant;
  • индикатор загрузки сервера, свободной памяти или состояния UPS;
  • карманный Wi‑Fi-сканер;
  • таймер, Pomodoro или игра на реакцию;
  • BLE-пульт для телефона или компьютера;
  • локальная веб-панель настройки устройства.

Начинайте с рабочего базового скетча, затем добавляйте одну функцию за раз. Так проще понять, что именно сломало сборку: дисплей, библиотека, сеть или внешний модуль.

Можно ли добавить LoRa

Можно, но стандартная T-Display S3 не содержит радиомодуля. Внешний SX1262 или SX1276 потребует отдельного питания и свободных GPIO для SPI, CS, RESET и DIO. Нельзя копировать распиновку от случайной ESP32-платы: линии 5–9 и 39–48 уже заняты дисплеем, а 11–13 зарезервированы под SD Shield.

Для проекта, где LoRa является основной функцией, обычно проще взять плату с уже установленным радиомодулем и согласованной антенной. Подходящие варианты и настройка сети описаны в руководстве Meshtastic с нуля. T-Display S3 логичнее оставить для Wi‑Fi, BLE, датчиков и локального интерфейса.

Итог

У оригинальной LILYGO T-Display S3 есть две особенности, которые решают большую часть проблем: экран работает через 8-битный параллельный профиль Setup206, а питание периферии включается GPIO15. После корректной настройки плата превращается в удобную основу для часов, датчиков, MQTT-панелей и небольших автономных приборов.

Не смешивайте примеры от Touch, Pro и AMOLED, проверяйте занятые линии перед подключением модулей и сохраняйте рабочую базовую версию скетча перед каждым новым шагом.

Понравилась статья?

Поставьте лайк и сохраните полезный материал в закладки.

Комментарии (0)
Добавить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Что можно сделать на LILYGO T-Dongle S3: 10 практических проектов
ESP32 / ESP8266
01.09.2026
Что можно сделать на LILYGO T-Dongle S3: 10 практических проектов
10 практических идей для LILYGO T-Dongle S3: мониторинг сервера, Home Assistant, MQTT, USB HID, 3D-принтер, сетевые инструменты и другие проекты на ESP32-S3.
ESP32-P4 vs ESP32-S3: в чём разница и для каких проектов нужен P4
ESP32 / ESP8266
02.09.2026
ESP32-P4 vs ESP32-S3: в чём разница и для каких проектов нужен P4
Разбираем различия ESP32-P4 и ESP32-S3: производительность, память, WiFi, сценарии применения. Узнайте, какой чип подойдёт для вашего DIY-проекта!
ESP: как Espressif переписала правила DIY-электроники
ESP32 / ESP8266
10.09.2026
ESP: как Espressif переписала правила DIY-электроники
История создания чипов Espressif: от случайного успеха ESP8266 до линейки ESP32, C6, S3 и P4. Разбираем, чем отличаются платы и какую выбрать под конкретный DIY-проект.
ESP32-S3: Новое поколение — что изменилось и стоит ли переходить
ESP32 / ESP8266
31.03.2026
ESP32-S3: Новое поколение — что изменилось и стоит ли переходить
Подробный разбор ESP32-S3: новые возможности USB OTG, PSRAM, AI ускорение. Практические примеры кода, сравнение с ESP32. Узнайте, стоит ли переходить на новое поколение
ESP32 Marauder: что это такое, как выбрать плату и где скачать прошивку
ESP32 / ESP8266
09.09.2026
ESP32 Marauder: что это такое, как выбрать плату и где скачать прошивку
ESP32 Marauder — это прошивка с открытым исходным кодом для тестирования Wi-Fi сетей на базе микроконтроллера ESP32. В статье разбираем, что умеет инструмент, как
WiFi на ESP32: как устроен стек и где он раскрывается лучше всего
ESP32 / ESP8266
10.09.2026
WiFi на ESP32: как устроен стек и где он раскрывается лучше всего
Разбираем, как устроен Wi-Fi-стек ESP32: режимы STA/AP, lwIP, TLS, энергопотребление и типичные ошибки. Практические примеры кода и рекомендации, для каких DIY-проектов

Войдите в аккаунт, чтобы пользоваться закладками, сообщениями и другими возможностями сайта.