habrahabr

Все мои Ардуинки: часть третья, ESP8266 и ESP32

  • пятница, 13 декабря 2024 г. в 00:00:16
https://habr.com/ru/companies/ruvds/articles/863990/

И снова, уже в третий раз (здесь у нас первый, вон там второй) вашему вниманию предлагается моя коробочка с Ардуинками. На этот раз будем извлекать из неё и рассматривать под светом допросной лампы платы на микроконтроллерах ESP8266 и ESP32. Также изучим краткую историю появления этих контроллеров, некоторые их особенности и роль в мировой революции место в экосистеме Arduino.

▍ Краткая история ESP


Полностью разобраться в хитросплетениях истории появления ESP8266 и ESP32 за давностью лет и языковым барьером не так-то просто, да и не очень-то нужно. Достаточно обозначить общие вехи в этой истории.

Логотип компании Espressif, потому что статье нужны какие-то иллюстрации

Микроконтроллеры ESP, которые правильнее было бы охарактеризовать как системы на чипе, разработала в 2013-2016 годах китайская компания Espressif Systems, существующая с 2008 года и специализирующаяся на беспроводных технологиях и IoT. В основе контроллеров применялись процессорные ядра архитектуры Xtensa американской компании Tensilica, позже к ним добавился американский же RISC-V. Производство физических микросхем ведётся на мощностях тайваньской TSMC. Так сказать, глобализация на службе человека. В данном случае человека-самоделкина.

Первый контроллер, собственно ESP8266, был разработан в 2013 году и отправился в производство в конце года. В августе 2014 года на рынке появился созданный на его основе модуль ESP-01 производства китайской же компании Ai-Thinker Technology. Он реализовывал поддержку Wi-Fi и TCP/IP, и мог применяться совместно с классическим Arduino или другими управляющими контроллерами в режиме Hayes-подобного модема (работа через AT-команды). Сочетание возможностей и крайне низкой стоимости привлекли внимание западных энтузиастов, и модуль начал набирать популярность в кругах местных самодельщиков.

Модуль ESP-01 со всех сторон. Фото из Интернета

Уже в октябре 2014 года Espressif открыла доступ к SDK для разработки пользовательского кода, способного выполняться непосредственно внутри контроллера, без привлечения дополнительных сущностей Arduino на ATmega. С помощью SDK сторонние разработчики подготовили несколько десятков решений, позволяющих задействовать эти платки в тех или иных целях.

Практически в то же время, осенью 2015 года, Espressif представила развитие линейки: похожий, но ещё более мощный и продвинутый контроллер ESP32, пошедший в производство в 2016 году. На его базе сторонние производители также начали выпускать множество недорогих модулей, появились различные решения для простой реализации IoT с поддержкой скриптов на Lua и MicroPython.

За и против: ESP IDF и Arduino IDE

И наконец, последним, решающим шагом к успеху стало добавления поддержки новых контроллеров, а также всего разнообразия плат от сторонних производителей на их основе, в Arduino IDE. Для ESP8266 это сделали энтузиасты, а для ESP32 уже сама компания Espressif.

▍ Новые горизонты


Пришествие контроллеров ESP в экосистему Arduino произвело в ней качественный сдвиг, которого не смогли добиться все предыдущие постепенно добавляемые контроллеры. Можно вполне уверенно сказать, что новые возможности открыли второе дыхание у постепенно теряющей актуальность платформы Arduino.

Проекты на классических Arduino в основном связаны с обработкой комбинаций сигналов и какой-то реакцией на них: мигание светодиодами и управление сервоприводами по показаниям датчиков, с автоматизацией и робототехникой. Например, поливалка для растений, кодовый замок, часы. Пожалуй, наивысшими достижениями Arduino тех лет стали управление хоббийными ЧПУ станками-гравёрами (посредством прошивки Grbl и Arduino CNC Shield) и 3D-принтерами (прошивка Marlin), а также первый открытый полётный контроллер для квадрокоптеров и не только, ArduPilot.

Пользовательские интерфейсы были ограничены и чаще представлены в формате маленьких монохромных экранчиков и пищалок. Графика, цвет и звук были редким явлением. Проектов с сетевыми интерфейсами было мало, так как для них требовались дополнительные модули, такие, как Bluetooth-модуль HC-05. Чтобы сделать какой-нибудь MP3 проигрыватель на Arduino, требовался специализированный чип декодера и карта памяти.

