LILYGO TTGO T-Display: ESP32, который сразу показывает результат

Обычная отладочная плата умеет многое, но разговаривает с разработчиком в основном через строки в Serial Monitor. У LILYGO TTGO T-Display есть более убедительный способ: встроенный цветной экран. Подключили датчик — и сразу видите показания. Получили данные по Wi‑Fi — вывели график или статус. Собрали автономный прибор — уже не нужно добавлять отдельный дисплей, разводить его питание и искать место в корпусе.

Именно поэтому T-Display интереснее, чем просто «ещё одна плата на ESP32». Это почти готовая лицевая панель устройства: микроконтроллер, экран, две кнопки, USB‑C и зарядка одноклеточного Li‑Po на одной узкой печатной плате.

Распиновка классической LILYGO TTGO T-Display V1.1. Левая гребёнка: GND, GND, 21, 22, 17, 2, 15, 13, 12, GND, GND, 3V3; правая: 3V3, 36, 37, 38, 39, 32, 33, 25, 26, 27, GND, 5V. Дисплей ST7789V подключён по MOSI 19, SCLK 18, CS 5, DC 16, RST 23 и BL 4, две кнопки — на GPIO0 и GPIO35.
Классическая T-Display, V1.1: обе гребёнки, шесть линий дисплея и две кнопки. Нажмите, чтобы открыть в полном размере.

О какой именно плате идёт речь

Название T-Display превратилось в целое семейство, поэтому первая техническая ловушка — взять характеристики не той модели. Здесь рассматривается классическая LILYGO/TTGO T-Display на исходном ESP32, с экраном 1,14 дюйма и разрешением 135 × 240 точек. Это не T-Display-S3: у S3 другой процессор, экран 1,9 дюйма, другое подключение дисплея, другие GPIO и есть PSRAM.

Актуальная документация LILYGO указывает для классической платы SoC ESP32-D0WDQ6. У конкретных партий могут отличаться объём Flash и микросхема USB–UART, поэтому надпись продавца или чужой пример кода не заменяют проверку реальной платы.

Технические характеристики

УзелХарактеристикаПрактическое значение
МикроконтроллерESP32-D0WDQ6Классический ESP32, не S2/S3/C3
Процессор2 ядра Xtensa LX6, до 240 МГцХватает для Wi‑Fi, интерфейса, датчиков и фоновой логики одновременно
Память520 КБ встроенной SRAM, PSRAM отсутствуетБольшие изображения и двойная буферизация требуют аккуратного расхода памяти
FlashОбычно 4 МБ; существует вариант 16 МБРазмер нужно проверять до выбора таблицы разделов
Беспроводная связьWi‑Fi 2,4 ГГц 802.11 b/g/n; Bluetooth 4.2 BR/EDR и BLEПодходит для MQTT, HTTP, ESP‑NOW, BLE-маяков и связи с телефоном
ДисплейIPS TFT 1,14″, контроллер ST7789VЦветной экран с хорошими углами обзора
Разрешение135 × 240 в портретной ориентации; обычно 240 × 135 в альбомнойУдобно для одной крупной величины, нескольких статусов или небольшого графика
Интерфейс дисплея4-проводный SPI; штатный профиль TFT_eSPI использует 40 МГцЭкран быстрый, но занимает несколько GPIO
УправлениеДве кнопки: GPIO0 и GPIO35Можно сделать меню, перелистывание экранов, подтверждение или пробуждение
ПитаниеUSB‑C или одноклеточный Li‑Po; встроенная зарядкаОснова для переносного прибора без отдельного зарядного модуля
Контроль аккумулятораADC GPIO34, включение цепи измерения GPIO14Заряд можно показывать прямо в интерфейсе
USBUSB‑C через мост USB–UARTУ исходного ESP32 нет встроенного USB Device; порт служит питанию, прошивке и последовательной связи
USB–UARTВ актуальной продаже CH9102; на старых ревизиях встречались CP210xПри проблемах с драйвером нужно смотреть фактический VID/PID, а не гадать по названию платы
Логические уровни3,3 В; GPIO не являются 5-вольт-совместимымиСигнал 5 В требует согласования уровней
ГабаритыОколо 51,5 × 25 ммПлата заметно уже большинства сборок «DevKit + отдельный TFT»
Среды разработкиArduino IDE, PlatformIO, ESP-IDF; возможен MicroPythonДля быстрого старта проще Arduino, для более строгого проекта — ESP-IDF

