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.
Другие типичные причины:
- Выбран профиль обычного SPI-дисплея вместо Setup206.
- Загружен пример для T-Display S3 Touch или AMOLED.
- В Arduino IDE отключена OPI PSRAM либо выбран неверный размер Flash.
- Плата зависла в режиме загрузчика из-за зажатой GPIO0.
- Используется 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
Практичный сценарий — показывать на дисплее температуру, состояние реле или режим сигнализации и отправлять команды двумя кнопками. Архитектуру лучше разделить на четыре независимые части:
- подключение к Wi‑Fi с тайм-аутом;
- подключение к MQTT без бесконечной блокировки loop();
- подписка на топики состояния;
- перерисовка только изменившихся значений.
Не храните реальные пароли 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, проверяйте занятые линии перед подключением модулей и сохраняйте рабочую базовую версию скетча перед каждым новым шагом.
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Что можно сделать на LILYGO T-Dongle S3: 10 практических проектов
ESP32-P4 vs ESP32-S3: в чём разница и для каких проектов нужен P4
ESP: как Espressif переписала правила DIY-электроники
ESP32-S3: Новое поколение — что изменилось и стоит ли переходить
ESP32 Marauder: что это такое, как выбрать плату и где скачать прошивку
WiFi на ESP32: как устроен стек и где он раскрывается лучше всего