Всё это великолепие родом из начала 2000-х стремительно устаревало по мере углубления человечества в эпоху Интернета и мощных смартфонов, и популярность как самой платформы Arduino, так и электронного DIY в целом, постепенно снижались. Конечно, все идущие в ногу с прогрессом вещи можно было реализовать на появившийся в 2012 году Raspberry Pi. Но стоимость этих плат хотя и была относительно низка ($35), всё же это было многовато для встраивания в хоббийные проекты, а мощность даже избыточна для многих применений.

Появление гораздо более дешёвых ESP8266 и затем ESP32 открыло новые горизонты. Низкая стоимость в комбинации со встроенными беспроводными интерфейсами сделала доступными новые классы самоделок. Собственно, контроллеры для IoT открыли Arduino двери в мир этого самого IoT, «интернета вещей»: теперь не только модный холодильник, но и любые самоделки могли ходить в интернет.

Фокус проектов на новых контроллерах сместился от дрыгоножества к интеллектуальному управлению потоками данных между программными или аппаратными модулями и Интернетом. На ESP можно сделать хоть часы точного времени с синхронизацией по NTP, хоть погодную станцию, берущую прогнозы с сайтов, хоть интернет-радио, хоть Bluetooth-клавиатуру. Стало возможным соединяться и управлять самоделками через беспроводные интерфейсы: заходить на них со смартфона, настраивать через удобное меню нужные параметры, загружать и скачивать файлы.

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

Помимо низкой цены и широкой доступности новых контроллеров, важным ингредиентом стремительного роста их популярности стала реализация их поддержки в экосистеме Arduino. Что немаловажно, она работает совершенно человеческим образом, по образу и подобию классических плат: просто подключаешь кабель и нажимаешь кнопку загрузки. Никаких ритуалов с нажатиями кнопок сброса и перетыкания кабелей. Также доступны опции беспроводного обновления.

▍ Особые приметы


Так как основным функциональным назначением ESP8266 и ESP32 является IoT, их ключевой особенностью является наличие Wi-FI модуля, и ресурсов, достаточных для реализации сетевых функций. Соответственно, довольно могучее вычислительное ядро в них присутствует не просто так, а прежде всего для программной реализации TCP/IP стека.

Внутреннее устройство чипа и его периферии являются чёрным ящиком. Производитель не предоставляет документацию по низкому уровню, а для взаимодействия со всеми ресурсами, такими как ОЗУ, ПЗУ и периферийные устройства, предлагается использовать функции SDK. Ящик настолько чёрный, что для ESP8266 так и не был официально заявлен точный объём ОЗУ системы, указывалось лишь примерное количество памяти, свободное от использования системой. Впрочем, для ESP32 эту информацию сделали более доступной.

Карта памяти ESP32

В силу специфики IoT-контроллера, выполнение пользовательского кода является дополнительной опцией. Во время работы контроллера в фоне выполняются системные процессы, обрабатывающие связь, watchdog и другие элементы системы. Ими можно частично управлять, например, запрещая работу Wi-Fi, но без полного понимания устройства системы возможны казусы, такие как сильная нестабильность прерываний по таймеру. Espressif говорит о примерно 80% процентах вычислительной мощности, остающихся для пользовательского кода.

Организация IRAM на ESP32

Пользовательский код выполняется в специальном ОЗУ (IRAM), куда по мере надобности подгружается системой из внешнего SPI Flash. Этот процесс выполняется аппаратно и для программиста прозрачен. Он не накладывает дополнительных ограничений на объём кода, но, конечно, пересылка по SPI занимает некоторое время, и если код достаточно большой, он будет довольно часто перезагружаться, теряя в скорости выполнения. Понимание наличия этой особенности теоретически позволяет писать более оптимальные программы.

Всё перечисленное, а также нахождение портов GPIO на более медленной шине периферии, работающей на частоте 80 МГц независимо от тактовой частоты ядра, снижает способности контроллеров в области заморского bit-banging, или исконно русского «дрыгоножества». Таким образом, Arduino на ATmega и STM32 всё ещё сохраняют некоторые преимущества в приложениях реального времени. Впрочем, для ESP есть RTOS, но это уже другая история и более глубокий уровень погружения в тему.

▍ Трёхвольтовая история