Пара чисел помогает почувствовать масштаб. Полный кадр в формате RGB565 занимает 135 × 240 × 2 = 64 800 байт, то есть примерно 63,3 КиБ. Два кадровых буфера — уже около 126,6 КиБ, не считая Wi‑Fi-стека, задач и данных приложения. Поэтому на этой плате особенно полезны частичная перерисовка, спрайты умеренного размера и вывод только изменившихся областей.

Почему встроенный дисплей действительно ценен

Экран здесь полезен не как украшение, а как инструмент разработки. Он сокращает путь от прототипа к вещи, которой можно пользоваться без компьютера.

Но экран задаёт и ограничения. Он небольшой и не сенсорный, а шесть сигналов ESP32 уже заняты дисплеем. Постоянно включённая подсветка заметно влияет на автономность. Для сложной графики не хватает PSRAM, поэтому T-Display лучше всего раскрывается не как «микросмартфон», а как ясный интерфейс из нескольких хорошо выбранных показателей.

Что уже подключено к ESP32

Функция на платеGPIOЧто важно знать
TFT MOSI19Данные к ST7789V
TFT SCLK18Тактовая линия дисплея
TFT CS5Выбор дисплея; одновременно загрузочный strapping-пин ESP32
TFT DC16Переключение «команда/данные»
TFT RESET23Аппаратный сброс контроллера экрана
Подсветка TFT4Можно включать, выключать и регулировать PWM
Кнопка у GPIO00Также BOOT/strapping: удержание при сбросе переводит ESP32 в загрузчик
Вторая кнопка35Только вход; внутренних подтяжек у GPIO35 нет
Измерение Li‑Po34ADC1, только вход
Включение цепи измерения14Перед чтением аккумулятора GPIO14 обычно переводят в высокий уровень

Эти контакты разумно считать занятыми. SPI теоретически допускает совместное использование линий MOSI/SCLK несколькими устройствами, но для первого проекта безопаснее оставить GPIO18 и GPIO19 экрану, а внешний SPI вынести на свободные контакты.

Разъёмы: полный разбор контактов

Ориентация в таблице — дисплей к пользователю, USB‑C снизу.

Левая гребёнка, сверху вниз

КонтактВозможностиОграничения и удачное применение
GNDЗемляДва контакта подряд
GNDЗемля—
GPIO21Цифровой вход/выходРекомендуемый SDA для I²C
GPIO22Цифровой вход/выходРекомендуемый SCL для I²C
GPIO17Цифровой вход/выходОдин из самых беспроблемных свободных GPIO; подходит для UART TX/PWM
GPIO2ADC2, Touch2, цифровой I/OStrapping-пин: внешняя схема не должна навязывать неверный уровень при старте
GPIO15ADC2, Touch3, цифровой I/OStrapping и JTAG; использовать с осторожностью
GPIO13ADC2, Touch4, цифровой I/OПересекается с JTAG, но обычно пригоден после загрузки
GPIO12ADC2, Touch5, цифровой I/OStrapping и JTAG; особенно нежелательна активная внешняя нагрузка во время сброса
GNDЗемляДва контакта подряд
GNDЗемля—
3V3Питание 3,3 ВНе GPIO

Правая гребёнка, сверху вниз

КонтактВозможностиОграничения и удачное применение
3V3Питание 3,3 ВНе GPIO
GPIO36 / SVPADC1_CH0, цифровой входТолько вход, нет внутренней подтяжки
GPIO37ADC1_CH1, цифровой входТолько вход, нет внутренней подтяжки
GPIO38ADC1_CH2, цифровой входТолько вход, нет внутренней подтяжки
GPIO39 / SVNADC1_CH3, цифровой входТолько вход, нет внутренней подтяжки
GPIO32ADC1_CH4, Touch9, цифровой I/OОтличный универсальный GPIO и аналоговый вход при работающем Wi‑Fi
GPIO33ADC1_CH5, Touch8, цифровой I/OОтличный универсальный GPIO и аналоговый вход при работающем Wi‑Fi
GPIO25ADC2_CH8, DAC1, цифровой I/OНастоящий 8-битный ЦАП; удобен как выход, PWM или SCK внешнего SPI
GPIO26ADC2_CH9, DAC2, цифровой I/OВторой настоящий 8-битный ЦАП; удобен как MOSI внешнего SPI
GPIO27ADC2_CH7, Touch7, цифровой I/OУниверсальный GPIO; удобен как MISO внешнего SPI
GNDЗемля—
5VШина питания 5 ВНе GPIO и не признак 5-вольтовой логики

SVP и SVN — исторические имена аналоговых входов SENSOR_VP и SENSOR_VN, то есть GPIO36 и GPIO39. Это не контакты питания.

Как выбирать GPIO без неприятных сюрпризов

