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

О какой именно плате идёт речь
Название 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 | Заряд можно показывать прямо в интерфейсе |
| USB | USB‑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-стека, задач и данных приложения. Поэтому на этой плате особенно полезны частичная перерисовка, спрайты умеренного размера и вывод только изменившихся областей.
Почему встроенный дисплей действительно ценен
Экран здесь полезен не как украшение, а как инструмент разработки. Он сокращает путь от прототипа к вещи, которой можно пользоваться без компьютера.
- Мгновенная обратная связь. Устройство само показывает, подключилось ли оно к Wi‑Fi, какой IP-адрес получило, что вернул датчик и почему не сработал исполнительный узел.
- Локальный интерфейс. Две кнопки и цветной экран позволяют сделать меню, несколько страниц, предупреждения и простые настройки без мобильного приложения.
- Диагностика на месте. Если датчик установлен в электрощите, теплице или на станке, ключевые параметры видны рядом с оборудованием, а не только в облаке.
- Компактный законченный прототип. После добавления аккумулятора и корпуса T-Display уже похожа на карманный прибор, пульт или миниатюрную панель мониторинга.
- Быстрая демонстрация идеи. Заказчику или коллеге проще оценить живой экран со статусами, чем поток чисел в терминале.
Но экран задаёт и ограничения. Он небольшой и не сенсорный, а шесть сигналов ESP32 уже заняты дисплеем. Постоянно включённая подсветка заметно влияет на автономность. Для сложной графики не хватает PSRAM, поэтому T-Display лучше всего раскрывается не как «микросмартфон», а как ясный интерфейс из нескольких хорошо выбранных показателей.
Что уже подключено к ESP32
| Функция на плате | GPIO | Что важно знать |
|---|---|---|
| TFT MOSI | 19 | Данные к ST7789V |
| TFT SCLK | 18 | Тактовая линия дисплея |
| TFT CS | 5 | Выбор дисплея; одновременно загрузочный strapping-пин ESP32 |
| TFT DC | 16 | Переключение «команда/данные» |
| TFT RESET | 23 | Аппаратный сброс контроллера экрана |
| Подсветка TFT | 4 | Можно включать, выключать и регулировать PWM |
| Кнопка у GPIO0 | 0 | Также BOOT/strapping: удержание при сбросе переводит ESP32 в загрузчик |
| Вторая кнопка | 35 | Только вход; внутренних подтяжек у GPIO35 нет |
| Измерение Li‑Po | 34 | ADC1, только вход |
| Включение цепи измерения | 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 |
| GPIO2 | ADC2, Touch2, цифровой I/O | Strapping-пин: внешняя схема не должна навязывать неверный уровень при старте |
| GPIO15 | ADC2, Touch3, цифровой I/O | Strapping и JTAG; использовать с осторожностью |
| GPIO13 | ADC2, Touch4, цифровой I/O | Пересекается с JTAG, но обычно пригоден после загрузки |
| GPIO12 | ADC2, Touch5, цифровой I/O | Strapping и JTAG; особенно нежелательна активная внешняя нагрузка во время сброса |
| GND | Земля | Два контакта подряд |
| GND | Земля | — |
| 3V3 | Питание 3,3 В | Не GPIO |
Правая гребёнка, сверху вниз
| Контакт | Возможности | Ограничения и удачное применение |
|---|---|---|
| 3V3 | Питание 3,3 В | Не GPIO |
| GPIO36 / SVP | ADC1_CH0, цифровой вход | Только вход, нет внутренней подтяжки |
| GPIO37 | ADC1_CH1, цифровой вход | Только вход, нет внутренней подтяжки |
| GPIO38 | ADC1_CH2, цифровой вход | Только вход, нет внутренней подтяжки |
| GPIO39 / SVN | ADC1_CH3, цифровой вход | Только вход, нет внутренней подтяжки |
| GPIO32 | ADC1_CH4, Touch9, цифровой I/O | Отличный универсальный GPIO и аналоговый вход при работающем Wi‑Fi |
| GPIO33 | ADC1_CH5, Touch8, цифровой I/O | Отличный универсальный GPIO и аналоговый вход при работающем Wi‑Fi |
| GPIO25 | ADC2_CH8, DAC1, цифровой I/O | Настоящий 8-битный ЦАП; удобен как выход, PWM или SCK внешнего SPI |
| GPIO26 | ADC2_CH9, DAC2, цифровой I/O | Второй настоящий 8-битный ЦАП; удобен как MOSI внешнего SPI |
| GPIO27 | ADC2_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 использует удобную группу:
| Сигнал внешнего SPI | GPIO |
|---|---|
| SCK | 25 |
| MOSI | 26 |
| MISO | 27 |
| CS | 33 |
Для аналоговых датчиков при включённом Wi‑Fi следует выбирать ADC1: GPIO32, 33, 36, 37, 38 или 39. На классическом ESP32 ADC2 делит ресурс с Wi‑Fi, поэтому чтение GPIO2/12/13/15/25/26/27 как аналоговых входов при работающем радио может не сработать. GPIO36–39 при этом годятся только на вход и требуют внешней подтяжки, если датчику или кнопке она нужна.
Есть ещё три правила, которые спасают особенно много времени:
- GPIO0, 2, 5, 12 и 15 считываются во время сброса как strapping-пины. Подключённая периферия не должна принудительно менять их стартовые уровни.
- GPIO34–39 — только входы и не имеют программных
pull-up/pull-down. На самой плате GPIO34 и GPIO35 уже заняты аккумулятором и кнопкой. - Нагрузку нельзя питать непосредственно от 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
Канал 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-матрикс и машиночитаемый профиль платы.