Важная особенность ESP8266 и ESP32, которой стоит уделить внимание — трёхвольтовость. Всё-таки платформа Arduino ориентирована на начинающих и энтузиастов, часто не являющихся специалистами в области электроники и применяющих платформу как своего рода Лего, а для них наличие подобных моментов может стать сюрпризом.

Я не буду приводить здесь руководство по преобразованию уровней — это достаточно большая тема, которой хватит на целую статью. Цель этого раздела только в обозначении самого существования разницы, которую нужно учитывать. Необходимые практические подробности можно найти в Интернете. Например, вот хороший гайд.

Микроэлектроника идёт по пути снижения питающих напряжений, что позволяет делать её всё более энергоэффективной. Со сменой технологий устанавливались новые стандарты на питающее напряжение и логические уровни.

Долгое время в цифровой электронике были стандартом напряжение питания 5 вольт и так называемые TTL уровни (свойственные технологии TTL родом из 1960-х годов): напряжение до 0.8 вольт считается логическим нулём, выше 2 вольт — единицей. С такими уровнями работают стандартные пятивольтовые устройства, в частности, народно любимая К155ЛА3 и прочие логические микросхемы 155 и 555 серий (зарубежные 74 и 74LS). Пятивольтовая система применяется и в экосистеме оригинальных плат Arduino, потому что на момент её появления среди энтузиастов ещё оставалось популярным огромное электронное TTL-совместимое наследие.

Логические уровни для разных технологий

Однако, в микросхемах КМОП-технологии, к которой относится вся современная электроника, включая микроконтроллеры ATmega и ESP, используется иной подход. Допускается значительно более широкий диапазон питающих напряжений, зависящий от конкретной модификации конкретного чипа. Логическим нулём считаются любые напряжения, составляющие до 30% напряжения питания, а логической единицей — от 70%. Иногда эти цифры отличаются. При питании от пяти вольт следующие этой схеме контроллеры ATmega надёжно совместимы с TTL-устройствами.

Допустимый диапазон питания для контроллеров ESP в разных версиях составляет от примерно двух (1.7 или 2.2) до 3.6 вольт, а граница, разделяющая логические уровни, находится примерно на половине питающего напряжения. Хотя платы могут питаться от USB или внешнего пятивольтового источника, сам чип ESP8266 получает питание от установленного на плате стабилизатора на 3.3 вольта. Таким образом его логические уровни считаются трёхвольтовыми, и он может работать с другими трёхвольтовыми устройствами напрямую.

Аналогично классическим Arduino, для коммуникации с ПК через USB-интерфейс, применяющий пятивольтовые логические уровни, используется микросхема USB-UART моста (тоже нужно устанавливать соответствующий драйвер). Она же выполняет и преобразование уровней, поэтому процесс загрузки скетчей совершенно прозрачен для пользователя, и ему не приходится сразу же сталкиваться с проблемами электрической совместимости.

Однако, уровни для GPIO пинов всегда остаются трёхвольтовыми. И это необходимо учитывать при подключении устройств из экосистемы Arduino, в частности, всевозможных модулей, датчиков и шилдов, использующих пятивольтовые уровни. При несовпадении уровней как минимум просто не будет работать передача данных, а в худшем случае — входной уровень превысит напряжение питания устройства и выведет его из строя.

В зависимости от типа соединения (что и к чему подключается), для согласования уровней можно обойтись хаком в виде прямого подключения или пары резисторов. В других же случаях будет оправдано применение специализированных микросхем.

▍ Arduino на ESP8266


Лежащая в основе ESP8266 32-битная архитектура Tensilica Xtensa представляет собой конструктор систем на чипе: заказчик выбирает нужные ему опции и получает чип, оптимизированный под конкретные задачи. Таким образом создан и ESP8266, его конфигурация Xtensa называется L106.

Металлический экран модуля ESP8266MOD

Платки на ESP8266 обычно представляют собой конструкцию в стиле «смерть Кащея». Они имеют разные формы и размеры с пинами под установку гребёнок формата SIP, удобных для применения с беспаечными макетными платами. На платках устанавливается USB-UART мост и модуль-платка с блестящей металлической «коробочкой»-экраном с обозначением ESP8266MOD или ESP-12. Под экраном находятся чипы: собственно сам ESP8266EX и внешняя SPI Flash-память разного объёма, чаще всего 4 мегабайта. Впрочем, в последнее время появились более простые конструкции, где все чипы установлены сразу на основную плату, а металлический экран отсутствует.

