Понятно, что ESP32 в качестве управляющего контроллера для любого девайса, в том числе и светодиодного куба, — это гораздо интереснее, чем «простенькая» Arduino Nano, но AlexGyver в своём базовом проекте почему-то остановился именно на Arduino Nano.
Мы же пойдём дальше и оснастим наш LED Cube современным ESP32 со всеми присущими ему возможностями: Bluetooth, Wi-Fi, двумя 32-разрядными ядрами, большим объёмом памяти и прочим, что позволит в дальнейшем оснастить куб беспроводными интерфейсами и включить его в IoT систему.
Тем более, что сделать это будет не так сложно — оказывается стандартная распиновка колодки Arduino Nano — это ещё и универсальный переходник для подключения
Об этой сакральной магии и поговорим далее…
❯ Немного теории
Всего (в нашем случае) возможны три варианта построения архитектуры светодиодного куба:
- Системой управляет Arduino Nano (базовый вариант)
- Гибридный вариант Arduino Nano (индикация) плюс ESP8266/ESP32 (интерфейсы)
- Системой управляет ESP32 (индикация и беспроводной интерфейс)
Базовый вариант
Базовый вариант на Arduino Nano ничем не плох — это вполне функциональное решение, единственным существенным недостатком которого является отсутствие беспроводных интерфейсов для управления кубом. Далеко не всегда это нужно и, в принципе, вполне можно обойтись и штатной Arduino Nano.
Гибридный вариант
Это более продвинутый вариант системы, где иллюминацией и управлением светодиодами занимается Arduino Nano, а в качестве партнёрского контроллера выступает ESP8266, который обеспечивает беспроводную связь и, в силу своей вычислительной мощности, прочие дополнительные функции.
Коммуникация между контроллерами осуществляется по UART интерфейсу, где ESP8266 выступает ведущим, а Arduino Nano — ведомым. Тут же появляется возможность оснастить систему веб-интерфейсом с различными настройками, что кардинально повышает удобство пользования кубом.
ESP32 в этом варианте использовать нет смысла — если уж использовать ESP32, то дополнительные «костыли» в виде Arduino Nano ему не нужны — у него есть два ядра и прочие соответствующие ресурсы.
Вариант ESP32
ESP32 — это самый «козырной» вариант: мы получаем всё и сразу. Просто меняем Arduino Nano на ESP32 и получаем в своё распоряжение на 2-3 порядка больше ресурсов и возможностей, чем в базовом варианте. В этом смысле нет никаких причин использовать другие варианты, кроме как для создания экспериментальных стендов для отработки навыков программирования Arduino Nano и ESP8266 (что тоже полезно и лишним не будет).
В результате
В результате можно сделать два переходника для ESP8266 и ESP32 и получить возможность мгновенно изменять управляющую архитектуру светодиодного куба «по настроению» или в соответствии с текущими потребностями изучения программирования для тех или иных платформ (ATmega328, ESP8266, ESP32).
❯ Волшебный сокет
Как я же отметил в предыдущей статье, для того, чтобы превратить «унылый» вариант куба на Arduino Nano в нечто гораздо более интересное и продвинутое на ESP8266/ESP32 достаточно сделать одну простую вещь — не запаивать наглухо Nano в материнскую плату куба, а установить вместо неё разъёмы (колодки, сокет). Это позволит устанавливать в этот сокет другие контроллеры.
Но кто сказал, что распиновка Arduino Nano для этого подходит и всё не погорит при первой же попытке подобной интеграции? Тем более, что контроллеры у нас разные и рассчитаны на разное питание 3,3 и 5 вольт.
А вот не погорит, смотрим на схему подключения Arduino Nano в светодиодном кубе. Я привожу часть схемы, необходимую для понимания рассматриваемого вопроса (полная схема куба есть в предыдущей статье).
Из анализа этой схемы можно сделать следующие выводы.
Если не считать опциональных кнопок и светодиодов LED1 и LED2, то соединение контроллера с кубом осуществляется при помощи всего трёх линий интерфейса SPI, это:
D13/SCK/SRCLK — импульсы синхронизации;
D11/MOSI/SER/DATA — собственно данные о состоянии светодиодов;
D10/SS/RCLK — сигнал выбора устройства на шине.
Плюс контакты земли (GND) и питания (5V). Собственно, это все линии, которые мы должны подключить при интеграции других контроллеров для управления работой куба. Главное сделать это грамотно, чтобы нигде ничего не сгорело и нормально работало с новым управляющим контроллером.
Этим мы и займёмся далее.
❯ Переходник ESP8266
Начнём с гибридного варианта на ESP8266. Как вы помните, в этом варианте ESP8266 управляет Arduino Nano, которая в свою очередь занимается обслуживанием непосредственно работы LED Cube.
Код управления светодиодами и эффектами хранится на Arduino Nano, а ESP8266 только отдаёт управляющие команды для Nano по UART интерфейсу. На ESP8266 хранится код веб-сервера и страницы веб-интерфейса куба. Плюс любой другой код для нужных вам функций на стороне ESP8266.
В качестве контроллера ESP8266 будем использовать хит всех времён и народов WeMos D1 mini. Наша цель — просто грамотно соединить D1 mini с Arduino Nano и сделать соответствующий модуль, который можно будет вставлять в сокет Arduino Nano на плате куба.
Распиновка подключения UART соединения между D1 mini и Nano. Со стороны D1 mini используется аппаратный TXD1 для передачи данных и GPIO4 (D2, в нотации D1 mini) для подачи сигнала прерывания.
А со стороны Nano используется пин с аппаратным прерыванием D3/INT1 и GPIO5 (D5) для входного сигнала RX, поддерживаемого библиотекой SoftSerial (на Nano только один и уже занятый аппаратный UART).
Само-собой, земля (GND) всех составляющих соединяется вместе, а также линии питания (5V) обоих контроллеров тоже соединяются. Вот более полная распиновка соединения контроллеров модуля.
Поскольку линии питания 5V контроллеров и куба соединены вместе, то запитывать куб можно как угодно: со стороны D2 mini и/или со стороны Nano (через USB разъёмы), или через колодки подачи питания на материнской плате куба.
По идее, между 3,3-вольтовой D1 mini и 5-вольтовой Arduino Nano должен быть конвертер уровней, и поначалу у меня так и было сделано, но потом оказалось, что и без него всё прекрасно работает и из финальной схемы переходника (модуля) я его убрал. Как говорится, зачем платить больше, если не видно разницы? Но вы можете сделать всё правильно и использовать конвертер уровней.
Переходник — простая плата с двумя разъёмами для Nano и D1 mini. Разъём для Nano с длинными пинами, которые «приподнимают» Nano и дают возможность подключить всю переходную плату.
Всего используется четыре перемычки: чёрная — земля (GND), красная — питание 5V, жёлтая — данные TX/RX и зелёная — линия прерывания. Остальные контакты обеспечиваются автоматически при установке модуля в материнскую плату.
Вот как это выглядит в готовом виде:
В моём варианте плата модуля несколько торчит назад, но меня это не смущает, поскольку при работе её практически не видно и куб у меня используется больше для экспериментов, чем для украшения интерьера (хотя и с этим он справляется на ура).
❯ Переходник ESP32
С переходником для ESP32 всё ещё проще: тут фактически один разъём под типовой китайский ESP32 модуль и несколько проводков соединительных линий. Главное — грамотно подключить эти проводки (смайл).
Здесь просто линии SPI интерфейса Nano в колодке (самой Nano нет!) соединяются с соответствующими линиями дефолтного SPI интерфейса ESP32. Плюс линия 5V в колодке соединяется с линией VIN контроллера ESP32. Ну и земля (GND), естественно.
Проще — некуда. Переходник полностью пассивный и не содержит практически ничего, кроме разъёмов и нескольких перемычек, но эффект даёт фантастический — разница между Nano и ESP32 колоссальна.
Цвета перемычек те же самые, что и в варианте с ESP8266. Здесь длинные пины уже не нужны, поскольку тут не нужно подключать Nano — ESP32 сама справляется со всей работой и по обслуживанию иллюминации куба и по поддержке беспроводных соединений и веб-интерфейса.
При установке модуль на ESP32 выглядит более аккуратно и не слишком выпирает за габариты куба. А при работе куба его вообще не видно.
❯ Программирование
Программированием всей этой чудо-техники мы займёмся в следующих статьях, а пока несколько слов о программном обеспечении работы светодиодного куба на разных платформах.
Положительным моментом тут является то, что код обслуживания светодиодного куба является практически идентичным и легко переносимым для различных платформ. Можно написать код эффектов на Arduino Nano и практически без изменений (с минимальными изменениями) скопировать его в проект на ESP32.
Если вы не являетесь фанатом программирования и вам неинтересно отлаживать межпроцессорное взаимодействие, то оптимальным вариантом видится платформа ESP32, как самая развитая и многообещающая. Можно постепенно развивать и модернизировать свой проект на ней: добавлять новые эффекты, функции и т. д.
А если вы изучаете программирование или просто любите программировать, то светодиодный куб — это отличный вариант тестового стенда для подобных экспериментов — тут все ваши действия наглядно отражаются на работе куба: он либо радует вас своей иллюминацией, либо не работает так, как надо и все ваши ошибки программирования буквально видны на самом кубе.
Ну и для детей изучать программирование будет значительно интереснее на основе светодиодного куба, чем на абстрактных и безликих примерах.
❯ Заключение
Просто красота: вынул плату Arduino Nano, вставил любой модуль ESP8266/ESP32, в зависимости от текущих задач, и можешь оттачивать мастерство программирования на любой платформе. Хочешь — программируй светодиодные эффекты, хочешь — отлаживай работу веб-сервера и веб-интерфейса, хочешь — тренируйся в межпроцессорном взаимодействии разных MCU. Что ещё может пожелать любитель DIY электроники и программирования?
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩
Комментарии (18)
AlexGyver
09.01.2025 12:24почему-то остановился именно на Arduino Nano
Потому что она полностью справляется с поставленной задачей? Имхо есп32 перебор, может сразу малинку на Линуксе поставить? ;)
smart_alex Автор
09.01.2025 12:24Так это если достаточно просто куба. Мне как-то больше нравится куб с веб-интерфейсом, возможностью в интерфейсе управлять настройками и с API для интеграции в домашнюю IoT систему для использования куба для индикации различных событий в умном доме.
smart_alex Автор
09.01.2025 12:24А от вас, с вашими способностями, ждём куб 16х16x16 на WS2812D :)
sergyk2
09.01.2025 12:24https://youtu.be/mNqzkDugvSw?si=3l3soZI1LzsWwp8S
выглядит он проще в изготовлении, слои между собой только в 1 месте соединяюца
smart_alex Автор
09.01.2025 12:24На ютубе есть ролик с кубом 16х16x16 на умных светодиодах - это бомба и автор просто невероятный молодец.
slonopotamus
09.01.2025 12:24Имхо есп32 перебор, может сразу малинку на Линуксе поставить? ;)
Малинка с линуксом подороже будет (и электричества жрёт поболее). А вот выбор между ардуиной/esp8266/esp32-c3 вообще неочевиден, особенно если у вас ещё ничего из этого нет.
withkittens
09.01.2025 12:24Если учесть, что esp32-c3 стоит полтора доллара, выбор нано действительно не очевиден :)
TinK87
09.01.2025 12:24Собрал куб. Дело в том что есть косяк. Возможно дело в китайских, некачественных компонентах. При заполнении 8 слоя куба, происходит небольшой засвет первого слоя. Схему уже пробовал модернизировать. Ставил фильтра на транзисторы. Резисторы на землю. Подтяжки. Что только не мудрил. В итоге внимательно посмотрел видео. У Гавера точно такое же явление с его кубом. А как исправить уже нет понятия. А насчёт esp32 это жирно. Web интерфейс думаю будет лишним. Так как куб на столе лежит. Кнопки под рукой. И nano в полное хватает. Но идея хорошая. +++++++
smart_alex Автор
09.01.2025 12:24У меня то же самое. Я исследовал этот момент и пришёл к выводу, что дело не в железе, а в динамической природе индикации - это подсвечиваются не успевающие вовремя гаситься диоды (в динамике).
zatim
09.01.2025 12:24А какие там частоты? Транзистору, конечно, нужно время чтобы выйти из насыщения, особенно, если оно было глубоким. Но на частотах динамической индикации (100-400 гц) это обычно еще никак не проявляется.
smart_alex Автор
09.01.2025 12:24Дело в том, что диоды подсвечиваются без всякой системы - обычно это диод ниже горящего, либо диод на -7 этажей, но бывает совершенно хаотическая подсветка.
У меня два предположения: либо это задержки импульсов (по идее это должно лечиться программно), либо это "блуждающая ёмкость", которая заваливает фронты импульсов.
kuzzdra
Если от контроллера достаточно только SPI - ESP8266 должно хватить.
smart_alex Автор
У меня на одном ядре не получается сделать и веб-сервер с полноценным интерфейсом и обеспечить плавную работу эффектов (там динамическая индикация с минимальными задержками) - при работе сервера иллюминация куба начинает мигать.
kuzzdra
Вывод в SPI по прерываниям таймера?
smart_alex Автор
Я пока экспериментирую с оригинальным кодом Алекса Гайвера (сам код можно посмотреть по ссылке в предыдущей статье).
LAutour
Я несколько лет назад чтобы уменьшить задержки на SPI выводе в ESP8266 в ардуино делал свой вывода через DMA с полным использванием аппаратного буфера на 512бит.
smart_alex Автор
Спасибо за совет, надо будет поэкспериментировать в этом направлении.
LAutour
Я делал по минимуму: готовую основную инициализацию от ардуино и только размер буфера и вывод свой, прерываний за ненадобностью не использовал - успевал в основном цикле дождаться конца вывода по SPI: