Спасская башня с курантами и боем на Arduino — новогодний проект на ардуино, tft дисплей, esp32

Всем привет!
До Нового года осталось:
И я как раз, за 2 недели до НГ 2026 я закончил разработку довольно сложного новогоднего проекта с двумя платами (конечно можно и с одной, но у меня не получилось). Почему не получилось, читайте чуть ниже! А в конце статьи я дам все нужные скетчи.
Кратко о проекте
2 файла:
— 1. файл со скетчем для ESP32 — 658 строк, 20 функций
— 2. файл со скетчем для Arduino Uno/Nano — 34 строки
— 3. файл с bitmap массивами — 9620 строк, 2 массива по 72600 пунктов данных
Компоненты:
— ESP32 Dev Module
— Arduino Uno/Nano
— TFT LCD 2.8″ ILI9341
— Mini MP3 player
— MicroSD до 32 GB
— Макетная плата 800 точек
— 20 проводов папа-папа
История проекта
Битмап (англ. bitmap) — это массив из числовых обозначений цвета для каждого пикселя.
В октябре 2025 я прогулялся по центру Москвы, два раза был у Спасской башни. Выглядело очень прикольно — здоровенная такая штуковина из кирпича, а сверху огромные часы, красивые, и колокола звонят.
И недели 3 назад я подумал что надо что-то новогоднее сделать. Придумал сделать вот такие же часы, только на дисплее и с ардуино.
Попробовал сделать на Arduino Uno, но оказалось что памяти не хватит, так как битмапы весят 1-2 МБ


Если захотите повторить проект, но подкорректировать картинки, то они представлены выше. Они имеют размеры 240*320 пикселей, по размеру дисплея ILI9341 2.8″. Можно заметить, что цифры отличаются по стилю от остального — я их перерисовал в пиксельный вид максимально контрастный, а то на оригинале размыты цифры были. Стрелок нет, их отрисует ESP32.
Превратить фото в битмап можно вот на этом сайте — https://javl.github.io/image2cpp/ Схема довольно простая — загружаете свои картинки, можно сразу несколько, выставляете настройки, смотрите на предпросмотре, хорошо ли выглядит картинка, затем жмёте Generate code и получаете готовый массив и 76000 элементов.
А вообще возьмите готовые битмапы из этой статьи =)
Сначала я пытался вывести картинку на дисплей, двумя способами. Первый это с карты памяти картинку выводить. Второй это сделать битмап и его записать в скетче и выводить. Можно конечно объединить и брать битмап с карты памяти, чтобы его можно было на SDшке менять, а не скетч перезаливать, но вряд ли так заработает, оперативки не хватит у ESP.
В общем, с карты памяти загрузить картинку у меня не получилось, не знаю почему, примеры пробовал, нейронки напрягал, чет не получалось. Карточка рабочая, древняя правда, но ладно.
Выбрал вариант с битмапом, увидел их размеры, перешел на ESP32. Сначала вывел на экран одну картинку, потом добавил кнопку, добавил вторую картинку. Добавил снег с регулировкой, потом стрелки. И самое прикольное — звук.
Но звук сразу приделаться не захотел. Я тестировал звук на Arduino Uno, подключил модуль точно по схеме, подключил карту памяти с мелодиями, использовал библиотеку DFRobotDFPlayerMini.h (скачать), но первый файл (с прозвоном колоколов) он воспроизводить не хотел. И не просто вообще не воспроизводил, а первый раз воспроизводить, и даже после другой мелодии не хотел. Другую мелодию первой воспроизводил, а потом тишина вместо прозвона…
Взял другую библиотеку — DFPlayer_Mini_Mp3.h (скачать). Она уже сразу воспроизводит файлы, но через 1 секунду, ну и ладно. Подключается модуль по UART к ардуино, используем SoftwareSerial. Но с ESP32 эта библиотека не работает. В конце концов подключил к Arduino Uno по UART плату ESP32, ардуина будет звук воспроизводить. Вот вы и узнали, почему две платы используются. Если знаете, как можно сделать точно правильно на одной, то напишите пожалуйста в мой чат — https://t.me/arduino_uno_ws_chat
Схема подключения
На картинке ниже представлена схема подключения всех компонентов проекта:

Вот тут в виде таблицы:
| ESP32 | Arduino Uno | TFT | MP3 | Динамик | Потенциометр | Кнопка |
|---|---|---|---|---|---|---|
| 3V3 | — | VCC, LED | — | — | PIN 3 | — |
| GND | GND | GND | GND | — | PIN 1 | IN |
| D2 | — | D/C (A0) | — | — | — | — |
| D4 | — | RESET | — | — | — | — |
| D12 | — | — | — | — | — | OUT |
| D15 | CS | |||||
| D17 | D0 RX | — | — | — | — | — |
| D16 | D1 TX | — | — | — | — | — |
| D34 | — | — | — | — | PIN 2 | — |
| D18 | — | SCK | — | — | — | — |
| D23 | — | MOSI | — | — | — | — |
| — | D10 | — | TX | — | — | — |
| — | D11 | — | RX (через резистор 1 кОм) | — | — | — |
| — | 5V | — | VCC | — | — | — |
| — | — | — | SPK+ | плюс | — | — |
| — | — | — | SPK — | минус | — | — |
СКЕТЧИ И БИТМАПЫ
Для вашего удобства я собрал все файлы для прошивки я собрал в ZIP-архиве, который можно скачать по этой ссылке. Распакуйте папки из архива на рабочий стол или в любое другое место. Откройте файлы .ino в разных окнах Arduino IDE.
В архиве находятся две папки проектов — для Arduino и для ESP32. Порядок сборки и прошивки:
- Подключите Arduino Uno/Nano к компьютеру.
- Откройте Arduino IDE и откройте проект для ардуино.
- Если знаете что делать дальше, делайте. Если не знаете, прочитайте здесь.
- После загрузки скетча в Arduino, отложите плату и возьмите ESP32.
- Подключите к компьютеру, затем нажмите и держите кнопку BOOT, кратковременно нажмите EN, затем отпустите BOOT. Этим мы включили режим прошивки ESP32.
- Выберите плату ESP32 Dev Module в Arduino IDE. Если нет этой платы, прочитайте здесь.
- Нажмите «Загрузка» и дождитесь окончания компиляции и загрузки скетча. При загрузке скетча плата может перезагрузиться и выйти из режима прошивки, поэтому, когда в консоли вывода появится надпись «Connecting», нажмите и держите кнопку BOOT до тех пор, пока не пойдёт загрузка. Тогда можно отпустить. Из режима плата сама выйдет.
Надеюсь, вам эта статья понравилась) Спасибо за внимание и с наступающим)