Внутренний мир модуля ESP8266MOD

Так как устройство чипа на низком уровне является закрытым, программирование на ассемблере хотя и вполне возможно, но не рекомендуется. Информация об архитектуре важна только для понимания, что все вариации плат на ESP8266 одинаковы по возможностям, у них у всех одинаковая архитектура внутри, чего нельзя сказать про их старших собратьев на ESP32.

Ядро ESP8266 может работать на частоте 80 или 160 МГц, выбираемой в опциях при компиляции кода в Arduino. Периферийные же устройства, включая таймеры и порты GPIO, работают всегда на 80 мегагерцах. На такой же частоте работает и шина SPI для внешней Flash-памяти, что ограничивает скорость выполнения кода.

Официальная блок-схема ESP8266

Из-за того, что исполняемый код подгружается через SPI, производительность оценить гораздо сложнее, чем в традиционных микроконтроллерах. Мне не удалось найти достоверной оценки, но судя по результатам тестов, найденных в Интернете, похоже, что типичный для RISC-микроконтроллеров порядок один MIPS на мегагерц является вполне реалистичной оценкой при условии, что весь код помещается в ОЗУ.

Точное количество ОЗУ внутри чипа тоже неизвестно. Предположительно это 160 килобайт, разбитых на разные функциональные блоки, среди которых 32 КБ — память инструкций, 32 КБ — кэш инструкций (не знаю, в чём разница), 80 КБ — ОЗУ данных и ещё 16 КБ для особых нужд системы. Всё это не имеет особого значения, главное, что нужно знать — при компиляции кода в среде Arduino для пользовательских применений остаётся около 45 килобайт ОЗУ, и ещё немного можно освободить, отключив Wi-Fi.

Код скетча располагается в довольно большой Flash-памяти, обычно 4 мегабайта, но сейчас есть варианты и на 16 мегабайт. В ней же программно организована простенькая файловая система. Из неё возможно не только читать, но и сохранять в неё файлы, что очень удобно. Например, это могут быть настройки, запоминаемые при отключении питания.

Из беспроводных интерфейсов ESP8266 поддерживает только Wi-Fi.

Пакет поддержки ESP8266 в Менеджере плат

Что касается плат на базе ESP8266, в природе их существует около полусотни разновидностей. Поддержка их всех разом устанавливается в Arduino IDE по стандартной схеме: добавляется ссылка для Менеджера плат в Настройки, далее через Менеджер плат устанавливается пакет esp8266.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Самой популярной платой определённо является D1 Mini от компании Wemos (она же Lolin) — оригинал или её китайские клоны. С ней произошла история, аналогичная Arduino Nano: она стала своего рода лицом ESP8266, и теперь имя чипа часто применяется к этому конкретному виду плат на его основе.

Плата Wemos D1

Это довольно маленькая и удобная платка, для которой Wemos, подражая Arduino, также разработала множество модулей-шилдов соответствующего формата. Впрочем, эта идея, по моим наблюдениям, особого интереса не вызвала, и шилды в проектах встречаются нечасто, а вот основная плата прижилась очень успешно. Продолжаю наблюдения.

Плата Wemos D1 в формате Arduino Uno

Также есть относительно редкая не-Mini версия D1: плата, полностью совпадающая по формату с Arduino Uno, но на ESP8266. Для обеспечения максимальной совместимости с платами-шилдами для Uno пины на ней также сгруппированы очень похожим образом по их функциональному назначению. Однако, нужно помнить про то, что «похоже» не значит «то же самое», и про трёхвольтовость ESP.

Другой популярной вариацией являются платы формата NodeMCU. Вообще-то, это самостоятельная программная платформа, предназначенная для интернетизации вещей посредством скриптов на Lua. Для неё было разработано несколько плат, которые также поддержаны в Arduino IDE и могут использоваться как любые другие платы на ESP8266.

Как я понимаю, платы версий 0.8 и 0.9 разрабатывали участники проекта NodeMCU, а прочие продукты с этими обозначениями уже все, кому не лень, так как проект открытый.

Отличительной особенностью этого семейства плат является одинаковая распиновка и наличие двух кнопок около USB-разъёма.

Плата NodeMCU Amica

Есть популярная вариация NodeMCU платы с названием Amica, что является то ли брендом, то ли самоназванием — разобраться мне не удалось. По формату она похожа на D1 Mini, но в полтора раза длиннее, что позволило разместить на ней больше GPIO пинов, а также она самая тонкая, всего 4.2 миллиметра, вместо 7 мм для D1 MIni.