Для обычных цифровых входов и выходов в первую очередь подходят GPIO17, 21, 22, 25, 26, 27, 32 и 33. GPIO21/22 логично сохранить под I²C.

Для второго SPI официальный заводской пример LILYGO использует удобную группу:

Сигнал внешнего SPIGPIO
SCK25
MOSI26
MISO27
CS33

Для аналоговых датчиков при включённом Wi‑Fi следует выбирать ADC1: GPIO32, 33, 36, 37, 38 или 39. На классическом ESP32 ADC2 делит ресурс с Wi‑Fi, поэтому чтение GPIO2/12/13/15/25/26/27 как аналоговых входов при работающем радио может не сработать. GPIO36–39 при этом годятся только на вход и требуют внешней подтяжки, если датчику или кнопке она нужна.

Есть ещё три правила, которые спасают особенно много времени:

  1. GPIO0, 2, 5, 12 и 15 считываются во время сброса как strapping-пины. Подключённая периферия не должна принудительно менять их стартовые уровни.
  2. GPIO34–39 — только входы и не имеют программных pull-up/pull-down. На самой плате GPIO34 и GPIO35 уже заняты аккумулятором и кнопкой.
  3. Нагрузку нельзя питать непосредственно от GPIO. Реле, мотор, соленоид и мощную ленту включают через транзистор, MOSFET или драйвер с необходимой защитой.

Питание и автономность

Плата принимает питание по USB‑C и поддерживает одноклеточный Li‑Po через двухконтактный разъём 1,25 мм. Аккумулятор можно заряжать на плате, а его напряжение — измерять через GPIO34 после включения цепи контроля GPIO14. Это удобно для собственного индикатора заряда, но процент нельзя надёжно получить простой линейной формулой: напряжение Li‑Po меняется нелинейно, а ADC исходного ESP32 требует калибровки.

T-Display не стоит путать с ультраэкономичным датчиком только потому, что сам ESP32 умеет deep sleep. В любительских измерениях классической платы получались ориентиры около 66 мА в активном режиме, 80–140 мА при работе Wi‑Fi и примерно 9 мА в light sleep. Это не паспортные гарантии: результат зависит от яркости, прошивки, качества питания и ревизии платы. Главный практический вывод — гасить или диммировать подсветку, отключать радио между сеансами и будить устройство кнопкой или таймером.

Что собирают на T-Display: три показательных кейса

1. Локальный экран Home Assistant

Один из самых естественных сценариев — показывать температуру, энергопотребление, состояние отопления или любой объект Home Assistant. В опубликованном проекте плата через ESPHome выводит на экран температуру духовки, но тот же шаблон подходит для времени следующего поезда, уровня бака или скорости интернета. Ценность кейса в минимальном железе: для стационарной панели достаточно самой T-Display и USB-питания.

2. Табло отправлений у двери

Открытый проект ttgo-departure-board превращает плату в табло общественного транспорта. Репозиторий содержит 33 варианта прошивки для сетей в 17 странах: ESP32 подключается к Wi‑Fi, синхронизирует время по NTP, запрашивает API примерно раз в 30 секунд и каждую секунду обновляет обратный отсчёт. Две кнопки переключают остановки и управляют экраном. Это хороший пример интерфейса, где 240 × 135 точек не мало: если показывать только направление, линию, платформу и минуты, информации ровно столько, сколько нужно перед выходом из дома.

3. Крошечный беспроводной монитор

В 2025 году заметным стал проект, который передаёт уменьшенное изображение рабочего стола по Wi‑Fi на совместимую плату T-Display. Компьютер сравнивает кадры и отправляет только изменившиеся пиксели, применяя пакетирование и RLE. На почти статичной картинке автор получил до 60 кадров/с, а при активном движении — около 5 кадров/с с задержкой менее 100 мс в хорошей сети. Это не практичная замена монитору, зато прекрасная демонстрация того, как алгоритм экономии трафика позволяет выжать неожиданно много из ESP32 и маленького SPI-дисплея. Важно: в проекте использован совместимый TENSTAR с 16 МБ Flash, поэтому эту характеристику нельзя автоматически переносить на любую LILYGO.

Другой популярный пласт — мини-игры. Две кнопки, цветной экран и готовые библиотеки позволили сделать Space Shooter, Breakout и небольшие портативные сборки с несколькими играми. Это одновременно развлечение и неплохой учебный стенд для спрайтов, частоты кадров, обработки кнопок и управления памятью.

Одна и та же T-Display в трёх сценариях: с датчиком температуры и показанием 22,6 °C на экране, панелью умного дома с цифрами 428 Вт и 22,6 градуса и запущенной игрой с подключённым к разъёму Li‑Po аккумулятором.
Одна плата, три роли: переносной измеритель, настольная панель и карманная консоль.

