Подключение дисплея GC9A01 к ESP32-S3 — рабочая настройка TFT_eSPI и часы по Wi-Fi
Используем:
Arduino IDE и библиотека TFT_eSPI
Круглые TFT дисплеи GC9A01 с разрешением 240×240 — популярное решение для часов, мини-панелей, погодных станций и интерфейсов на ESP32. Чаще всего такие дисплеи продаются как “1.28 IPS GC9A01 SPI display” и отлично подходят для проектов с Wi-Fi и анимацией.
В моём случае сначала планировалось подключение к ESP32-S2 Mini, так как у него достаточно свободных GPIO. Однако с подключённым дисплеем плата вела себя нестабильно — были проблемы с прошивкой и загрузкой.
После перехода на ESP32-S3 WROOM всё заработало нормально без дополнительных манипуляций.
- В конце статьи — рабочая конфигурация TFT_eSPI и готовая логика часов по Wi-Fi.
Что получилось в итоге
По итогам настройки вы получите:
- полностью рабочий дисплей GC9A01 на ESP32-S3
- корректную работу через TFT_eSPI
- подключение к Wi-Fi
- автоматическую синхронизацию времени через интернет
- переключение между аналоговыми и цифровыми часами
- готовую базу для DIY часов или smart display проекта
- Настройка TFT_eSPI для GC9A01
Для работы понадобится библиотека TFT_eSPI после установки библиотеки откройте файл и настройте конфигурационный файл:
C:\Users\Name\Documents\Arduino\libraries\TFT_eSPI\User_Setup.h
В User_Setup.h укажите следующие параметры:
#define GC9A01_DRIVER
#define TFT_WIDTH 240
#define TFT_HEIGHT 240
#define TFT_CS 15 // Chip Select
#define TFT_DC 23 // Data/Command
#define TFT_RST 4 // Reset
#define TFT_MOSI 12 // SPI Data
#define TFT_SCLK 14 // SPI Clock
#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF
#define SPI_FREQUENCY 27000000
#define USER_SETUP_ID 931
Соответствие пинов: GC9A01 | ESP32-S3 (продублировано на картинке)
| Вывод дисплея | Подключение к ESP32‑S3 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCL / CLK | GPIO 14 |
| SDA / DIN | GPIO 12 |
| DC | GPIO 23 |
| CS | GPIO 15 |
| RST | GPIO 4 |
| BL | 3.3V |
Подсветку BL лучше сразу подключить к 3.3V, иначе экран может оставаться полностью чёрным даже при успешной инициализации SPI.
Важный нюанс с ESP32-S2
Во время тестирования ESP32-S2 Mini работал нестабильно при подключённом дисплее.
Симптомы были такие:
- плата не всегда прошивалась
- иногда зависала загрузка
- COM-порт мог исчезать после подключения дисплея
Точной причины определить не удалось, но после перехода на ESP32-S3 проблема полностью исчезла.
Если дисплей мешает прошивке:
попробуйте временно отключить питание дисплея
проверьте GPIO boot strap пины
либо используйте ESP32-S3
Логика работы проекта
Дисплей используется как Wi-Fi часы с двумя режимами отображения:
- аналоговые часы
- цифровые часы
- Время автоматически синхронизируется через интернет по NTP.
- На GPIO 22 можно подключить кнопку:
- при подаче LOW уровня отображение переключается между цифровым и аналоговым интерфейсом.
Почему отказался от изображения циферблата
Изначально была попытка использовать готовое изображение циферблата в виде массива bitmap, но появились проблемы:
- сильная пикселизация
- большой объём массива
- неудобно менять дизайн
- лишний расход памяти
В итоге оказалось проще и лучше рисовать интерфейс прямо в коде:
- линии,
- стрелки,
- окружности,
- текст.
Так изображение выглядит аккуратнее и легче масштабируется под разные проекты.
Проверка после прошивки
После загрузки скетча проверьте:
- появляется ли изображение
- работает ли подсветка
- подключается ли Wi-Fi
- обновляется ли время
- реагирует ли кнопка на GPIO 22
Возможные проблемы
Чёрный экран
Чаще всего:
- не подключён BL
- ошибка в SPI пинах
- плохой контакт Dupont
Белый экран
Обычно:
- проблема с инициализацией SPI
- неверное подключение DC или CS
- Не прошивается ESP32
Возможен конфликт boot GPIO при подключённом дисплее.
Артефакты или мусор на экране
Итог
GC9A01 — один из самых удобных круглых SPI дисплеев для ESP32 проектов.
Что важно учитывать:
- ESP32-S3 работает с ним заметно стабильнее
- TFT_eSPI полностью решает задачу
- подсветка BL обязательна
- графику удобнее рисовать кодом, а не bitmap массивами
Главное правило:
Если дисплей определяется, но экран пустой — сначала проверяйте BL, SPI пины и частоту SPI, а не сам код.