Плата NodeMCU, второй вариант

Также есть более крупная вариация платы Amica, очень похожая по форме, совместимая по распиновке, но заметно более крупная по всем измерениям. Вместо USB Micro здесь используется USB Type C. В остальном это точно то же самое, разве что микросхема USB-UART моста другая.

Плата NodeMcn v3 с экранчиком

Последний экземпляр в моей коллекции — плата с обозначением new NodeMcn v3 (опечатка не моя). Явно попахивает китайским народным творчеством. Это всё тот же NodeMcu, но теперь ещё крупнее, а на его борту установлен монохромный OLED-дисплей с разрешением 128 на 64 точки. Идея мне показалась полезной: я нередко подключал такие дисплеи к ESP8266 в отладочных и практических целях. Но с приобретением этой платы поводов её применить как-то больше и не возникало.

Три версии NodeMCU, групповой снимок

▍ Arduino на ESP32


По сравнению с ESP8266, линейка контроллеров ESP32 более многообразна. Она включает разные вариации архитектуры Xtensa, LX6 и LX7, с разными ядрами и их количеством, а также прочими опциями, и разобраться в их сортах с ходу не так-то просто.

Экран модуля ESP32-S3

В 2016 году был выпущен оригинальный чип ESP32 с архитектурой LX6, не имевший никаких особых обозначений, но при этом доступный в одноядерном и двухъядерном вариантах. В 2020 году произошла диверсификация, и на смену оригиналу пришло сразу три новых варианта: ESP32-S2 и ESP32-S3 с архитектурой LX7, а также ESP32-C3 с архитектурой RISC-V. S3 является заменой оригинальной двухъядерной версии, S2 более дешёвой упрощённой одноядерной альтернативой, а C3 назначен в преемники ESP8266, и о нём мы поговорим отдельно.

Чип ESP32-S2

У всех этих контроллеров значительно больше ресурсов, чем у ESP8266. В целом они похожи, но ядра быстрее, до 240 МГц. Значительно больше ОЗУ, объём которого различается между версиями и составляет от 320 до 520 килобайт. Впрочем, организация ОЗУ довольно сложная, это не линейный кусок памяти, а набор банков, имеющих некоторые особенности. Стандартный объём Flash-памяти обычно составляет те же 4 мегабайта.

Официальная блок-схема оригинальных ESP32

Периферия тоже значительно богаче. Есть поддержка DMA, ADC, DAC, каналы PWM, каналы тач-сенсора и ИК-датчиков, даже интерфейс для подключения камеры, и много чего ещё. Версии S2 и S3 поддерживают USB-OTG. Помимо Wi-Fi, есть поддержка Bluetooth (кроме S2). Для классической серии это Bluetooth 4.2, для S3 уже Bluetooth 5.0.

В общем, это уже довольно серьёзная система, обладающая достаточной мощностью даже для эмуляции 8-битных компьютеров и, с помощью найденного энтузиастами хака для i2s интерфейса (не путать с i2c), способная полностью программно генерировать цветной композитный видеосигнал в NTSC и PAL. Также на ESP32 запускали специально оптимизированную версию игры Doom, такую же, как на RP2040. Учитывая стоимость, практически рай для самоделкина.

Разумеется, на базе такого большого разнообразия чипов было выпущено ещё больше плат. Буквально сотни их. Среди них есть даже недавно вышедшая на рынок официальная плата от Arduino — ESP32 Nano, но такой в моей коллекции нет.

Пакеты поддержки плат на ESP32

Установка поддержки большинства плат снова происходит по той же схеме: добавляем ссылку на пакет в Менеджер плат, устанавливаем пакет esp32. Для Arduino Nano 32 предусмотрен отдельный, официальный пакет поддержки, Arduino ESP32 Boards, доступный для установки без добавления ссылок.

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

Если среди плат на ESP8266 лидер очевиден, назвать «главную» плату для классического ESP32, являющуюся олицетворением этого чипа в среде Ардуинщиков, сложно. Пожалуй, главным претендентом на это место будет плата с обозначением ESP32 DEVKIT1.

Плата ESP32 DEVKIT1

