Добрый день, уважаемый читатель!
В данной статье порассуждаем о том, как и на чем можно программировать популярные “сетевые” микроконтроллеры ESP8266 и ESP32. Выясним что такое платформа (framework, SDK) и IDE (Integrated Development Environment), почему это не одно и то же, и как они связаны. Я постараюсь сделать сей обзор максимально непредвзято, дабы вы смогли выбрать для себя максимально подходящий инструмент.
Для кого эта статья? Она предназначена в первую очередь для тех, кто впервые столкнулся с ESP и хочет разобраться, с помощью каких инструментов их можно самостоятельно программировать. Не использовать чужие готовые прошивки, а именно программировать, то есть создавать свои собственные прошивки.
Данная статья посвящена только программированию микроконтроллеров ESP32 и ESP8266, а соответственно и всех плат не их основе – ESP32-DevKit, NodeMCU, ESP-01 и т.д. Если вам интересно узнать больше об этих железяках, то вы можете посмотреть еще одну статью.
Спойлер (для тех, кто не желает читать всю эту писанину): для полноценного программирования ESP8266 и ESP32 в основном используется язык C / C++ с применением платформ Arduino ESP32 или ESP-IDF, а также можно работать и с языками MicroPython или LUA. А использовать для этого можно много самых разных сред разработки: Arduino IDE, PlatformIO, Espressif IDE, CLion, VisualGdb, ESPLorer.
Инструменты для разработки, терминология
Для тех, кто впервые сталкивается с программированием, давайте чуть-чуть остановимся на необходимых терминах и инструментах для программирования. Для знакомых с программированием МК эту главу можно смело пропустить.
Любые популярные средства для программирования ESP можно разбить на несколько составных частей:
- IDE – собственно редактор программ на человеко-читаемом языке (обычно Си / Си ++, но могут быть варианты)
- Компилятор – то что переведет ваш код в читаемом языке в машинные коды (чаще всего он объединен с IDE и вы напрямую с ним не взаимодействуете)
- Freamework / платформа / SDK – набор системных библиотек, довольно жестко привязанных производителем к используемому контроллеру. Сюда входят все необходимые библиотеки и API для работы с выводами, таймерами, сетевыми интерфейсами и т.д. и т.п.
То есть IDE != платформа, хотя они и часто связаны. Например: Arduino – это не только IDE, но и фреймворк (платформа).
Если говорить очень упрощенно (да и не совсем правильно), то для того, чтобы построить дом, вам потребуются: чертеж дома (ваш исходный код), компилятор (бригада строителей) и кирпичи и иные стройматериалы (фреймворк, платформа). Об них и проговорим ниже.
Конечно же, существуют и альтернативные варианты “визуального” или модульного программирования ESP32 без написания кода, но лично я не считаю такие средства нормальными системами программирования и отношусь к ним достаточно негативно. Посему описания таких систем в данной статье не будет.
IDE
Для того, чтобы писать код, нужен основной инструмент программиста – редактор кода (или какой-либо другой инструмент для программирования). Чаще всего их называют IDE (что расшифровывается как Integrated Development Environment — интегрированная среда разработки) — это программное приложение, которое позволяет разработчикам писать, отлаживать и тестировать код, используя при этом один или сразу несколько языков программирования. IDE, как правило, включает в себя собственно редактор кода, компилятор и, возможно, отладчик (что упрощает процесс разработки программного обеспечения). В принципе, в некоторых языках программирования можно легко и блокнотом обойтись, но для микроконтроллеров это не катит.
IDE могут быть рассчитаны на работу как с одним определенным семейством микроконтроллеров (например: Atmel AVR Studio, CubeIDE, Espressif IDE и т.д.), так и одновременно с самыми разными языками и микроконтроллерами (например: ArduinoIDE, Visual Studio Code и т.д.). Первую группу IDE назовем специализированными, ну а вторую группу IDE вполне можно называть универсальными.
Компилятор
IDE сама по себе не может “заставить” микроконтроллер работать. Процессор не человек, он не понимает слов, он понимает “машинный код” – только свои команды, определенные инженерами на этапе его создания. Для того, чтобы перевести ваш текст, написанный на том или ином языке программирования (исходный код), в понятный процессору двоичный код нужен компилятор или иногда интерпретатор:
- Компилятор (англ. compiler – составитель, собиратель) читает всю программу целиком, делает ее перевод в машинный код и создает законченный вариант программы на машинном языке, который затем загружается в микроконтроллер и выполняется. При каждом новом запуске программы всегда выполняется уже ранее скомпилированный вариант программы.
- Интерпретатор (англ. interpreter – истолкователь, устный переводчик) переводит и выполняет программу строка за строкой. В этом случае при каждом запуске программы интерпретатор заново преобразует ваши строчки в машинный код и исполняет их. Очевидно, что для этого требуется гораздо больше времени и усилий, поэтому на микроконтроллерах применяется редко (а на больших и мощных контуперах – легко, особенно в скриптовых языках программирования).
В большинстве случаев для ESP32 и ESP8266 используется именно компиляторы.
Процесс перевода человеко-читаемого исходного кода программы (поэтому их ещё часто называют “исходники” или “sources“) называется “компиляцией” или иногда “сборкой” программы. В английском варианте это могут быть “compile” или “build“. Примечание автора: здесь я пошел на сознательное нарушение истины, так как процессы компиляции и сборки несколько отличаются друг от друга – но в контексте данной статьи нам эти отличия не важны; но важно то, что в разных IDE вы можете встретить и то и другое, и это будет примерно одно и то же.
Прошивка
Что ж, допустим исходный код мы успешно (без ошибок) скомпилировали в двоичный файл-образ, теперь нам нужно загрузить его в микроконтроллер и заставить выполняться. Для загрузки скомпилированной программы в микроконтроллер на разных микроконтроллерах могут применяться либо специальные аппаратные программаторы, либо программный загрузчик (bootloader). Для ESP32 разработчики предусмотрели два варианта – с загрузчиком и без оного, но в подавляющем большинстве случаев используется именно bootloader (но вы можете изменить режим запуска в SdkConfig). Разумеется, загрузчик съедает какую-то часть доступной flash-памяти – подробнее об этом можно почитать тут.
Для чего же все-таки нужен этот загрузчик? Это специальная мини-программа, которая позволяет загрузить ваш код в микроконтроллер без использования специальных аппаратных программаторов. Его задача – принять вашу прошивку через UART ( COM-порт ) и записать её на flash-память; а затем он же считывает прошивку из flash-памяти, проверяет и запускает на выполнение – делается это автоматически, при следующем запуске микроконтроллера. Он же реализует получение, запись и выбор прошивки через сетевые интерфейсы и в случае OTA (обновление прошивки “по воздуху”). Создавать загрузчик самостоятельно вам не потребуется, он будет создан и записан в микроконтроллер автоматически (по умолчанию “с завода” загрузчик уже записан в ESP, но при изменении его параметров он все-таки перезаписывается).
Собственно процесс записи этого образа в энергонезависимую память устройства часто называется “прожигом” или “прошивкой” или “загрузкой“, а в англицкой терминологии – “upload” или “flash“. Если вам интересно, откуда взялись эти термины, можно почитать здесь. Скомпилированную программу тоже часто называют “прошивкой”, поэтому “прошивка” – это может быть и процесс загрузки кода в микроконтроллер и сам скомпилированный код.
Здесь наверное стоит немного рассказать об особенностях хранения прошивок на ESP. Для хранения двоичного кода микропрограмм и различных “постоянных” данных, микроконтроллеры имеют на борту некоторый объем энергонезависимой памяти (ROM или ПЗУ). Но в случае с ESP объем ПЗУ очень даже небольшой. Даже “навороченная” ESP32 первого поколения имеет “на борту” всего 448 килобайт ROM, а новые серии (-S, -C) и того меньше. Меньше чем RAM! Этого явно не достаточно для хранения программ.
Но не всё так страшно. Дело в том, что на продукции Espressif для хранения исполняемого кода и данных используется дополнительный чип flash-памяти, который подключен к процессору по шине HSPI, и для этого используются некоторые GPIO, которые вы не можете использовать в своих проектах для чего-то иного. Насколько я понимаю (хотя я глубоко не исследовал эту тему – а зачем?) чип flash памяти может быль либо интегрирован в собственно SoC (embedded), либо распаян снаружи SoC в виде обычной микросхемки (внутри модуля или на плате) – поправьте меня если я ошибаюсь. Поэтому говоря про энергонезависимую постоянную память в случае ESP используют именно термин flash-память, а не ПЗУ/ROM, так как “истинный” ROM используется для немного другого.
На ESP для перевода загрузчика в режим ожидания пришивки с UART используется GPIO0 (это один из так называемых Strapping Pins), и он очень часто выведен на кнопку DOWNLOAD. Если на GPIO0 в момент сброса микроконтроллера присутствует низкий уровень, то это означает, что нужно ждать поток данных на UART и записать их на flash. Соответственно процесс “ручного” перевода ESP в режим записи прошивки выглядит так:
- нажать и удерживать кнопку DOWNLOAD / BOOT / IO0
- кратковременно нажать кнопку RESET / EN, не отпуская предыдущей
- отпустить кнопку DOWNLOAD / BOOT / IO0 после того, как была отпущена кнопка RESET / EN
- запустить передачу данных на микроконтроллер
Но на многих “готовых” платах этого не требуется, так как там собрана специальная схема, управляющая процессом по сигналам USB-интерфейса. Однако если вы накосячили с выбором GPIO в своем проекте и заняли некоторые служебные strapping pins, то возможно придется выполнить описанную выше процедуру вручную.
Framework / Платформа / SDK / API
Как правило, только одного редактора (IDE) и компилятора ещё не достаточно для того, чтобы вот так “взять и начать программировать”. Ну то есть можно, но ничего не заработает. Нужен набор неких “системных” библиотек и функций, который предоставит вам базовый функционал, из которого вы начнете строить свою прошивку. Эта часть необходимого инструментария называется либо framework (платформа для разработки приложений), либо SDK (software development kit — набор для разработки программного обеспечения).
Конечно, смешивать понятия SDK и framework – не совсем правильно с академической точки зрения, но в данной статье я буду использовать термины framework, платформа и SDK как взаимозаменяемые. Во первых, китайцы сами не определись, где у них что используется. Ну например: фреймворк Arduino ESP32 вполне себе тянет на гордое звание framework; а вот ESP-IDF, лично на мой взгляд, больше похоже на SDK или набор API (так как программисту придется потрудиться гораздо больше), а между тем китайцы и его гордо именуют фреймворком. А во вторых – для лучшей читаемости текста (это модное словечко framework хрен выговоришь, и SDK мне больше нравится) – примечание автора.
Иногда SDK можно разделить на несколько разных API (application programming interface), то есть наборов функций или классов на определенную тематику. Даже если вам, кажется, что вы ничего дополнительно не устанавливали в свою IDE, то это совсем не значит, что ни одного фреймворка или SDK там уже не было до вас.
SDK предоставляет вам как программисту такие функции, как:
- как настроить ножку в нужный режим
- как дергать ножкой или читать её состояние
- как отправить пару байт другу по той или иной шине
- как подключить к сети WiFi
- и т.д. и т.п.
Разные SDK / фреймворки предоставляют вам разные языки программирования и разный уровень детализации: например кирпичи или монолитные панели “с завода”. Из панелей стоить быстро и удобно, никто не спорит, но что ни строй – всё равно выходит пятиэтажная хрущевка, жить в которой бывает не очень уютно. Из кирпичиков строить долго и нудно, но можно построить красивый и уютный особняк (и, кстати, никто не запрещает вам заранее “склеивать” кирпичи в панели нужной именно вам формы самостоятельно, и использовать в других проектах быстро и удобно).
А вот что выбрать именно Вам – для этого как раз и задумывалась данная статья. Я попытался сделать обзор-сравнение IDE, максимально отстраняясь от собственных предпочтений, дабы вы могли сделать правильный выбор. Но, поскольку я в данный момент использую только PlatfromIO, мне, возможно, сложно судить об других IDE.
Все нижеизложенное отражает субъективное мнение автора и не является истиной в последней инстанции (если таковая вообще существует в этом мире). Вы имеете полное право иметь другую позицию по данному вопросу. Однако это не означает, что я обязан переделывать статью под ваше мнение, даже если я ошибаюсь. Вы имеете полное право написать где-либо статью – опровержение и закидать меня
помидорамифактами ?
Выбор между ESP8266 и ESP32
В начале хочу совсем чуть-чуть остановиться на том, какой лучше микроконтроллер приобрести – ES8266 и его модификации или ESP32 любой серии. Если у вас стоит такой выбор – советую вам остановиться именно на ESP32. И совсем не потому, что он более “мощный” – в серии ESP32 есть семейство ESP32-Cx, которое примерно сравнимо по “мощности” с ESP8266. Дело в том, что на мой взгляд ESP8266 получился у Espressif как тот первый блин – немного комом.
- Во-первых – очень мало GPIO, которые можно использовать в проектах. Допустим у вас есть только одно реле, которым нужно управлять тыкая пальчиков в кнопочку на телефоне – тогда он вполне сойдет. Но уже при попытке подключения сенсоров и дополнительного навесного оборудования могут начаться проблемы.
- Во-вторых – у ESP8266 очень маленькая свободная куча ( heap ), так что даже на два одновременных TLS соединения её не хватает
- В-третьих – мои экземпляры ESP8266, увы, оказались катастрофически не надежны, хотя были куплены в разное время у разных продавцов на Ali. Почти все устройства, которые были когда-то собраны мной на этом микроконтроллере (несколько “поливаек” и контроллер вентиляции погреба) – сдохли спустя достаточно непродолжительное время (от месяца до пары лет непрерывной работы), в то время как ESP32 “продолжают работать, работать и работать…”. Возможно, на это повлиял “ретроградный меркурий” и “так сошлись звезды” дабы я имел дополнительный стимул двигаться вперед, но ESP8266 я больше не покупаю, а оставшиеся модули и платы использую только “для опытов”.
Лично для меня это достаточные основания для отказа от дальнейшей эксплуатации в реальных проектах. А по цене они не сильно различаются. Ну а мы переходим к SDK и фреймворкам.
Готовые прошивки
Прежде чем мы перейдем к обсуждению тонкостей программирования, я хотел бы небольшое отступление. Дело в том, что Вам совсем не обязательно учиться программировать, чтобы заставить эту хреновину работать. Существует довольно большое множество готовых прошивок, когда-то и кем-то уже написанных, и очень даже популярных. От Вас потребуется только выполнить необходимые для решения ваших задач настройки. Данная статья совсем не о готовых прошивках, но присмотритесь к списку, возможно это именно то, что Вы искали (приведенный список явно не полный и служит только для предварительного ознакомления):
- WiFi-IoT – модульный конструктор прошивок
- IoT Manager – модульная беспроводная система автоматизации, основанная на популярных микроконтроллерах от компании espressif
- Tasmota – open source прошивка ESP устройств
- ЕSPHome – система управления вашими микроконтроллерами с помощью простых, но мощных файлов конфигурации и удаленного управления ими через системы домашней автоматизации
- ESPEasy – прошивка, которая поддерживает множество современных чипов от Espressiff
- ESP-Link – Wifi-Serial Bridge w/REST&MQTT, прошивка включает в себя крошечный HTTP-сервер с простым веб-интерфейсом
- NodeMCU custom builds
На этом тему готовых прошивок для ESP на данном сайте считаю исчерпанной полностью, совесть моя чиста, и мы возвращаемся к самостоятельному программированию.
Платформы (SDK) для микроконтроллеров серии ESP8266
Для программирования микроконтроллеров ESP8266, как ни странно, можно использовать несколько разных SDK и фреймворков.
Обратите внимание: я пока почти не касаюсь используемых IDE, а рассматриваю только языки программирования и фреймворки. Просто потому что один и тот же SDK вполне можно использовать в разных IDE. Сами IDE рассмотрим ниже.
Arduino ESP8266 (Arduino core for ESP8266 WiFi chip)
Arduino core ESP8266 – бесспорно и безусловно самый популярный SDK для ESP8266 чипов.
Поддерживаемые IDE: Arduino IDE; PlatformIO
Используемый язык программирования: С/C++. Примечание: строго говоря, упомянутый здесь “С++” – это не совсем “C++ в чистом виде”, а “подмножество Си с поддержкой ООП”.
Достоинства:
- Простота использования для начинающих программистов
- Только этот SDK доступен из Arduino IDE, а многие начинающие программисты не хотят переходить на довольно сложный PlatformIO. Даже уважаемый Alex Gyver рекомендовал своим читателям использовать старый добрый Arduino IDE вместо современного PlatfromIO (впрочем, я его отлично понимаю, почему он так сделал, выхода у него по сути не было, т.к. основная его аудитория – начинающие программисты, и советовать им сложные IDE – это форменное самоубийство).
- Огромное количество написанных библиотек
- Огромное количество примеров в сети – простых и не очень. Но будьте осторожны – иногда встречаются явно “кривые” примеры.
Недостатки:
- Стандартные библиотеки ESP8266WiFi могут быть нестабильными в некоторых условиях.
Знаете что побудило меня отказаться от arduino несколько лет назад в качестве первой причины? Дело в том, что устройство в гараже постоянно перегружалось из-за переполнения стека. Код там был проще пареной репы – подключаемся к wifi и mqtt, меняем влажность, включаем реле. Но уровень сигнала там был очень слабый – минус 75 dBi и хуже. Как я выяснил, устройство постоянно подключалось и отключалось от WiFi, причем иногда рабочий цикл подключения не завершался полностью, а уже происходило отключение, и “что-то шло не так…”. Все это приводило к сбоям и перезагрузкам. А на стандартные библиотеки я как бы особо повлиять и не могу.
Между тем устройства на базе ESP32 с самописным алгоритмом, который неоправданно сложен и раздут, по мнению многих комментариев Дзена – работают в тех же самых условиях стабильно долгое время без сбоев и перезагрузок. Нет, я хорошо понимаю, что в нормальных условиях правильно написанный код на Arduino работает достаточно стабильно. Но лично мне этого не всегда бывает достаточно. Да и ошибки в сторонних библиотеках никто не отменял (а повлиять на их оперативное исправление я не могу) – поэтому я предпочитаю писать свои. Но я поступил кардинально – отказался от ESP8266 вообще.
Если же у Вас есть только ESP8266 и вам необходимо её запустить в работу – то наверное это Ваш выбор. Но не единственный…
ESP8266 Non-OS SDK
ESP8266 Non-OS SDK предоставляет программисту набор интерфейсов прикладного программирования (API) для основных функций ESP8266, таких как прием/передача данных через Wi-Fi, стек TCP/IP, функции аппаратного интерфейса и базовые функции управления системой. Судя по всему, автором данного SDK является производитель чипов, но в PlatformIO запилили поддержку в свою IDE.
Поддерживаемые IDE: PlatformIO
Используемый язык программирования: С/C++. Примечание: строго говоря, упомянутый здесь “С++” – это не совсем “C++ в чистом виде”, а “подмножество Си с поддержкой ООП”.
Данный SDK доступен только в PlatformIO, но достаточно давно не развивается. Вместо него предлагается использовать ESP8266 RTOS SDK. Документация по данному SDK есть только в PlatformIO, как собственно и сам SDK. Espressif предоставляет документацию в виде PDF-файла.
ESP8266 RTOS SDK
ESP8266 RTOS SDK – ещё один вариант SDK от производителя, но на этот раз с поддержкой FreeRTOS. Если вы желаете запилить многозадачность в ESP8266, то советую вам присмотреться к данному SDK. Но ресурсы у ESP8266 гораздо скромнее чем у ESP32, это следует учитывать.
Поддерживаемые IDE: PlatformIO
Используемый язык программирования: С/C++. Примечание: строго говоря, упомянутый здесь “С++” – это не совсем “C++ в чистом виде”, а “подмножество Си с поддержкой ООП”.
Документацию по данному SDK вы можете получить здесь. На данный момент я не пользовался данным SDK, но когда-нибудь я попробую сделать это – мне просто интересно, что из этого выйдет. Тогда и можно будет написать про достоинства и недостатки.
MicroPython для ESP8266
Это адаптация популярного языка программирования Python 3, оптимизированная для работы на микроконтроллерах. Нас в данном случае интересует версия для ESP8266.
Поддерживаемые IDE: ESPlorer
Используемый язык программирования: Python 3 (несколько урезанная версия). Я лично не пробовал этот вариант программирования, но насколько я могу судить из документации, этот вариант программирования предоставляет вам интерпретатор (вместо обычного компилятора).
Вначале Вам необходимо загрузить в чип (точнее flash-память) интерпретатор MycroPython в виде уже готового к загрузке bin-файла. И только после установки прошивки c интерпретатором MycroPython на устройство вы можете получить доступ к REPL (командная строка Python) через стандартный UART0. Созданные микропрограммы сохраняются на flash в виде файлов для повторного использования.
Достоинства:
- Наверное, это отличный вариант для ценителей Python, но сам я таковым не являюсь.
Недостатки:
- Отсутствие драйверов для большинства сенсоров и периферийных устройств. Но самые базовые DHT11/DHT22 и 1-Wire имеются.
Подводя итоги – это явно вариант для экспериментов, а не для серьезных проектов. Лично на мой взгляд – на абсолютную истину я не претендую.
NodeMCU
Ещё одна прошивка-интерпретатор, на этот раз на основе языка Lua для ESP32 и ESP8266, в которой используется встроенная файловая система SPIFFS. NodeMCU часто преподносится как название отладочной платы с ESP8266 на борту, но на самом деле это ещё и SDK для ESP.
Поддерживаемые IDE: ESPlorer
Используемый язык программирования: Lua 5.3.
NodeMCU — это прошивка с открытым исходным кодом на основе Lua для ESP8266 WiFi SOC от Espressif, использующая встроенную файловую систему SPIFFS на основе флэш-памяти. NodeMCU реализован на языке C и основан на Espressif NON-OS SDK. Первоначально прошивка была разработана как сопутствующий проект для популярных модулей разработки NodeMCU на базе ESP8266, но теперь проект поддерживается сообществом, и теперь прошивку можно запускать на любом модуле ESP (в том числе и ESP32).
Достоинства:
- NodeMCU SDK содержит в себе драйверы для самых популярных сенсоров (например DHT, DS18B20) и чипов периферии (например MCP23017), что безусловно, делает ему честь
Недостатки:
- На мой взгляд ESP8266 и сам по себе обладает скромными возможностями в плане памяти, а впихивать туда еще и интерпретатор – сомнительная идея.
Лично я с сомнением отношусь к таким вариантам написания программного кода, но как говорится – “если вы не любите кошек, значит вы просто не умеете их готовить“.
В качестве заключения к данному разделу
Возможно, вы знаете или можете найти в сети и другие SDK для разработки собственного программного обеспечения ESP8266. Но мы на этом закончим и переходим к SDK для ESP32.
SDK для микроконтроллеров серии ESP32
Для программирования микроконтроллеров из серий ESP32, ESP32-Cx и ESP32-Sx также вполне можно использовать несколько разных SDK и фреймворков и даже разных языков программирования. Я не случайно начал список ниже с ESP-IDF, а не с самого популярного Arduino32, и далее будет понятно почему.
Обратите внимание: я пока почти не касаюсь используемых IDE, а рассматриваю только языки программирования и фреймворки. Просто потому что один и тот же SDK вполне можно использовать в разных IDE. Сами IDE рассмотрим ниже.
ESP-IDF (Espressif IoT Development Framework)
ISP-IDF – официальный native (что переводится как “родной”) framework от производителя чипов Espressif. То есть ESP-IDF является базовым SDK для всех чипов ESP32, а также он является основой для других фреймворков и языков программирования (примечание автора: возвращаясь к строительной теме – это и есть те самые “кирпичи”).
Поддерживаемые IDE: Arduino IDE; Espressif IDE; PlatformIO
Используемый язык программирования: С/C++. Примечание: строго говоря, упомянутый здесь “С++” – это не совсем “C++ в чистом виде”, а “подмножество Си с поддержкой ООП”. То есть вроде бы язык тот же самый, что и в Arduino IDE, но есть нюансы…
Основан ESP-IDF целиком и полностью на операционной системе реального времени FreeRTOS, но кроме этого он содержит и массу “фирменных” штучек (API). Поэтому, кроме собственно знания C / C++, от вас потребуется хорошее понимание многопоточности (multithreading) и всяких там специальных RTOS-ских фишек типа задач, очередей, мьютексов и т.д. Если вы, как и я, пришли в мир микроконтроллеров с “больших” компьютеров и хорошо знакомы с multithreading-ом, то вам будет не сложно освоить всё это.
Теперь давайте рассмотрим плюсы и минусы этой платформы. Многие из них весьма условны.
Достоинства:
- ESP-IDF имеет соответствующие API для поддержки абсолютно всех аппаратных возможностей, которые были заложены в чипы ESP32 при их проектировании. То есть с этим SDK вы смело можете одновременно использовать две шины IIC, два или три UART, MODBUS, ещё добавить SPI “по вкусу”, I2C и вообще всё, что указано в datasheet-ах – лишь бы выводов хватило. Я уже молчу про всякие там NVS, SPIFFS, TLS и HTTPS и прочее. И при всем этом эти самые API как правило предоставляют программисту максимально возможный уровень настройки под конкретные требования – никакие Arduino тут даже рядом не стояли (нервно курят в коридоре).
- Только у ESP-IDF имеется возможность конфигурировать проект через стандартный механизм SdkConfig. В том числе вы можете в любой момент изменить разметку Flash-памяти по своим вкусам и соображениям. В Arduino IDE, таковые возможности либо отсутствуют, либо достигаются путем танцев с бубном.
- Используя ESP-IDF, вы имеете возможность в полной мере использовать все “сетевые” возможности чипов, как то:
- Вы можете использовать для передачи данных через общий сетевой интерфейс любой физический уровень стека TCP/IP, например Ethernet или GPRS, и при этом все другие API, рассчитанные на работу с WiFi, будут работать без переделок и перделок
- ESP-IDF поддерживает нестандартные протоколы передачи данных через WiFi, например ESP-NOW и режим Long Range, который поддерживает передачу данных на расстоянии данных до 1 км
- Вы можете создать абсолютно любой требуемый алгоритм подключения к сети WiFi – например при работе условиях очень слабого сигнала сети – от -80 до -90dBi и ниже. Стандартные Arduino-вские библиотеки, хоть и очень просты в использовании программистом, но в таких условиях работают далеко не всегда достаточно надежно.
- Используя ESP-IDF, вы автоматически исключаете из кода ненужный балласт в виде Arduino-вского кода, поскольку Arduino32 – это по сути “обертка” вокруг ESP-IDF. На самом деле это весьма условный и спорный плюс, признаю, так как вы в конечном итоге напишите что-то свое примерно того же объема.
Недостатки:
- Самый “главный” минус ESP-IDF, который сразу же отпугивает новичков – отсутствие библиотек драйверов для конкретных внешних сенсоров и устройств. Вы не сможете “из коробки” просто так взять и
склеить мечнаписать метеостанцию. ESP-IDF предоставляет вам все необходимые API-инструменты для работы с периферией, например API для шины IIC, но вот конкретный драйвер для какого-нибудь банального SHT31 или LCD1602 вам потребуется написать самостоятельно (или найти в интернетах). Сразу оговорюсь: это не сложно, я достаточно быстро написал почти все нужные мне драйверы датчиков, с которыми приходилось работать, используя их datasheet-ы, заодно и с тонкостями функционирования разобрался. Многое можно найти на GitHub. Но стоит признать – это серьезный минус для новичков. - Необходимость постоянно и всегда “держать в голове”, что мы работаем не с линейным кодом, а c многопоточным и асинхронным! То есть многопоточность должна быть постоянно что называется “у вас в крови”. Для новичков в программировании это сложно, особенно после прямолинейных
как ломпринципов Arduino. Да и не для новичков не очень просто – вот казалось бы, я написал уже достаточно много многопоточных программ на С и Delphi для компьютеров, иногда мне даже кажется, что понимаю что и для чего требуется. Создал и немало работающих прошивок под ESP-IDF. Но все равно иногда допускаю глупые ошибки, чаще всего из-за невнимательности. - Необходимость вникать и изучать в более низкоуровневые (чем в Arduino) API и функции. Многие стандартные для Arduino32 стандартные макро-функции типа WiFi.begin(wifiSSID, wifiPASS); вам придется подробно и детально написать самому. С использованием соответствующих API, callback-ов и асинхронного кода “по событиям”. На мой лично взгляд – это прост о отлично, так как позволяет изменить логику управления по необходимости. А вот по мнению очень многих <sarcazm>специалистов в программировании микроконтроллеров – это очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень плохо и подлежит немедленному уничтожению</sarcazm>. Поэтому я записал данный пунктик в недостатки, пусть будет так.
Может быть читатели подскажут ещё какие-то достоинства или недостатки данной платформы (если это действительно неустранимые недостатки, не следствие отсутствия опыта), тогда я смогу дополнить данный список. А сейчас я просто не могу ничего вспомнить. Лично на мой взгляд, достоинства перекрывают недостатки “с лихвой” – драйвера при необходимости легко пишутся самим; а громоздкие функции, будучи однажды написанными по своему усмотрению, легко используются повторно.
Здесь стоит немного поподробнее остановиться на собственно процессе компиляции приложений для ESP-IDF (а значит и для Arduino32, так как он является производным от ESP-IDF). Основой всего служит кроссплатформенная система сборки CMake. Для адаптации данной системы сборки к чипам ESP32 в Espressif был создан так называемый toolchain, что по-русски означает “набор инструментов”, а по сути – набор разнообразных скриптов и исполняемых файлов на python 3, которые и выполняют всю основную работу по компиляции, сборке и загрузке приложений на flash-память. А посему в комплект установки фреймворка входит мини-версия python 3.
Рисунок из справочной системы отлично иллюстрирует сей процесс:
На картинке выше Project означает ваш проект, а Appliaction – скомпилированный двоичный файл прошивки, загружаемый в чип. Забегая вперед скажу, что совсем не обязательно подключать ESP32 для прошивки проводом, можно сделать это и “по воздуху”, об этом я как-то писал другую статью.
Arduino ESP32 (ESP32 Arduino Core)
Ещё один официальный framework от Espressif (другие названия: ESP32 Arduino Core или просто Arduino32). Пожалуй это самый известный и популярный SDK для разработки приложений под ESP32. Да, да, это именно тот самый фреймворк, который вы загружаете в Arduino IDE через менеджер плат и ссылку типа “https://dl.espressif.com/dl/package_esp32_index.json“. И таки нет, авторами сего творения являются не итальянцы – изобретатели Arduino, а китайцы – изобретатели ESP как таковой. А если говорить серьезно, то данный фреймворк был создан компанией Espressif для адаптации чипов ESP32 к супер-пупер-мега-популярной среде программирования Arduino IDE. А куда им было деваться? Без этого чипы ESP32 не завоевали бы и доли своей популярности. То есть это еще один из официальных (то есть выпущенных компанией – производителем чипов) фреймворков ESP32. ESP32 Arduino Core основан на той же самой ESP-IDF, которую мы и рассматривали выше (примечание автора: возвращаясь к строительной теме – во многом это и есть “панели с завода”), то есть является адаптацией ESP-IDF под требования Arduino.
Поддерживаемые IDE: Arduino IDE; PlatformIO
Используемый язык программирования: С/C++. Примечание: строго говоря, упомянутый здесь “С++” – это не совсем “C++ в чистом виде”, а “подмножество Си с поддержкой ООП”.
Несмотря на то, что Arduino IDE, на которую нацелен этот SDK, “однопоточная”, но вам всё равно остаются доступны почти все функции FreeRTOS – задачи, очереди и т.д. Но вот доступ к некоторым “фирменным” API, которые предоставляет ESP-IDF, вы потеряете. И ещё один очевидный минус этого SDK – вы потеряете в “гибкости” кода вашей программы – “панели на заводе выпускаются только для типовых проектов“. Зато в комплекте с Arduino вы автоматически получаете доступ к огромному количеству сторонних библиотек, написанных кем-то и когда-то – это неоспоримый плюс Arduino-сообщества.
Достоинства:
- Простота освоения программирования. Простые и понятные универсальные (для многих контроллеров) методы для стандартных функций – дергание ножкой, подключение к WiFi и т.д. А если вы уже ранее освоили программирование в Arduino какого-нибудь другого МК, то перейти на ESP32 вообще почти не составит труда.
- Огромный массив сторонних библиотек на все случаи жизни, как в каталоге Arduino IDE, так и на GitHub-е. Библиотеки эти иногда достаточно качественные и проверенные, иногда “не очень” (например лично я находил ошибки в библиотеках именитых брендов вроде Arafruit, когда делал с них свои версии драйверов сенсоров), иногда их приходится адаптировать под ESP32, но тем не менее они есть. И их много.
Недостатки:
- Невозможность сконфигурировать проект cmake стандартными средствами через sdkconfig
- Выбор разметок flash-памяти возможен только из заранее предустановленного производителем списка (на мой взгляд не очень оптимальных)
- Стандартный ino-скетч для ESP32 – это всего лишь задача FreeRTOS с 8192 байт стека – посмотрите функцию app_main для данного SDK. Хотя вам никто не мешает создавать свои параллельные задачи, но эту предсозданную задачу прибивать нельзя – при выходе из ардуиновского loop() нет vTaskDelete().
- Вы теряете доступ к некоторым API, доступным ESP-IDF
- Стандартные библиотеки Arduino могут быть нестабильными в некоторых условиях (хотя я уже не проверял для ESP32).
Ваш выбор – только за вами, я изложил только свое личное мнение.
MicroPython для ESP32
Это адаптация популярного языка программирования Python 3, оптимизированная для работы на микроконтроллерах. Нас в данном случае интересует версия для ESP32.
Поддерживаемые IDE: ESPlorer
Используемый язык программирования: Python 3 (несколько урезанная версия). Я лично не пробовал этот вариант программирования, но насколько я могу судить из документации, этот вариант программирования предоставляет вам интерпретатор (вместо обычного компилятора).
Вначале Вам необходимо загрузить в чип (точнее flash-память) интерпретатор MycroPython в виде уже готового к загрузке bin-файла. И только после установки прошивки c интерпретатором MycroPython на устройство вы можете получить доступ к REPL (командная строка Python) через стандартный UART0. Созданные микропрограммы сохраняются на flash в виде файлов для повторного использования.
Достоинства:
- Наверное, это отличный вариант для ценителей Python, но сам я таковым не являюсь.
Недостатки:
- Отсутствие драйверов для большинства сенсоров и периферийных устройств. Но самые базовые DHT11/DHT22 и 1-Wire имеются.
Подводя итоги – это явно вариант для экспериментов, а не для серьезных проектов. Ранее в PlatformIO был доступен ещё один python – фреймворк – Simba and Pumbaa, но примерно с год назад он был признан в pio устаревшим.
Лично на мой взгляд – на абсолютную истину я не претендую.
NodeMCU
Ещё одна прошивка-интерпретатор, на этот раз на основе языка Lua для ESP32 и ESP8266, в которой используется встроенная файловая система SPIFFS. NodeMCU часто преподносится как название отладочной платы с ESP8266 на борту, но на самом деле это ещё и SDK для ESP.
Поддерживаемые IDE: ESPlorer
Используемый язык программирования: Lua 5.3.
NodeMCU — это прошивка с открытым исходным кодом на основе Lua для ESP32 и ESP8266 WiFi SOC от Espressif , в которой используется встроенная файловая система SPIFFS на основе флэш-памяти. NodeMCU реализован на C и основан на Espressif ESP-IDF. Первоначально прошивка была разработана как сопутствующий проект для популярных модулей разработки NodeMCU на базе ESP8266 , но теперь проект поддерживается сообществом, и теперь прошивку можно запускать на любом модуле ESP. Поддержка нового SOC ESP32 WiFi/BlueTooth от Espressif находится в стадии разработки.
.
Достоинства:
- NodeMCU SDK содержит в себе драйверы для самых популярных сенсоров (например DHT, DS18B20) и чипов периферии (например MCP23017), что безусловно, делает ему честь
Лично я с сомнением отношусь к таким вариантам написания программного кода, но как говорится – “если вы не любите кошек, значит вы просто не умеете их готовить“.
В качестве заключения к данному разделу
В сети также упоминаются варианты программирования ESP32 на JavaScript и некоторых других языках, но я думаю, что ни для чего серьезного эти проекты не годятся. Впрочем, может быть я и ошибаюсь.
Какую же IDE выбрать?
С тем, какой фреймворк или SDK выбрать для разработки, думаю, вы определились. Наверное не сильно ошибусь, если скажу, что большинство на начальном этапе выберет все-таки соответствующую чипу редакцию Arduino. Ну а потом когда-нибудь, если карта ляжет, можно и на что-то более “тонкое” перейти попробовать. Что ж, давайте подберем к выбранному SDK соответствующий редактор кода – на мой взгляд нужно делать именно так, а не наоборот.
Давайте рассмотрим самые популярные варианты редакторов кода:
- Arduino IDE – “полноценная” IDE, с которой вы сможете использовать фреймфорки Arduino ESP8266 и (или) Arduino ESP32, а также множество других совместимых платформ и микроконтроллеров. Я не случайно написал “полноценная” в кавычках, так как Arduino IDE первого поколения это не среда программирования, а блокнот-переросток к прилепленным к нему списком библиотек и компилятором.
- Espressif IDE – специализированная IDE от производителя чипов Espressif, с которой можно использовать только фреймворк ESP-IDF. На самом деле это не совсем самостоятельная IDE, а плагин к “чужим” редакторам кода – есть версия для Visual Studio Code или с уже интегрированным “внутри” Eclipse.
- PlatformIO IDE – плагин для Visual Studio Code, который позволяет работать с множеством платформ: Arduino ESP8266, Arduino ESP32, ESP-IDF, ESP8266 Non-OS SDK, ESP8266 RTOS SDK и т.д. Самый универсальный инструмент из рассматриваемых в данной статье. Но не самый простой.
- CLion – это кроссплатформенная IDE для программирования на C и C++, которая имеет поддержку платформы ESP-IDF. Лично я на данный момент не пробовал, поэтому описания в статье пока отсутствует – прошу понять и простить.
- VisualGDB – плагин для работы со встраиваемыми системами для Microsoft Visual Studio (не путайте с Visual Studio Code – это разные IDE!), который также позволяет работать с фреймворком ESP-IDF. Основной недостаток, лично на мой взгляд – Visual GDB платный (самый дешевый вариант – 100$ в год). Для профессиональных студий оно может и ничего, но для личного пользования – увольте. Лично я на данный момент не пробовал, поэтому описания в статье пока отсутствует – прошу понять и простить.
- ESPlorer – мультиплатформенная IDE для работы с LUA для NodeMCU и MicroPython. Также поддерживаются AT-команды для ESP8266. Написана на Java, судя по всему. MycroPyhton лично у меня вызывает изжогу, посему описания данной IDE не будет ни сейчас ни в дальнейшем. Да и без меня все уже подробно описано.
Конечно же, существуют и другие варианты, мне даже где-то когда-то попадался довольно большой список где были и другие плагины и ide, но вот беда – найти не могу. И, конечно же, я совсем не рассматривают различные варианты для “визуального” и “блочного” программирования, так как за программирование такие способы не считаю.
Так какие будут варианты?
- Если вы желаете разрабатывать программы под Arduino фреймворки – то ваш выбор либо Arduino IDE 2.х, либо PlatformIO
- Если вы планируете вести разработку под ESP-IDF и ESP32 – то у вас, в принципе, может быть два варианта:
- Если будет использоваться только ESP-IDF – вы можете использовать либо Espressif IDE, либо PlatformIO, либо CLion, либо VisualGDB
- Если вам требуется писать код под разные чипы и SDK – то на выбор у вас остается PlatformIO или VisualGDB
- Если вы планируете вести разработку под ESP8266…SDK – опять же это возможно только из PlatformIO
Разумеется, никто не запрещает вам поставить сразу несколько IDE сразу и пользоваться ими по необходимости. Тем более, что и Visual Studio Code и Eclipse IDE позволяют одновременную установку нескольких плагинов.
Если Вас интересует мое мнение (но это только мое мнение и я никому его не навязываю):
- Для ESP8266 я использую фреймворк Arduino – так как нет других адекватных фреймворков с готовыми библиотеками
- Для ESP32 я использую исключительно ESP-IDF, так как не желаю упираться в ограничения платформы Arduino. И вы даже не найдете примеров на Arduino на ESP32 на данном сайте.
Забегая вперед – я уже давно привык к связке VSCode + PlatformIO, так как это позволяет мне использовать множество платформ в одном и том же привычном интерфейсе. Но и связка VSCode + Espressif IDE, безусловно, также заслуживает пристального внимания, особенно в свете текущей политической ситуации (PlatformIO это проект разработчиков из соседнего государства, и они вполне могут прикрыть к нему доступ в любой момент).
Ну а теперь рассмотрим эти варианты более детально. Пробовать компилировать я буду опубликованный ранее пример для ESP8266, другого просто нет под рукой.
Arduino IDE
Широко известная система разработки программного обеспечения от итальянских разработчиков. Данная IDE предназначена для начинающих разработчиков, поэтому имеет минимум элементов управления, минимум настроек, а меню наполнены ссылками на примеры скетчей (скетч – это исходный код программы в терминологии Arduino IDE). Несомненно, это облегчает освоение IDE людьми, впервые столкнувшимися с программированием. Облегчает работу и встроенный менеджер сторонних библиотек. Но вот с остальным у Arduino IDE может быть не всё так радужно, особенно в первой ветке.
Следует понимать, что на текущий момент существует две официальные ветки Arduino IDE: 1.x (на момент написания статьи 1.8.19) и 2.x (на момент написания статьи 2.2.1). По функционалу они довольно сильно различаются, поэтому стоит их рассматривать как разные IDE.
Arduino IDE 1
Страница проекта: www.arduino.cc
Ссылка для скачивания: downloads.arduino.cc/arduino-1.8.19-windows.exe
Исторически эта была первая версия Arduino IDE, раньше она была ещё примитивнее, но со временем немного обросла ракушками менюшками и функциями.
Как я уже упоминал, IDE была рассчитана на начинающих, даже на школьников, поэтому все достоинства и недостатки вытекают из этого обстоятельства – как правило ценят и хвалят данное изделие новички в программировании; а ругают те, кто уже успел познакомиться с другими IDE (не обязательно для микроконтроллеров). Причина проста – в ней напрочь отсутствуют привычные в современных редакторах кода функции: IntelliSence, вменяемая подсветка синтаксиса, детекция ошибок “на лету” (до компиляции) и т.д.
Достоинства
- Простой интерфейс облегчает освоение программирования (не пугает начинающих сложными меню и обилием кнопок)
- В меню присутствуют ссылки на примеры (что опять же немаловажно для быстрого освоения начинающими)
- Простой и удобный менеджер библиотек (хотя довольно тормозной и не всегда понятно какую же библиотеку нужно ставить из предложенного списка)
- Простой и удобный менеджер плат, в котором вы легко и интуитивно можете выбрать необходимую версию рабочей платформы.
- Хорошо русифицированный интерфейс (хотя это может быть “медвежьей услугой” – если вы захотите потом перейти на другую IDE, придется заново осваивать команды, так как другие IDE не русифицированы)
Недостатки
- Отсутствие выбора платформы разработки: вы можете использовать только SDK Arduino8266 или Arduino32. ESP-IDF уже не применимо в данном случае.
- Отсутствие возможности работать с отладчиками плат, отладчик в Arduino IDE 1.0 вообще отсутствует как понятие.
- Подсветка синтаксиса работает только для встроенных функций и типов данных, для пользовательских функций она не работает (см. скриншот)
- Отсутствует возможность быстрого перехода к объявлению переменной (константе) или функции по имени
- Отсутствие автодополнения кода
- Очень не удобный вывод ошибок при компиляции проекта – вам придется изрядно потрудится иногда, чтобы докопаться до истиной причины, почему вам скетч не компилируется
- Нет автодополнения кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор)
- Нет проверки на ошибки в коде “на лету” – то есть по мере ввода текста пользователем, до запуска процесса проверки / компиляции
- Организация папки проекта? – пффф, а это это? При выборе другого проекта придется заново настраивать плату и её параметры.
- Про сборку проекта одновременно для нескольких плат / микроконтроллеров даже говорить не приходится
- В настройках платы небольшой выбор разметок flash-памяти, а добавить кастомную разметку можно только путем танцев с бубном.
- В списке плат можно выбрать только промышленно выпускаемые платы, да и то не все, что есть на ali, например.
- Не удобно работать с много-файловыми проектами, и в этом случае очень не просто управлять сборкой проекта посредством управляющих макросов препроцессора (
#define BLA_BLA_BLA_ENABLED 1
). - Долгая компиляция проекта. Похоже при каждой сборке компилируются все файлы проекта заново, в том числе и библиотеки.
- Даже и не вспомню сразу все замеченный мной косяки этой IDE… А они есть и ещё!
Arduino IDE 2
Страница проекта: www.arduino.cc
Ссылка для скачивания: downloads.arduino.cc/arduino-ide_2.2.1_Windows_64bit.exe
Разумеется, разработчики экосистемы Arduino прекрасно знают о недостатках своей IDE первого поколения. Прогресс не стоит на месте, и они постарались учесть некоторые из них в Arduino IDE второго поколения, которая стала доступна для скачивания относительно недавно (точно не вспомню, но что-то около года-двух назад от даты написания данной статьи, впрочем это не важно – прим.авт.). Что можно сказать об новой версии?
Arduino IDE 2.0 стала гораздо лучше и удобнее! Однозначно! Теперь Arduino IDE обрела черты современных систем разработки программного обеспечения.
Что нового?
- Сразу бросается в глаза явный закос интерфейса под Visual Studio Code, по крайней мере оформление отдельных частей интерфейса мне очень напоминает последний.
- Появилась левая панель – на ней расположены список каталогов, обновленный менеджер плат, менеджер библиотек, отладчик и панель поиска
- Более удобный и быстрый менеджер библиотек (и плат).
- Появилась полноценная подсветка синтаксиса – теперь выделение цветом работает не только для системных функций
- Появилась возможность быстрого перехода к определению переменной или функции
- Появилась возможность переименовать символ (например переменную или функцию) с заменой всех её вхождений к вашем коде
Что ж, недурно, весьма недурно! Так что если вы собираетесь программировать свои микроконтроллеры исключительно с применением фреймворков Arduino, можно смело рекомендовать использовать данную IDE. Итак, для формальности составим списки плюсов и минусов (хотя лично я плотно не работал с данное IDE и что-то могу упустить).
Достоинства (оставим все те же, ничего не усложнилось)
- Простой интерфейс облегчает освоение программирования (не пугает начинающих сложными меню и обилием кнопок)
- В меню присутствуют ссылки на примеры (что опять же немаловажно для быстрого освоения начинающими)
- Простой и удобный менеджер библиотек (хотя довольно тормозной и не всегда понятно какую же библиотеку нужно ставить из предложенного списка)
- Простой и удобный менеджер плат, в котором вы легко и интуитивно можете выбрать необходимую версию рабочей платформы.
- Хорошо русифицированный интерфейс (хотя это может быть “медвежьей услугой” – если вы захотите потом перейти на другую IDE, придется заново осваивать команды, так как другие IDE не русифицированы)
Недостатки
- Отсутствие выбора платформы разработки: вы можете использовать только SDK Arduino8266 или Arduino32. ESP-IDF уже не применимо в данном случае.
- Нет автодополнения кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор)
- При выборе другого проекта придется заново настраивать плату и её параметры
- Про сборку проекта одновременно для нескольких плат / микроконтроллеров даже говорить не приходится
- В настройках платы небольшой выбор разметок flash-памяти, но появилась возможность указывать разметку прямо в скетче (не пробовал!)
- В списке плат можно выбрать только промышленно выпускаемые платы, да и то не все, что есть на ali, например.
- Долгая компиляция проекта. Похоже при каждой сборке компилируются все файлы проекта заново, в том числе и библиотеки.
В итоге, выбор IDE зависит от требований проекта и опыта пользователя. Если вам нужна простая в использовании среда для освоения программирования и небольшого проекта, Arduino IDE может стать вашим выбором. Если же у Вас уже есть некоторый опыт и вам нужна более мощная и многофункциональная среда разработки для более крупного проекта, посмотрите в строну профессиональных IDE – PlatformIO или Espressif IDE.
Espressif IDE
Страница проекта: esp32/get_started
Ссылка на инструкцию по установке расширения в Visual Studio Code: vscode-esp-idf-extension
Ссылка на плагин для Eclipse: ESP-IDF Eclipse Plugin
Ссылка на инсталлятор: инсталлятор Espressif IDE на базе EclipseCDT
Как я и писал выше, рассматриваемая IDE подойдет Вам только в том случае, если вы решите создавать программы исключительно для ESP32 и исключительно под ESP-IDF. Правда, ничто не мешает Вам использовать ещё какую-либо IDE – например Arduino IDE второго поколения для программирования ESP8266. Данный вариант я рассматриваю в качестве запасного аэродрома, если PlatformIO вдруг уйдет с российского рынка.
Espressif IDE – это не полностью самостоятельная IDE, а плагин к “чужим” редакторам кода на выбор: VSCode или Eclipse. Китайцы видимо решили, что им не потянуть разработку и поддержку полноценной IDE, поэтому было принято решение использовать сторонние редакторы кода в качестве основы. На сайте Espressif есть ссылки и на полноценную IDE – но с небольшими оговорками. Только качайте offline-версию с интегрированной IDE – online-версия почему-то устанавливает не совсем рабочую версию на текущий момент.
“Самостоятельная” Espressif IDE
Данный инструмент предназначен для работы в командной строке, но внутри установщика присутствует и необязательная графическая IDE, которая построена на базе Escipse CDT. То есть получается, что в конечном итоге это всё равно тот же плагин, но с жестко интегрированным внутрь Eclipse. Что ж, вполне приемлемо. Её мы и рассмотрим в данном обзоре, очень кратко, разумеется.
Я пока что не работал с данной IDE над серьезными и большими проектами, но сборка текстового проекта “из коробки” не потребовала от меня никаких дополнительных настроек – 1) установил, 2) импортировал тестовый пример в рабочую область, 3) скомпилировал. Разве что IntelliSence не заработал сразу – пришлось дополнительно установить все компоненты платформы. Пользовался я данной IDEсовсем немного по времени, так что мои оценки могут быть весьма поверхностными.
Что можно сказать с первого взгляда? Не знаю почему, но китайский софт можно сразу же отличить по его внешнему виду, даже если интерфейс на английском. Интерфейс меня лично немного напрягает – например это обилие множества кнопок без подписей в различных стилях оформления. Но это только мое личное мнение и в целом и общем вполне приемлемо.
Поскольку она создана только для ESP32 и ESP-IDF, то это теоретически дает и максимально возможную адаптацию интерфейса под чип. IntelliSence, или как-там оно называется в данной IDE, работает довольно шустро (заметно пошустрее чем VSCode), для доступа к исходным кодам самой ESP-IDF ничего настраивать не нужно, вот только почему-то макросы препроцессора плохо распознает. Но некоторые действия (например открытие исходного кода примеров) на мой взгляд не очень логичны.
Update 2023-12-13 (благодарности читателю с ником “Pitekantrop”, сообщившему об этом):
Кликнув по файлу sdkconfig в дереве папок и файлов, откроется довольно удобный редактор конфигурации проекта:
Что, несомненно, очень удобно. Но лично я не нашел эту функцию, так как не догадался щелкнуть по файлу, а в главном меню IDE она отсутствует.
Достоинства
- “Родная” “полноценная” IDE от производителя чипов.
- Простой метод смены версии ESP-IDF для проекта прямо из UI без необходимости правки файлов конфигурации
- Встроенный навигатор по файлам и папкам проекта, причем в дерево автоматически “подтягиваются” включаемые файлы библиотек.
- Наглядный редактор конфигурации проекта SDK Configuration Editor
- Подсветка синтаксиса и ошибок “на лету”, причем работает достаточно шустро и стабильно.
- При повторной компиляции собираются только измененные файлы, поэтому повторные запуски происходят достаточно быстро
Недостатки
- Отсутствие выбора платформы разработки: вы можете использовать только ESP-IDF и ничего более.
- Нет автодополнения кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор)
- Отсутствие русского языка в интерфейсе (начинающим может быть сложновато)
Расширение Espressif IDE для Visual Studio Code
Кроме этой псевдо-полноценной Espressif IDE, я попробовал установить и расширение Espressif IDE и в Visual Studio Code. Эксперимент получился не совсем “чистый”, так как на тот момент у меня уже была установлена “полная” Espressif IDE, и плагин для VSC просто “подхватил” все настройки из полноценной версии. На мой взгляд это действительно круто сделано.
Здесь уже сносно работает IntelliSence и автодополнение кода. Тестовый проект собрался сразу же и без проблем. А еще здесь доступен прикольный SDK Configuration Editor в виде “дерева” элементов – для тех кто любит графические UI, это будет отличным вариантом.
Достоинства
- Плагин IDE от производителя чипов.
- Наглядный и легко вызываемый SDK Configuration Editor
- Навигатор по файлам и папкам проекта
- Частично русифицированный интерфейс (Visual Studio Code)
- Подсветка синтаксиса и ошибок “на лету”, причем работает достаточно шустро и стабильно.
- Автодополнение кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор)
- При повторной компиляции собираются только измененные файлы, поэтому повторные запуски происходят достаточно быстро
Недостатки
- Отсутствие выбора платформы разработки: вы можете использовать только ESP-IDF и ничего более.
- Поначалу может быть довольно сложно разобраться, как создать проект, настроить его и т.д.
Поскольку у меня на текущий момент нет опыта работы с большими проектами в данной IDE, на этом я, пожалуй, и закончу. А мы переходим к последнему номеру нашей программы. После антракта…
PlatformIO
Страница проекта: platformio.org
Ссылка на плагин для VSCode: PlatfromIO IDE
Как утверждает Alex Gyver, PlatformIO – это open-source экосистема для разработки на Arduino. <душнила>C чем я категорически не могу согласиться – ведь PlatfromIO позволяет работать с множеством платформ (фреймворков или SDK), список которых не ограничивается только Arduino-совместимыми платформами.</душнила>. Поддерживает множество платформ, с подробным списком которых вы можете ознакомиться на официальном сайте, скажу лишь, что в нем присутствуют все основные популярные микроконтроллеры, в том числе и ESP32 и ESP8266. Что, несомненно, является одним из важнейших конкурентных преимуществ данной IDE – ведь вы можете работать с кодом разных микроконтроллеров и платформ без необходимости смены привычной среды разработки.
PlatformIO является плагином (или расширением), который который можно установить не только в Visual Studio Code, но так же в множество других редакторов кода. А также он доступен и для разных операционных систем. PlatfromIO состоит из нескольких отдельных компонентов: PlatformCore и собственно PlatformIDE, но при установке PlatformIDE всё устанавливается сразу, ничего по отдельности доустанавливать не нужно. Процесс установки PlatfromIO в Visual Studio Code я уже описывал дважды: раз и два. Процесс не сильно тривиальный, да ещё и из коробки иногда что-то не работает, но таки катастрофичного ничего нет.
Сам по себе PlatfromIO не содержит никаких SDK и фреймворков – всё это опять же требуется подключать к самому PIO – получается этакий многослойный пирог из PlatformIO Core – PlatformIO IDE и SDK. И PlatfromIO не внедряет в ваш проект “от себя” ничего дополнительного – он просто обеспечивает единый и относительно универсальный механизм сборки проектов для разных систем. Не всегда это удобно, что-то работает “кривовато”, но за универсальность приходится платить.
Достоинства
- Поддерживает множество платформ и SDK одновременно. Вы можете программировать на каком-нибудь native SDK и Arduino одновременно (ну почти).
- Достаточно простой метод смены версии платформы или библиотек через файлы конфигурации
- Продвинутый и функциональный менеджер библиотек, но не без недостатков
- Встроенный навигатор по файлам и папкам проекта, очень удобно работать с большими проектами
- Подсветка синтаксиса и ошибок “на лету”, есть удобный механизм автодополнения кода – но всё это нужно предварительно настроить
- При повторной компиляции собираются только измененные файлы, поэтому повторные запуски происходят достаточно быстро
- Частично русифицированный интерфейс (но, увы, это работает только для самого Visual Studio Code)
Недостатки
- Сложноват для новичков в программировании
- После установки необходимо доработать напильником – подробности здесь.
- SdkConfig доступен только через “текстовый” cmd-интерфейс (впрочем, лично мне оно так даже больше нравится)
- Необходимость дублировать некоторые параметры проекта, например подключаемые файлы и библиотеки: для системы сборки CMake и для самого PlatformIO
- Не совсем недостаток, но…: я не хочу “лезть в политику”, но приходится учитывать, что PlatformIO – украинский проект. И его разработчики в любой момент могут принять решение о том, чтобы “перекрыть кислород” для российских пользователей. Я сильно сомневаюсь, что через PIO можно внедрить в код вашего устройства что-то “лишнее”, но на системах управления ядерными реакторами я бы побоялся его использовать.
В своих проектах я пока что использую данную IDE. Пока он доступен в нашей стране и нормально работает. Впрочем есть резервный вариант – Espressif IDE + Arduino IDE 2.
Впрочем – выбор всегда за вами, я лишь обозначил варианты приложения ваших сил и энергии.
Ну а на этом я завершаю свой небольшой обзор, надеюсь он был вам полезен. Ваши вопросы и комментарии вы можете оставить ниже или в чате. Благодарю за внимание, всем добра! В заключение оставлю ссылки на другие статьи по данной тематике.
Связанные статьи
- ESP32 – чипы, модули, платы… Как во всем этом разобраться?
- Пошаговое руководство по созданию проекта для ESP8266 в PlatformIO (впрочем, все тоже самое можно легко сделать и в Arduino IDE)
- Статьи на тему “Arduino”
- Статьи на тему “ESP-IDF”
- Облачные сервисы для умных устройств
Пожалуйста, оцените статью:
Спасибо за статью! Ваш сайт – самый лучший ресурс по ESP на русском языке.
Несколько слов в защиту ESP8266. У меня самый древний модуль ESP-07 (с разъёмом для антенны) работает практически непрерывно уже лет семь, причём в уличных условиях. ESP32, конечно, лучше, но 8266 уже имеющиеся надо же куда-то пристроить.
Спасибо за высокую оценку!
По поводу 8266 – возможно, возможно….
Скорее всего, мне просто так “повезло” с ними с самого начала, хотя покупал в разное время у разных продавцов. До сих пор лежат, но часть уже раздарил друзьям.
Я подумаю, как лучше изменить эту формулировку.
> NodeMCU SDK содержит в себе драйверы для самых популярных сенсоров (например DHT, DS18B20) и чипов периферии (например MCP23017), что безусловно, делает ему честь
Хочу добавить, что все не так радужно. Например разработчики некоторых драйверов ( как минимум tsl2561 ) не подумали, что у меня может быть ДВА таких датчика. А еще очень много людей долго мучались с тем, что абсолютно все драйвера для устройств на шине 1-wire в инициализации устройства инициализировали шину. С предсказуемым результатом.
Странно, что ни слова не сказано про ошибки, которые показаны на скриншоте Espressif IDE.
Первый раз вижу IDE, которая не может найти стандартные хедеры. И настройки пути к хедарам из панели параметров CDT зачем-то убрали. В стандартной IDE для С/CPP всё это есть, в Espressif IDE всё почикали.
Ардуино IDE из коробки работает, IDE для STM32 работает, а тут упорно не хочет видеть стандартные файлы.
Самое непонятное, что работающий проект после перезагрузки не видит кучи файлов и упорно не хочет опять их находить.
Вчера собрал тестовый пример для ds18b20, и даже прошил МК, получил правильную температуру.
Сегодня с утра запустил -187 ошибок, не видит библиотечные файлы. Чистил проект, пересобирал, перегенерировал индексы – всё бестолку.
На скриншоте IDE не ошибки, это ихняя IntelliSence отказывается понимать макросы препроцессора. И об этом написано в тексте, цитирую:
IntelliSence, или как-там оно называется в данной IDE, работает довольно шустро (заметно пошустрее чем VSCode), для доступа к исходным кодам самой ESP-IDF ничего настраивать не нужно, вот только почему-то макросы препроцессора плохо распознает.
И еще:
Разве что IntelliSence не заработал сразу – пришлось дополнительно установить все компоненты платформы.
Китайцы никогда еще не “доводили до ума” документацию и софт на свою продукцию.
Конечно же, вы можете использовать обычную Arduino IDE, которая вообще знать не знает ни от каких хедерах.
Либо заплатить сотку баксов и купить VisualGDB, например. Но я не проверял – может и там не знают от ESP-IDF настолько хорошо.
Похоже я нашел себе источник информации на долго. Спасибо за такой академизм. Главное не останавливайтесь. Ваш сайт это ценный ресурс для нашей страны. Продолжайте повышать уровень грамотности.
Благодарю за теплые слова.
Пока не зависящие от меня обстоятельства не позволяют продолжать в том же темпе, но, надеюсь, через пару месяцев ситуация в какой-то мере исправится.
Спасибо за исчерпывающую информацию. Однозначно плюс в карму, очень помогли с выбором!!!
Здравствуйте. Спасибо за ваш сайт, очень много полезной информации.
Примерно летом 22г. перешел с Arduino IDE, на MS VS Code + PlatformIO + Arduino32. Что и говорить, это небо и земля :).
Но все же немного напрягает вот это вот самое: “я не хочу “лезть в политику”, но приходится учитывать”.
Пока пользуемся, а дальше видно будет.
Добрый день, статья отличная!
С Arduino IDE хотел как-то перейти на на Espressif-IDE, но как написано в одном из комментариев к этой теме, даже на примере “хелловорд” вываливается куча ошибок о том, что отсутсвуют инклюженые хедер-файлы…
1. Подскажите пожалуйста с чем это может быть связано?
2. Очень долго идёт процесс сборки.
—
За статью Respect!!!
Web-uri в закладки.
Александр, спасибо большое за статью!
единственное, не могли бы добавить в двух словах:
чем связка Arduino (CLI) + Visual studio code + Arduino extension хуже, чем Arduino + Visual studio code + Platformio ?
Не могу сказать, Arduino (CLI) + Visual studio code + Arduino extension я не пробовал.
Но если логически рассудить, то Platformio дает возможность работать и с платформой Arduino, и c ESP-IDF, по желанию.
А Arduino extension вам не оставляет выбора, по сути… Но если вы работаете только с платформой Arduino, то вам возможно это даже к лучшему
спасибо!
Поиском по сайту не нашел.
Можете кратенько рассказать причину написания функций esp_malloc и esp_calloc. По коду понятно, что если память выделить не удалось то производится попытка выделить еще раз после задержки. Ну и количество попыток ограничено.
Т.е. делаются попытки получить память в расчете на то что в какой то из задач она будет освообождена?
Да, была такая идея.
Я достаточно активно использую кучу, для генератора JSON например. И бывают моменты, когда много памяти занято, но через пару секунд она уже есть в наличии.
Но… Потом я от этого отказался. Решил проблему каким-то другим путем.