Четыре сборки канала на T-Display

Канал Build Mode пока четыре раза собирал что-то на T-Display. В одном видео плата становится Bluetooth-колонкой: ESP32 принимает музыку по A2DP, усилитель MAX98357A раскачивает маленький динамик, а на экране — живой анализатор спектра. В другом она опрашивает датчик движения MPU-6500 по SPI, а страница в браузере превращает его показания в 3D-модель. В третьем она удерживает раму на тяге одного пропеллера: MPU-6500 измеряет наклон, а ПИД-регулятор на ESP32 управляет мотором через DRV8833. В четвёртом она работает уровнем и компасом в напечатанном на 3D-принтере корпусе, вместе с MPU-6500, магнитометром BMM150 и аккумулятором 18650.

Что чаще всего ищут — и почему

В верхних результатах по запросам о классической T-Display повторяются четыре темы: первый запуск, настройка TFT_eSPI, распиновка и готовые проекты — часы, погода, Home Assistant, MQTT-панели и игры. Это точно отражает сильные и слабые стороны платы.

Людей привлекает возможность быстро получить красивый результат, но чаще всего они спотыкаются о конфигурацию конкретного дисплея. Для TFT_eSPI нужен профиль Setup25_TTGO_T_Display.h; в нём зафиксированы ST7789V, геометрия 135 × 240 и правильные GPIO. В альтернативных стеках приходится учитывать смещение активной области матрицы, порядок цветов BGR и отдельное управление подсветкой. Показательная неисправность: программа и сам LCD могут работать, но экран кажется чёрным просто потому, что GPIO4 не включил подсветку.

Минимальный тест для Arduino после выбора профиля TFT_eSPI выглядит так:

#include <TFT_eSPI.h>

TFT_eSPI tft;

void setup() {
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);

  tft.init();
  tft.setRotation(1);              // 240 × 135
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_CYAN, TFT_BLACK);
  tft.drawString("Wi-Fi: OK", 12, 12, 4);
}

void loop() {}

В Arduino IDE производитель рекомендует профиль ESP32 Dev Module, частоту CPU 240 МГц, QIO, Flash 4 МБ для обычной версии, отключённую PSRAM и скорость загрузки 921600. Если прошивка не стартует или загрузчик не отвечает, GPIO0 используется как BOOT: удержать кнопку, кратко нажать Reset, отпустить BOOT и повторить загрузку.

Сильные и слабые стороны

ПлюсыМинусы
Цветной IPS уже установлен и проверен схемой платыЭкран небольшой, без сенсора
Wi‑Fi, Classic Bluetooth и BLEПоколение ESP32 старое: нет нативного USB и современных возможностей ESP32-S3
Две кнопки, USB‑C, зарядка Li‑Po, контроль батареиНет PSRAM; тяжёлая графика быстро съедает SRAM
Компактнее связки DevKit + отдельный TFTДисплей и сервисные узлы занимают заметное число GPIO
Есть Arduino, PlatformIO, ESP-IDF, TFT_eSPI и LVGL-примерыУ ADC2 конфликт с Wi‑Fi, а GPIO36–39 работают только на вход
Хорошо подходит для автономных панелей и измерителейПодсветка и Wi‑Fi ограничивают время работы от аккумулятора
Два настоящих ЦАП на GPIO25/26 и много ADC1-входовРевизии отличаются Flash и USB–UART, поэтому спецификацию конкретного экземпляра нужно проверять

Итог

LILYGO TTGO T-Display ценна не рекордными характеристиками, а удачной компоновкой. Она превращает невидимую работу микроконтроллера в понятный интерфейс: устройство сразу сообщает состояние, показывает измерения, принимает команды двумя кнопками и может работать от аккумулятора.

Для часов на столе, Home Assistant-индикатора, переносного измерителя, MQTT-пульта, мини-игры или сетевого табло классическая T-Display остаётся очень рациональной основой. Главное — помнить о её возрасте и границах: не путать с T-Display-S3, не рассчитывать на PSRAM, беречь загрузочные GPIO, использовать ADC1 при активном Wi‑Fi и проверять объём Flash конкретной платы. Если проекту достаточно 240 × 135 точек и двух кнопок, встроенный экран экономит не только детали, но и самый дорогой ресурс прототипирования — время между идеей и первым наглядным результатом.

Всё сказанное выше, сжатое в платформонезависимый аппаратный справочник, по которому может работать агент-программист: классы распределения выводов, электрические правила, канонический GPIO-матрикс и машиночитаемый профиль платы.