По форм-фактору она очень похожа на NodeMCU, а по размеру — на версию Amica, лишь немногим больше. У той версии, которая есть у меня, пинов столько же, а именно 30, но их расположение сильно отличается, совпадает питание и некоторые другие выводы. Также существует версия на 38 пинов, и вроде бы даже у меня она где-то была, но найти её я не смог. Держу в курсе.

Плата LOLIN32

Другой вариант, известный хотя бы своим названием — LOLIN32 от Wemos. Это странный гибрид ежа и ужа: часть платы с модулем ESP32 на ней похожа на NodeMCU, а часть с USB-интерфейсом своя собственная. Отличительной особенностью платы является увеличенное количество пинов и наличие отдельного разъёма питания.

Плата ESP32 MiniKit

Самый популярный вариант ESP32 среди меня — плата ESP32 MiniKit от MH-ET LIVE. Это вариация на тему Wemos D1, также встречающаяся под названием Wemos D1 Mini ESP32. Не уверен, что сам Wemos выпускал такую. Плата по форме похожа на D1 на ESP8266, но заметно крупнее. Пины по краям расположены в два ряда, и соответственно их вдвое больше. Компактная и удобная версия, подходящая, чтобы запихать её в какой-нибудь джойстик.

Плата Wemos D1 R32 в формате Arduino Uno

Достаточно редко встречающийся, но тоже полезный в народном хозяйстве вариант — Wemos D1 R32. Это отладочная плата в формате Arduino Uno. Та же история, что и с подобной платой на ESP8266: расположение пинов худо-бедно совпадает, но это не точно.

Плата Wemos Mini S2

Все предыдущие платы использовали классичесий ESP32. Следующая платка, опять от Wemos, основана на модном молодёжном ESP32-S2, и называется, соответственно, Mini S2. Её размер и форма полностью совпадают с D1 на 8266, но пины снова расположены в два ряда.

Плата ESP32-S3

Другая платка на ESP32-S3, имеет довольно выдающуюся наружность: огромное количество пинов, RGB-светодиод WS2812, и два USB Type C разъёма. Контроллер S3 поддерживает USB-OTG, поэтому один из разъёмов используется для обычного программирования через USB-UART, а второй для реализуемого USB функционала.

Плата ESP32-CAM (всё сам)

Необычность наружности присуща и следующей платке, ESP32-CAM. Небольшой размер, непохожий на другие платы, странная форма экранировки модуля, предусматривающая вырез для микроскопического гнезда подключения внешней Wi-Fi антенны, встроенный слот для карты памяти формата MicroSD, а также разъём для подключения миниатюрной цветной видеокамеры OV2640 с разрешением в два мегапикселя. Готовая база для веб-камеры или робота-убийцыпылесоса с машинным зрением для распознавания лиц и других объектов.

Камера OV2640

Расплатой за столь интересные возможности является отсутствие USB-разъёма для загрузки скетчей. Здесь придётся применять внешний USB-UART, как с Arduino Mini Pro. Кажется, это единственная плата на ESP32 с подобной особенностью.

И наконец, самый интересный экземпляр моей коллекции — плата Heltec Wi-Fi LoRa 32. Она основана на базе классического двухъядерного ESP32, но отличается наличием встроенного OLED-дисплея, а также главной изюминки — чипа SX1262. Этот чип реализует собственно LoRa (Long Range), маломощный беспроводной дальнодействующий интерфейс, предназначенный для медленной и печальной передачи данных с удалённых на километр-другой датчиков и прочих подобных штук в безлицензионном диапазоне радиочастот. Собственно, эта плата может выполнять роль моста между сетями LoRa и традиционными беспроводными интерфейсами.

Плата Heltec Wi-Fi LoRa 32

Для работы с платой производитель предлагает устанавливать его собственный пакет поддержки. Но у меня эта ссылка не работает, а поддержка подобных плат от Heltec предусмотрена также и в общем пакете поддержки ESP32.

▍ Arduino на ESP32 C3


Отдельным пунктом программы хочу рассказать про восходящую звезду в мире ESP — чип ESP32-C3, выпущенный Espressif в 2020 году в качестве современной, более сбалансированной по цене и возможностям альтернативы для ESP8266.

Модуль ESP32-C3-MINI-1

Название вводит в заблуждение и по информативности сравнимо с «морской свинкой»: не морская и не свинка. Это не продолжение оригинальной архитектуры Xtensa, а совершенно новый контроллер на базе ядра RISC-V с новой периферией.

По возможностям это нечто среднее между младшей ESP32-S2 и ESP8266. Одно ядро RISC-V, тактовая частота ядра до 160 МГц, 400 КБ ОЗУ, 4 мегабайта Flash-памяти. Есть Wi-Fi и Bluetooth LE 5.0. По фактической производительности контроллер ближе к ESP8266, на 10-15% быстрее.

Официальная блок-схема ESP32-C3

На основе нового чипа также оперативно понаделали немало плат, и у меня есть парочка из них. Несмотря на иную архитектуру, их поддержка добавляется в Arduino IDE вместе с основным пакетом ESP32, никаких дополнительных действий не требуется.

Первая плата — довольно любопытный вариант, похожий на ранее упомянутую плату на ESP32-S3, с RGB-светодиодом и двумя разъёмами USB Type C, только вдвое короче по длине. Однако, ESP32-C3 не поддерживает USB-OTG, поэтому причина присутствия здесь двух разъёмов не вполне очевидна. На самом деле это просто технический момент, особенности переходного периода.

Плата ESP32-C3 Dual USB

Один из разъёмов подключён через USB-UART, а другой напрямую к чипу, и оба предназначены только для программирования, только разными способами — через UART и через встроенный USB. Скетчи также можно загружать двумя разными способами, для каждого разъёма свой способ. Я использовал первый, а при подключении через второй визуально ничего не происходило, и история с ним прояснилась только после знакомства со следующей платой.

Собственно, вторая, пожалуй, самая многообещающая платка — ESP32-C3 SuperMini. Сделана по лекалам RP2040 SuperMini, а может быть и наоборот, но главное — очень маленькая, меньше любых других плат на контроллерах ESP, по размеру сравнима с платами на ATtiny от Digispark. Но гораздо более мощная.

Самые маленькие платки: ESP32-C3 SuperMini, RP2040 SuperMini, ATtiny от DigiSpark

Это весьма перспективное решение, которое я определённо хочу применять в будущих проектах. Однако, для начала нужно разобраться со способом загрузки скетчей. Здесь реализован только вариант без USB-UART, с прямым подключением к чипу, и воспользоваться им оказалось не так-то просто.

В первый раз я решил, что плата неисправна: при подключении по USB каждую пару секунд начинает циклически подключаться и отключаться USB-устройство. Но это нормальное поведение. Чтобы перевести плату в режим загрузки, нужно поиграться с кнопками на ней. Есть два способа: отключить плату, зажать кнопку BOOT, подключить плату и отпустить кнопку; либо зажать кнопку BOOT, нажать и отпустить RESET, отпустить BOOT. Визуально ничего не изменится, но переподключение устройства прекратится и плата начнёт ожидать загрузку скетча.

Плата ESP32-C3 SuperMini

Для загрузки скетча из Arduino IDE необходимо, чтобы плата была видна как COM-порт. У некоторых пользователей с этим проблем нет, и порт виден сразу. У меня же COM-порт не появлялся, только USB JTAG/serial debug unit.

Решение этой проблемы оказалось надёжно закопано в глубинах интернета, но оно есть. Потребовалась программа с подозрительным названием Zadig. С её помощью устанавливается драйвер USB Serial (CDC) для USB JTAG/serial debug unit (Interface 0) и WinUSB для USB JTAG/serial debug unit (Interface 2). После этого в системе появляется COM-порт и становится доступна загрузка через Arduino IDE.

Для запуска вновь загруженного скетча в моём случае сбрасывать плату приходится вручную, переподключением кабеля или кнопкой RESET. Также есть отзывы, что даже при наличии видимого в системе COM-порта скетч не загружается по причине неизвестной ошибки в esptool. К счастью, я с этим не столкнулся.

Чип ESP32-C3 и антенна

Помимо сложностей с первоначальной установкой, известно, что на доступных сейчас платах есть проблемы со штатной Wi-Fi антенной (красная деталька, похожая на конденсатор): она плохо ловит сигнал. Предлагается перепаять её под углом 90 градусов к плате, либо понизить мощность программно. Я пока Wi-Fi не использовал и этими плясками с бубном не занимался.

▍ Заключение


Ардуинки в моей коробке закончились. Но мы с ними не прощаемся, и, смею надеяться, ещё не раз увидимся в будущих DIY проектах. А ещё у меня есть другие коробки, и в них тоже можно найти, о чём рассказать. Вот, например, дисплеи…

© 2024 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