Здравствуйте, уважаемый читатель!
Для кого эта статья?
Она предназначена в первую очередь для тех, кто впервые столкнулся с ESP8266 и (или) ESP32 и хочет разобраться, с помощью каких инструментов их можно самостоятельно программировать. Не использовать чужие готовые прошивки (“залить готовую прошивку”), а именно научиться самостоятельно программировать ESP, то есть создавать свои собственные приложения для ESP.
Данная статья призвана помочь вам понять:
- на каком языке программирования можно программировать ESP8266 и ESP32
- что такое среда программирования, среда разработки, IDE и какие можно использоваться для ESP
- что такое framework или платформа, какие они бывают и чем это отличается от IDE и как связаны
После этого вы уже сможете сделать осознанный выбор – какую среду программирования вы будете использовать, какую платформу захотите предпочесть для ESP8266, а какую – для ESP32. И после этого вам могут быть полезны другие статьи на данном сайте. Но если вы всё это и так уже прекрасно знаете (сверьтесь с оглавлением ниже), либо вам нужен был материал на другую тему – вот вам список дополнительных материалов на данном сайте:
- ESP32 в вопросах и ответах ( FAQ ) - кратенько обо всём сразу
- Железо
- ESP32: чипы, модули, платы… - эта статья поможет вам разобраться, чем отличаются чип ESP32 от модуля и от платы, и немного разобраться с классификацией - какие они бывают и чем отличаются
- ESP32 pinout - здесь вы сможете понять, какие выводы ESP32 классической серии использовать можно, какие нет; а какие можно, но осторожно
- ESP32-S3 pinout - то же самое, но для серии ESP32-S3
- Программирование в Arduino IDE / Trema IDE
- Настройка Arduino IDE для работы с ESP32 - подготовка Arduino IDE к работе микроконтроллерами ESP32, выбор платы, настройка её параметров и разделов памяти
- Arduino ESP32 шаг за шагом. Телеметрия через WiFi и MQTT для чайников - подробный разбор как создать проект телеметрии на ESP32 - чем ESP32 кардинально отличается от ESP8266, какие могут быть варианты написания кода для каждого шага.
- Ещё статьи на тему Arduino
- Программирование в PlatformIO
- Переползаем с Arduino IDE на VSCode + PlatformIO - установка и первоначальная настройка VSCode и PlatformIO применительно к ESP32
- Телеметрия на ESP8266 + MQTT - пошаговое руководство по созданию DIY-проекта с удаленным управлением на ESP8266
- Еще статьи на тему PlatformIO
- Программирование в ESP-IDF
- Установка ESP-IDF с помощью ESP-IDF Installation Manager - установка и первоначальная настройка ESP-IDF на компьютер
- Подключение библиотек к проекту ESP-IDF - как подключить библиотеки к проекту, созданному для ESP-IDF
- Ещё статьи на тему ESP-IDF
Оглавление
Спойлер для тех, кто не желает читать всю эту писанину
Инструменты для разработки, терминология
Платформы (SDK) для микроконтроллеров серии ESP8266
- Arduino ESP8266 (Arduino core for ESP8266 WiFi chip)
- ESP8266 RTOS SDK
- ESP8266 Non-OS SDK
- MicroPython для ESP8266
- NodeMCU
Фреймворки для микроконтроллеров серии ESP32
- ESP-IDF vs Arduino Core: битва титанов
- ESP-IDF (Espressif IoT Development Framework)
- Arduino ESP32 (Arduino core for ESP32)
- MicroPython для ESP32
- NodeMCU
Какую же среду программирования (IDE) выбрать?
Спойлер для тех, кто не желает читать всю эту писанину
Если вы уже знакомы с терминами IDE, framework, API, SoC, toolchain и прочими, и вы только хотите выбрать для себя подходящий инструмент. то вам нет необходимости читать всю статью — достаточно ознакомиться с этим абзацем.
Для полноценного программирования ESP8266 и ESP32 в основном используется язык C / C++ с применением платформ Arduino или ESP-IDF, но также можно работать и с языками MicroPython, LUA, Rust и др. Список поддерживаемых языков постоянно расширяется. А использовать для этого можно много самых разных сред разработки: Arduino IDE, PlatformIO, Espressif IDE, Theia IDE, CLion, VisualGdb, ESPLorer и другие.
💠 ESP8266
├── Язык: C / C++
│ ├── Фреймворк: Arduino core for ESP8266 ← Простой, для обучения
│ │ ├── IDE: Arduino IDE 1 / 2 ← ⚠️ Сейчас не доступен из-за санкций
│ │ ├── IDE: Trema IDE 🇷🇺
│ │ └── IDE: VS Code + PlatformIO
│ ├── Фреймворк: ESP8266 Non-OS SDK ← Сложный, не рекомендуется
│ │ └── IDE: VS Code + PlatformIO
│ └── Фреймворк: ESP8266 RTOS SDK ← Сложный, не рекомендуется
│ └── IDE: VS Code + PlatformIO
│
├── Язык: MicroPython (Python 3)
│ └── IDE: ESPlorer
│
└── Язык: LUA (NodeMCU)
└── IDE: ESPlorer
💠 ESP32 (ESP32, ESP32-S, ESP32-C, ESP32-H и т.д.)
├── Язык: C / C++
│ ├── Фреймворк: Arduino core for ESP32 ← Простой, для обучения
│ │ ├── IDE: Arduino IDE 1 / 2 ← ⚠️ Сейчас не доступен из-за санкций
│ │ ├── IDE: Trema IDE 🇷🇺
│ │ ├── IDE: VS Code + PlatformIO
│ │ └── IDE: VS Code (Theia) + ESP-IDF Extension + Arduino as component ← Компромисс
│ │
│ └── Фреймворк: ESP-IDF ← Профессиональный выбор
│ ├── IDE: VS Code + ESP-IDF Extension ← Официальный вариант
│ ├── IDE: VS Code + PlatformIO
│ ├── IDE: Eclipse Theia IDE + ESP-IDF
│ ├── IDE: Eclipse CDT (Espressif IDE)
│ ├── IDE: CLion + ESP-IDF
│ └── IDE: Visual Studio + VisualGDB ← Платное расширение
│
├── Язык: MicroPython (Python 3)
│ └── IDE: ESPlorer
│
├── Язык: LUA (NodeMCU)
│ └── IDE: ESPlorer
│
├── Язык: Rust
│ ├── IDE: VS Code + espup
│ └── IDE: RustRover
│
└── Язык: Free Pascal ← Специфичный
└── IDE: Lazarus + FPCUPdeluxe
Шаг 1. Для начала необходимо определиться с тем, какой язык программирования вы будете использовать.
Шаг 2. Если вы выбрали язык C / C++ – определитесь с платформой (фреймворком)
- для ESP8266 основной платформой можно считать Arduino core for ESP8266, Другие варианты сложны и мало используются.
- для ESP32 – ESP-IDF или Arduino core for ESP32. Платформа Arduino core более простая в освоении, а ESP-IDF дает больше возможностей (но можно сочетать ESP-IDF + Arduino core).
Шаг 3. Исходя из выбранной платформы подберите подходящую IDE:
Arduino IDEподойдет вам, если вы хотите программировать ESP8266 или ESP32 с использованием Arduino core for ESP32. Прост, но не удобен. Кроме того, последние версии IDE не получится скачать и запустить без квн - доступ заблокировали новые владельцы платформы (Qualcomm). Но при желании можно использоватьTrema IDEвзамен.Visual Studio Code (или Theia)с плагиномESP-IDF v2можно использовать для работы с ESP32 с использованием ESP-IDF или ESP-IDF + Arduino core как компонент. Официальный инструмент от Espressif. Сложнее Arduino IDE, но несравненно удобнее.Visual Studio Codeс плагиномPlatformIOможно использовать для работы и с ESP8266 и с ESP32, и с любым фреймворком - Arduino core for ESP32 или ESP-IDF или ESP-IDF + Arduino core как компонент. Но относительно сложен в освоении.
Я советую второй или третий вариант, но Выбор за вами. А также вы можете воспользоваться схемой или таблицей ниже:
В статье ниже можно найти некоторые аргументы, почему следует выбрать тот или иной инструмент. Читать или не читать — вот в чем вопрос!
Готовые прошивки
Прежде чем мы перейдем к обсуждению тонкостей программирования, я хотел бы небольшое лирическое отступление. Дело в том, что Вам совсем не обязательно учиться программировать, чтобы заставить эту хреновину работать. Существует довольно большое множество готовых прошивок, когда-то и кем-то уже написанных, и очень даже популярных. От Вас потребуется только выполнить необходимые для решения ваших задач настройки.
Данная статья совсем не о готовых прошивках, но присмотритесь к списку, возможно это именно то, что Вы искали (приведенный список явно не полный и служит только для предварительного ознакомления):
- 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 на данном сайте считаю исчерпанной полностью, совесть моя чиста, и мы возвращаемся к основной теме статьи.
Инструменты для разработки, терминология
Для тех, кто впервые сталкивается с программированием, давайте чуть-чуть остановимся на необходимых терминах и инструментах для программирования. Для знакомых с программированием МК эту главу можно смело пропустить.
Любые инструменты для программирования ESP можно разбить на несколько составных частей:
- Среда разработки (программирования) или IDE – собственно редактор программ, в котором вы будете писать скетчи или приложения на человеко-читаемом языке (для ESP это обычно Си / Си ++, но могут быть варианты). По сути это специализированный текстовый редактор (особенно в случае с Arduino IDE).
- Компилятор (он же builder, система сборки, tools, toolchain) – набор инструментов, которые переведут ваш скетч (код) на человеко-читаемом языке в машинные коды, пригодные для выполнения на целевом микроконтроллере. Как правило процесс компиляции интегрируется в интерфейс IDE и вы запускаете её специальной кнопкой или командой “Compile” или “Upload”.
- Freamework / платформа / SDK – набор системных библиотек (API), довольно жестко привязанных производителем к используемому вами контроллеру. Сюда входят все необходимые библиотеки и API для работы с выводами, таймерами, сетевыми интерфейсами и т.д. и т.п.
То есть в общем случае Среда программирования (IDE) != платформа, хотя они иногда имеют одно и то же название. Например: Arduino – это не только IDE, но и фреймворк (платформа). А ESP-IDF это и фреймворк, и плагин VSCode (IDE) – две разные сущности с одним и тем же названием – смотрите не перепутайте!
Если говорить очень упрощенно (да и не совсем правильно), то для того, чтобы построить дом, вам потребуются: чертеж дома (ваш исходный код), компилятор (бригада строителей) и кирпичи и иные стройматериалы (фреймворк, платформа). Об них и проговорим ниже.
Конечно же, существуют и альтернативные варианты “визуального”, “блочного” или модульного программирования ESP32 (то есть без написания кода), но описания таких систем в данной статье нет.
Среда программирования / IDE
Для того, чтобы писать код, нужен основной инструмент программиста – редактор кода (или какой-либо другой инструмент для программирования). Чаще всего их называют средой программирования или IDE (что расшифровывается как Integrated Development Environment — интегрированная среда разработки) — это программное приложение, которое позволяет разработчикам писать, отлаживать и тестировать код, используя при этом один или сразу несколько языков программирования. IDE, как правило, включает в себя собственно редактор кода, компилятор и, возможно, отладчик (что упрощает процесс разработки программного обеспечения). В принципе, в некоторых языках программирования можно легко и блокнотом обойтись, но для микроконтроллеров это не катит.
IDE могут быть рассчитаны на работу как с одним определенным семейством микроконтроллеров (например: Atmel AVR Studio, CubeIDE, Espressif IDE и т.д.), так и одновременно с самыми разными языками и микроконтроллерами (например: ArduinoIDE, Visual Studio Code и т.д.). Первую группу IDE назовем специализированными, ну а вторую группу IDE вполне можно называть универсальными.
Компилятор, builder
IDE сама по себе не может “заставить” микроконтроллер работать. Процессор не человек, он не понимает слов, он понимает “машинный код” – только свои команды, определенные инженерами на этапе его создания. Для того, чтобы перевести ваш текст, написанный на том или ином языке программирования (исходный код), в понятный процессору двоичный код нужен компилятор или иногда интерпретатор:
- Компилятор (англ. compiler – составитель, собиратель) читает всю программу целиком, делает ее перевод в машинный код и создает законченный вариант программы на машинном языке, который затем загружается в микроконтроллер и выполняется. При каждом новом запуске программы всегда выполняется уже ранее скомпилированный вариант программы.
- Интерпретатор (англ. interpreter – истолкователь, устный переводчик) переводит и выполняет программу строка за строкой. В этом случае при каждом запуске программы интерпретатор заново преобразует ваши строчки в машинный код и исполняет их. Очевидно, что для этого требуется гораздо больше времени и усилий, поэтому на микроконтроллерах применяется редко (а на больших и мощных контуперах – легко, особенно в скриптовых языках программирования).
Процесс перевода человеко-читаемого исходного кода программы (поэтому их ещё часто называют “исходники” или “sources“) называется “компиляцией” или иногда “сборкой” программы. В английском варианте это могут быть “compile” или “build“. Примечание автора: здесь я пошел на сознательное нарушение истины, так как процессы компиляции и сборки несколько отличаются друг от друга – но в контексте данной статьи нам эти отличия не важны; но важно то, что в разных IDE вы можете встретить и то и другое, и это будет примерно одно и то же.
Конкретно для ESP32 и ESP8266 и языков Си / Си++ используется система сборки на основе компилятора CMake (так называемый toolchain) в том числе и для Arduino IDE (но для MicroPython и LUA можно использовать и интерпретатор). Основным инструментом в этом toolchain является специальный скрипт idf.py – с помощью него запускаются все процессы компиляции и загрузки прошивки в МК. Более подробно про систему сборки ESP32 вы можете узнать из перевода официальной документации “Система сборки ESP-IDF“.
Прошивка
Что ж, допустим исходный код мы успешно (без ошибок) скомпилировали в двоичный файл-образ, теперь нам нужно загрузить его в микроконтроллер и заставить выполняться. Для загрузки скомпилированной программы в память чипа на разных микроконтроллерах могут применяться либо специальные аппаратные программаторы, либо программный загрузчик (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, которые вы не можете использовать в своих проектах для чего-то иного. Поэтому говоря про энергонезависимую постоянную память в случае 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
Как правило, только одного редактора (IDE) и компилятора ещё не достаточно для того, чтобы вот так “взять и начать программировать”. Ну то есть можно, но ничего не заработает. Нужен набор неких “системных” библиотек и функций, который предоставит вам базовый функционал, из которого вы начнете строить свою прошивку. Эта часть необходимого инструментария называется либо framework (платформа для разработки приложений), либо SDK (software development kit — набор для разработки программного обеспечения).
Конечно, смешивать понятия SDK и framework – не совсем правильно с академической точки зрения, но в данной статье я буду использовать термины framework, платформа и SDK как взаимозаменяемые. Во первых, китайцы сами не определись, где у них что используется – по сути одно и тоже у ESP8266 это SDK, а у ESP32 – framework. Ну или ещё: фреймворк Arduino ESP32 вполне себе тянет на гордое звание framework; а вот ESP-IDF, лично на мой взгляд, больше похоже на SDK или набор API (так как программисту придется потрудиться гораздо больше), а между тем китайцы и его именуют фреймворком. А во вторых – ну просто для лучшей читаемости текста (это модное словечко framework хрен выговоришь, и SDK мне больше нравится) – примечание автора, панамку приготовил.
Иногда framework можно разделить на несколько разных API (application programming interface), то есть наборов функций или классов на определенную тематику. Даже если вам, кажется, что вы ничего дополнительно не устанавливали в свою IDE, то это совсем не значит, что ни одного фреймворка или SDK там уже не было до вас.
SDK предоставляет вам как программисту такие функции, как:
- как настроить ножку в нужный режим
- как дергать ножкой или читать её состояние
- как отправить пару байт другу по той или иной шине
- как подключить SoC к сети WiFi
- и т.д. и т.п.
Разные SDK / фреймворки предоставляют вам разные языки программирования и разный уровень абстракции: например кирпичи (aka ESP-IDF) или монолитные панели “с завода” (aka Arduino core). Из панелей стоить быстро и удобно, никто не спорит, но что ни строй – всё равно выходит пятиэтажная хрущевка, жить в которой бывает не очень уютно. Из кирпичиков строить долго и нудно, но можно построить красивый и уютный особняк. И, кстати, никто не запрещает вам заранее “склеивать” кирпичи в панели нужной именно вам формы самостоятельно, и использовать в других проектах быстро и удобно.
Выбор между ESP8266 и ESP32
В начале хочу совсем чуть-чуть остановиться на том, какой лучше микроконтроллер приобрести – ES8266 и его модификации или ESP32 любой серии. Если у вас стоит такой выбор – советую вам остановиться именно на ESP32. И совсем не потому, что он более “мощный” – в серии ESP32 есть семейство ESP32-Cx, которое примерно сравнимо по “мощности” с ESP8266. Дело в том, что на мой взгляд ESP8266 получился у Espressif как тот первый блин – немного комом.
- Во-первых – у него очень мало GPIO, которые можно использовать в проектах. Допустим у вас есть только одно реле, которым нужно управлять тыкая пальчиком в кнопочку на телефоне – тогда он вполне подойдет. Но уже при попытке подключения разных сенсоров и дополнительного навесного оборудования могут начаться проблемы с нехваткой выводов.
- Во-вторых – у ESP8266 очень маленькая свободная куча ( heap ), так что даже на два одновременных TLS соединения её не хватает.
- В-третьих – мои экземпляры ESP8266, увы, оказались катастрофически не надежны, хотя были куплены в разное время у разных продавцов на Ali. Почти все устройства, которые были когда-то собраны мной на этом микроконтроллере (несколько “поливаек” и контроллер вентиляции погреба) – сдохли спустя достаточно непродолжительное время (от месяца до пары лет непрерывной работы), в то время как ESP32 “продолжают работать, работать и работать…”. Возможно, на это повлиял “ретроградный меркурий” и “так сошлись звезды” дабы я имел дополнительный стимул двигаться вперед, но ESP8266 я больше не покупаю, а оставшиеся модули и платы использую только “для опытов”.
Лично для меня это достаточные основания для отказа от дальнейшей эксплуатации в реальных проектах. А по цене они не сильно различаются. Ну а мы переходим к SDK и фреймворкам.
Платформы (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++
Достоинства:
- Только этот SDK доступен из привычной и простой Arduino IDE (а многие начинающие программисты не хотят переходить на сравнительно сложный PlatformIO). Даже уважаемый Alex Gyver рекомендовал своим читателям использовать старый добрый Arduino IDE вместо современного PlatformIO (впрочем, я его отлично понимаю, почему он так сделал). Но, при необходимости, Core отлично интегрируется не только с Arduino IDE, но и с PlatformIO, что упрощает управление сложными проектами, библиотеками и зависимостями.
- Простота и доступность. Главное преимущество — это знакомый многим и простой API Arduino. Он позволяет начинающим разработчикам быстро начать работу с ESP8266, не вникая в сложности программирования микроконтроллеров на уровне SDK. Кроме того, это значительно ускоряет разработку прототипов даже для опытных программистов.
- Богатая экосистема и совместимость. Arduino Core поддерживает огромное количество библиотек, написанных для экосистемы Arduino. Это позволяет легко подключать различные датчики, дисплеи и другие периферийные устройства. Язык “скетчей” также совместим с MicroPython, что дает дополнительную гибкость.
- Встроенные возможности для интернета вещей. Core предоставляет готовые библиотеки для работы с Wi-Fi (TCP, UDP), создания HTTP-серверов, реализации mDNS, SSDP, DNS-серверов и выполнения OTA-обновлений (обновление прошивки “по воздуху”). Это делает его идеальным выбором для не очень сложных IoT-проектов.
- Огромное количество примеров в сети – простых и не очень. Но будьте осторожны – иногда встречаются явно “кривые” примеры. Большое сообщество.
Недостатки:
- Меньший контроль и производительность. В отличие от работы напрямую с Espressif SDK (nonOS или freeRTOS), Arduino Core является надстройкой, которая скрывает многие детали реализации. Это приводит к определенным накладным расходам и меньшему контролю над ресурсами микроконтроллера, что может быть критично для проектов, требующих максимальной производительности или работы в реальном времени. С одной стороны, это упрощает жизнь, с другой — вы можете не понимать, почему что-то работает не так, и не сможете тонко настроить поведение устройства. Это также часто приводит к нестабильной работе в сложных проектах.
- Сложность с продвинутыми функциями. Использование некоторых специфических функций ESP8266, таких как глубокая настройка энергопотребления, работа с прерываниями на низком уровне или прямое управление периферией, через Arduino Core может быть затруднено или потребует написания низкоуровневого кода вставками на C.
- Размер и производительность. За удобство приходится платить. Код на Arduino Core получается больше, а выполняется медленнее, чем при использовании официального SDK. Например, простое переключение пина на частоте 80 МГц занимает около 1.8 мкс в Arduino против 0.7 мкс в SDK. Для простого мигания светодиодом может потребоваться более 200 КБ flash-памяти, что критично для больших проектов с жесткими ограничениями по ресурсам.
- Потенциальные проблемы с таймингом и стабильностью. Поскольку Core управляет внутренним планировщиком задач, в некоторых сложных сценариях (например, при интенсивной работе с Wi-Fi и периферией одновременно) могут возникать проблемы с таймингом или стабильностью, которые проще контролировать при работе с freeRTOS.
Знаете что побудило меня отказаться от arduino несколько лет назад в качестве первой причины? Дело в том, что устройство в гараже постоянно перегружалось из-за переполнения стека. Код там был проще пареной репы – подключаемся к wifi и mqtt, меняем влажность, включаем реле. Но уровень сигнала там был очень слабый – минус 75 dBi и хуже. Как я выяснил, устройство постоянно подключалось и отключалось от WiFi, причем иногда рабочий цикл подключения не завершался полностью, а уже происходило отключение, и “что-то шло не так…”. Все это приводило к сбоям и перезагрузкам. А на стандартные библиотеки Core я как бы особо повлиять и не могу.
Между тем устройства на базе ESP32 с самописным алгоритмом (который “неоправданно сложен и раздут”, по мнению некоторых комментариев Дзена) – работают в тех же самых условиях стабильно долгое время без сбоев и перезагрузок. Нет, я хорошо понимаю, что в нормальных условиях правильно написанный код на Arduino работает достаточно стабильно. Но лично мне этого не всегда бывает достаточно. Да и ошибки в сторонних библиотеках никто не отменял (а повлиять на их оперативное исправление я не могу) – поэтому я предпочитаю писать свои. Но я поступил кардинально – отказался от ESP8266 вообще.
Выводы
- Если у Вас есть ESP8266 (ESP-01, ESP-07, ESP-12 и т.д.), вы начинающий программист, и вам необходимо заставить её работать – то это Ваш выбор.
- Вам нужно “по быстрому” собрать прототип или устройство “за 5 минут”, решающее какую-то мелкую задачу – то это Ваш выбор.
ESP8266 RTOS SDK
ESP8266 RTOS SDK – это официальный SDK, в основе которого лежит операционная система реального времени FreeRTOS. По сути такая же, как и на “взрослых” ESP32.
Поддерживаемые IDE: PlatformIO, Espressif IDE (на базе Eclipse CDT), VSCode + ESP8266-IDFИспользуемый язык программирования:
С/C++
Достоинства:
- Поддержка многозадачности. Позволяет писать сложные программы, где разные задачи (например, обработка Wi-Fi и чтение с датчика) выполняются независимо и параллельно.
- Современная разработка. Именно этот SDK рекомендуется Espressif для всех новых проектов. Его архитектура унифицирована с SDK для ESP32, что облегчает миграцию между платформами.
Недостатки:
- Высокая сложность. Требует понимания принципов работы ОСРВ (мьютексы, очереди, задачи) и большого объема знаний о самом микроконтроллере.
- Это среда для профессионалов, требующая ручной установки инструментов и понимания процессов сборки. В основе проекта всегда лежит работа из командной строки: конфигурация через
make menuconfigи сборка черезmake. IDE лишь добавляет к этому графическую оболочку для написания кода.
Документацию по данному SDK вы можете получить здесь.
ESP8266 Non-OS SDK
ESP8266 Non-OS SDK – это более ранняя версия SDK, работающая без операционной системы. В настоящее время считается устаревшим.
Поддерживаемые IDE: PlatformIOИспользуемый язык программирования:
С/C++
Достоинства:
- Простота (относительная). Программа пишется в стиле “суперцикла”, где все задачи выполняются последовательно в бесконечном цикле. Ну примерно как в Arduino, только с доступом к более низкоуровневым API.
Недостатки:
- Устаревший. В настоящее время считается устаревшим. Espressif не рекомендует его для новых проектов, хотя он все еще может использоваться для поддержки старого кода. Вместо него предлагается использовать ESP8266 RTOS SDK.
Данный SDK доступен только в PlatformIO, и достаточно давно не развивается. Документация по данному SDK есть только в PlatformIO, как собственно и сам SDK. Espressif предоставляет документацию в виде PDF-файла.
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, разработанные сообществом или сторонними производителями. Но поскольку я с ними лично не сталкивался, то сказать мне о них нечего. Но мы на этом закончим и переходим к ESP32.
Фреймворки для микроконтроллеров серии ESP32
Для программирования микроконтроллеров из серий ESP32, ESP32-Cx и ESP32-Sx и т.д. также вполне можно использовать несколько разных SDK и фреймворков и даже разных языков программирования. Но начну я с сравнительно сложного ESP-IDF, а не с самого популярного Arduino32, и далее будет понятно почему.
Обратите внимание: я пока почти не касаюсь используемых IDE, а рассматриваю только языки программирования и фреймворки. Просто потому что один и тот же SDK вполне можно использовать в разных IDE. Сами IDE рассмотрим ниже.
ESP-IDF vs Arduino Core: битва титанов
Это два самых популярных подхода. Здесь важно понимать, что Arduino Core для ESP32 — это не отдельный зверь, а надстройка над ESP-IDF. Он скрывает под капотом всю сложность ESP-IDF, но и одновременно ограничивает ваши возможности. Ну а вы сами должны выбрать, что вам важнее – простота разработки приложения или скорость его работы и функциональные возможности.
Простой ориентир:
- Выберите Arduino Core, если хотите быстро заставить работать какой-то датчик или сделать прототип устройства для дома.
- Выберите ESP-IDF, если вы создаете коммерческое устройство или проект, где стабильность работы и ресурсы критичны.
ESP-IDF (Espressif IoT Development Framework)
ISP-IDF – официальный native (что переводится как “родной”) framework от производителя чипов Espressif. То есть ESP-IDF является базовым SDK для всех чипов ESP32, а также он является основой для других фреймворков и языков программирования (примечание автора: возвращаясь к строительной теме – это и есть те самые “кирпичи”).
Поддерживаемые IDE: Espressif IDE, VSCode+PlatformIO, VSCode+ESP-IDF, CLion, Theia IDE+ESP-IDF, VisualStudio+VisualGDB.
Используемый язык программирования: С/C++. То есть вроде бы язык тот же самый, что и в Arduino IDE, но есть нюансы…
ESP-IDF – это официальный флагманский SDK от Espressif. Он дает вам полный, абсолютный контроль над железом, всей его периферией (вплоть до ULP-сопроцессора), памятью и настройками платформы через menuconfig. Он целиком и полностью основан на операционной системе реального времени FreeRTOS, но кроме этого он содержит и массу “фирменных” штучек (API), которые необходимы для работы с “железом” и различными протоколами. Поэтому, кроме собственно знания C / C++, от вас потребуется хорошее понимание многопоточности (multithreading) и всяких там специальных RTOS-ских фишек типа задач, очередей, мьютексов и т.д. Если вы, как и я, пришли в мир микроконтроллеров с “больших” компьютеров и хорошо знакомы с multithreading-ом, то вам будет не сложно освоить всё это.
Теперь давайте рассмотрим плюсы и минусы этой платформы.
Достоинства:
- Максимальная производительность (скорость загрузки в 2 раза быстрее, бинарник в 3-4 раза меньше, чем у Arduino). Используя ESP-IDF, вы автоматически исключаете из кода ненужный балласт в виде Arduino-вского кода, поскольку Arduino32 – это по сути “обертка” вокруг ESP-IDF
- Полный доступ ко всем аппаратным возможностям и функциям FreeRTOS, лучшее управление памятью, поддержка всех официальных фич SoC. 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, который отпугивал новичков раньше – отсутствие библиотек драйверов для конкретных внешних сенсоров и устройств. Ноесли есть в кармане пачка сигарет, тоне все так плохо на сегодняшний день – на сегодняшний момент в Espressif всерьез взялись за эту тему. Сейчас в реестре компонентов ESP-IDF [components.espressif.com] вы можете найти драйверы для большинства популярных сенсоров, дисплеев и устройств. Так что этот недостаток не считаем актуальным.- Операционная система реального времени. Необходимость постоянно и всегда “держать в голове”, что мы работаем не с линейным кодом, а c многопоточным и асинхронным! То есть многопоточность должна быть постоянно – что называется “у вас в крови”. Для новичков в программировании это сложно, особенно после прямолинейных
как ломпринципов Arduino. - Крутая кривая обучения, сложная настройка. Нужно разбираться в CMake, SdkConfig, FreeRTOS и тонкостях архитектуры, изучать более низкоуровневые (чем в Arduino) API и функции.
Многие стандартные для Arduino32 стандартные макро-функции вродеWiFi.begin(wifiSSID, wifiPASS);вам придется подробно и детально написать самому – с использованием соответствующих API, callback-ов и асинхронного кода “по событиям” (на мой лично взгляд – это прост о отлично, так как позволяет изменить логику управления по необходимости). Но, на текущий момент для некоторых API можно найти удобные компоненты – обертки по типу ардуиновских в реестре компонентов на components.espressif.com. - Небольшое сообщество. Ресурсов и литературы, посвященных ESP-IDF, особенно на русском языке, много меньше, чем для Arduino. Во многом придется разбираться по официальной документации, а не по сторонним простым примерам.
Здесь стоит немного поподробнее остановиться на собственно процессе компиляции приложений для ESP-IDF (а значит и для Arduino32, так как он является производным от ESP-IDF). Основой всего служит кроссплатформенная система сборки CMake. Для адаптации данной системы сборки к чипам ESP32 в Espressif был создан так называемый toolchain, что по-русски означает “набор инструментов”, а по сути – набор разнообразных скриптов и исполняемых файлов на python, которые и выполняют всю основную работу по компиляции, сборке и загрузке приложений на flash-память. Рисунок из справочной системы Espressif отлично иллюстрирует сей процесс:
На картинке выше Project означает ваш проект, а Appliaction – скомпилированный двоичный файл прошивки, загружаемый в чип. Забегая вперед скажу, что совсем не обязательно подключать ESP32 для прошивки проводом, можно сделать это и “по воздуху”, об этом я как-то писал другую статью.
Arduino ESP32 (ESP32 Arduino Core)
Второй официальный framework от Espressif (другие названия: Arduino Core for ESP32 или просто 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++
Несмотря на то, что Arduino IDE, на которую нацелен этот SDK, условно “однопоточная”, но вам всё равно остаются доступны почти все функции FreeRTOS – задачи, очереди и т.д. Но вот доступ к некоторым “фирменным” API, которые предоставляет ESP-IDF, вы потеряете. И ещё один неочевидный минус этого SDK – вы потеряете в “гибкости” настройки кода вашей программы – “панели на заводе выпускаются только для типовых проектов“. Зато в комплекте с Arduino core вы автоматически получаете доступ к огромному количеству сторонних библиотек, написанных кем-то и когда-то – это неоспоримый плюс Arduino-сообщества.
Достоинства:
- Простота освоения программирования. Простые и понятные универсальные (для многих контроллеров) методы для стандартных функций – дергание ножкой, подключение к WiFi и т.д. А если вы уже ранее освоили программирование в Arduino какого-нибудь другого МК, то перейти на ESP32 вообще почти не составит труда.
- Огромный массив сторонних библиотек на все случаи жизни, как в каталоге Arduino IDE, так и на GitHub-е. Библиотеки эти иногда достаточно качественные и проверенные, иногда “не очень” (например лично я находил ошибки в библиотеках именитых брендов вроде Arafruit, когда делал с них свои версии драйверов сенсоров), иногда их приходится адаптировать под ESP32, но тем не менее они есть. И их много – на любой вкус.
Недостатки:
- Меньше контроля. Невозможность сконфигурировать проект cmake стандартными средствами через sdkconfig
- Меньшая производительность и больший размер кода, более медленная загрузка программы.
- Ограниченность в выборе разметок памяти. Выбор разметок flash-памяти возможен только из заранее предустановленного производителем списка (на мой взгляд не очень оптимальных).
- Стандартный ino-скетч для ESP32 – это всего лишь обычная задача FreeRTOS с 8192 байт стека – посмотрите функцию app_main для данного SDK. Хотя вам никто не мешает создавать свои параллельные задачи.
- Вы теряете доступ к некоторым SDK API, доступным только ESP-IDF.
MicroPython для ESP32
Скорость разработки против скорости выполнения. Это самый популярный высокоуровневый выбор – python прост и понятен, имеет огромное сообщество. Это адаптация популярного языка программирования Python 3, оптимизированная для работы на микроконтроллерах серии ESP32. Нас в данном случае интересует версия для ESP32. MicroPython — это выбор скорости разработки. Если вы хорошо знакомы с python, вам нужно быстро “склеить” проект из готовых кусков и производительность не критична от слова “совсем” – он идеален.
Поддерживаемые IDE: ESPlorer
Используемый язык программирования: Python 3 (несколько урезанная версия).
Вначале Вам необходимо загрузить в чип (точнее flash-память) интерпретатор MycroPython в виде уже готового к загрузке bin-файла. И только после установки прошивки c интерпретатором MycroPython на устройство вы можете получить доступ к REPL (командная строка Python) через стандартный UART0. Созданные микропрограммы сохраняются на flash в виде файлов для повторного использования.
Достоинства:
- Очень быстрое прототипирование, REPL (интерактивная консоль) для отладки, богатая экосистема библиотек.
Недостатки:
- Значительно медленнее скомпилированного кода на C/C++ или Rust. Потребляет гораздо больше памяти, что может быть критично для маленького ESP32 по сравнению с обычным ПК.
- Отсутствие драйверов для большинства сенсоров и периферийных устройств. Но базовые 1-Wire и DHT таки имеются.
Ранее в 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 находится в стадии разработки.
.Достоинства:
-
Очень легкий по сравнению с MicroPython, позволяет писать код с более низким потреблением ресурсов и с асинхронным подходом.
Минусы
- Менее популярен, чем MicroPython, его экосистема заметно скромнее.
- Большее по сравнению с ESP-IDF потребление ресурсов. Хоть он и экономичнее чем MicroPython, но таки для сложных задач вроде BLE его возможностей может не хватить.
Лично я с сомнением отношусь к таким вариантам написания программного кода, но как говорится – “если вы не любите кошек, значит вы просто не умеете их готовить“.
Какую же среду программирования выбрать?
С тем, какой фреймворк или SDK выбрать для разработки, думаю, вы определились. Наверное не сильно ошибусь, если скажу, что большинство на начальном этапе выберет все-таки соответствующую чипу редакцию Arduino. Ну а потом когда-нибудь, если карта ляжет, можно и на что-то более “тонкое” перейти попробовать. Что ж, давайте подберем к выбранному SDK соответствующий редактор кода – на мой взгляд нужно делать именно так, а не наоборот.
Давайте рассмотрим самые популярные варианты редакторов кода:
Arduino IDE– условно “полноценная” среда разработки, в которой вы сможете использовать фреймворкиArduino core for ESP8266и (или)Arduino core for ESP32, а также множество других совместимых платформ и микроконтроллеров. Я не случайно написал “полноценная” в кавычках, так как Arduino IDE первого поколения это не среда программирования, а блокнот-переросток к прилепленным к нему списком библиотек и компилятором. Ни о каком автодополнении кода и подсказках здесь и речи не идет.ESP IDEилиEspressif IDE– официальная специализированная среда разработки от производителя чипов Espressif, в которой можно использовать только фреймворкESP-IDF(на самом деле уже нет – можно использовать режим Arduno as component). Имеет два варианта исполнения: расширение для Visual Studio Code / Theia IDE или “самостоятельная программа” Espressif IDE (на самом деле это тот же плагин, но с уже интегрированным “внутри” Eclipse CDT). Не самый сложный вариант (если сравнивать с PlatformIO). В версии 2.x имеет хорошо продуманный и удобный интерфейс, а также появилась возможность писать код и дляArduino core for ESP32, используя режим Arduno as component.PlatformIO IDE– расширение для Visual Studio Code, который позволяет работать с множеством платформ:Arduino core for ESP8266,Arduino core for 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 не будет ни сейчас ни в дальнейшем. Да и без меня все уже подробно описано.
Конечно же, вполне вероятно существуют и другие варианты, например различные варианты для “визуального” и “блочного” программирования. Но в рамках данной статьи они не рассматриваются.
Так какие будут варианты?
- Если вы желаете разрабатывать программы под Arduino фреймворки – то ваш выбор либо Arduino IDE 2.х, либо PlatformIO.
- Однако, если вам нужен только ESP32, то я рекомендую попробовать связку ESP-IDF + Arduino as component.
- Если вы планируете вести разработку под ESP-IDF и ESP32 – то у вас, в принципе, может быть два варианта:
- Если будет использоваться только ESP-IDF (или ESP-IDF + Arduino as component) – вы можете использовать либо PlatformIO, либо VSCode + ESP-IDF, либо Theia IDE + ESP-IDF, либо CLion
- Если вам требуется писать код под разные чипы и SDK – то на выбор у вас остается PlatformIO или VisualGDB
- Если вы планируете вести разработку под ESP8266…SDK – опять же это возможно только из PlatformIO и VSCode
Разумеется, никто не запрещает вам поставить несколько IDE одновременно и пользоваться ими по необходимости. Тем более, что и Visual Studio Code , Theia, и Eclipse IDE позволяют одновременную установку нескольких плагинов – для разных целей разные плагины.
Если Вас интересует мое личное мнение (но это только мое мнение и я никому его не навязываю):
- Для ESP8266 я использую фреймворк Arduino с использованием PlatformIO – так как нет других “адекватных” фреймворков с готовыми библиотеками
- Для ESP32 я использую исключительно ESP-IDF, так как не желаю упираться в ограничения платформы Arduino. Пусть и ценой более сложного кода.
Старые проекты под ESP32 написаны для ESP-IDF, но в VSCode + PlatformIO, так как это позволяло мне использовать множество платформ в одном и том же привычном интерфейсе. Но новые проекты созданы уже в VSCode + ESP-IDE, что безусловно, также заслуживает пристального внимания, особенно в свете текущей политической ситуации (PlatformIO это проект разработчиков из соседнего государства, и они вполне могут прикрыть к нему доступ в любой момент).
Ну а теперь рассмотрим эти варианты более детально. Пробовать компилировать я буду опубликованный ранее пример для ESP8266, другого просто нет под рукой.
Arduino IDE
Широко известная среда разработки программного обеспечения от итальянских разработчиков.
В конце 2025 года бренд Arduino и все связанные с ним ресурсы (сайт, программы, сервер загрузок и т.д.) были куплены компанией Qualcomm, после чего последняя распространила свою политику доступа на эти ресурсы. В связи с этим 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 (не обязательно для микроконтроллеров). Причина понятна – в ней напрочь отсутствуют привычные в современных редакторах кода функции: IntelliSence, вменяемая подсветка синтаксиса, детекция ошибок “на лету” (до компиляции) и т.д.
Достоинства
- Простой интерфейс облегчает освоение программирования (не пугает начинающих сложными меню и обилием кнопок)
- В меню присутствуют ссылки на примеры (что опять же немаловажно для быстрого освоения начинающими)
- Простой и удобный менеджер библиотек (хотя довольно тормозной и не всегда понятно какую же библиотеку нужно ставить из предложенного списка)
- Простой и удобный менеджер плат, в котором вы легко и интуитивно можете выбрать необходимую версию рабочей платформы.
- Хорошо русифицированный интерфейс (хотя это может быть “медвежьей услугой” – если вы захотите потом перейти на другую IDE, придется заново осваивать команды, так как другие IDE не русифицированы)
Недостатки
- Отсутствие выбора платформы разработки: вы можете использовать только SDK Arduino8266 или Arduino32. ESP-IDF уже не применимо в данном случае.
- Отсутствие возможности работать с отладчиками плат, отладчик в Arduino IDE 1.0 вообще отсутствует как понятие.
- Подсветка синтаксиса работает только для встроенных функций и типов данных, для пользовательских функций она не работает (см. скриншот)
- Отсутствует возможность быстрого перехода к объявлению переменной (константе) или функции по имени
- Очень не удобный вывод ошибок при компиляции проекта – вам придется изрядно потрудится иногда, чтобы докопаться до истиной причины, почему вам скетч не компилируется
- Нет автодополнения кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор)
- Нет проверки на ошибки в коде “на лету” – то есть по мере ввода текста пользователем, до запуска процесса проверки / компиляции
- Организация папки проекта? – пффф, а это это? При выборе другого проекта придется заново настраивать плату и её параметры.
- Про сборку проекта одновременно для нескольких плат / микроконтроллеров даже говорить не приходится
- В настройках платы небольшой выбор разметок flash-памяти, а добавить кастомную разметку можно только путем танцев с бубном.
- В списке плат можно выбрать только промышленно выпускаемые платы, да и то не все, что есть на ali, например.
- Не удобно работать с много-файловыми проектами, и в этом случае очень не просто управлять сборкой проекта посредством управляющих макросов препроцессора (
#define BLA_BLA_BLA_ENABLED 1). - Долгая компиляция проекта. Похоже при каждой сборке компилируются все файлы проекта заново, в том числе и библиотеки.
Arduino IDE 2
Страница проекта: www.arduino.cc
Ссылка для скачивания: downloads.arduino.cc/arduino-ide_2.2.1_Windows_64bit.exe
Разумеется, разработчики экосистемы Arduino прекрасно знают о недостатках своей IDE первого поколения. Прогресс не стоит на месте, и они постарались учесть некоторые из них в Arduino среде программирования второго поколения, которая стала доступна для скачивания относительно недавно (точно не вспомню, но что-то около года-двух назад от даты написания первой редакции данной статьи, впрочем это не важно – прим.авт.). Что можно сказать об новой версии?
Arduino IDE 2.0 стала гораздо лучше и удобнее! Однозначно! Теперь Arduino IDE приобрела некоторые черты современных систем разработки программного обеспечения.
Что нового?
- Сразу бросается в глаза явный закос интерфейса под Visual Studio Code, по крайней мере оформление отдельных частей интерфейса мне очень напоминает последний. Это логично – создана она на базе той же Electron, что и Theia и VSCode.
- Появилась левая панель – на ней расположены список каталогов, обновленный менеджер плат, менеджер библиотек, отладчик и панель поиска
- Более удобный и быстрый менеджер библиотек (и плат).
- Появилась полноценная подсветка синтаксиса – теперь выделение цветом работает не только для системных функций
- Появилась возможность быстрого перехода к определению переменной или функции – см. скриншот
- Появилась возможность переименовать символ (например переменную или функцию) с заменой всех её вхождений к вашем коде
Что ж, недурно, весьма недурно! Так что если вы собираетесь программировать свои микроконтроллеры исключительно с применением фреймворков Arduino, можно смело рекомендовать использовать данную IDE. Итак, для формальности составим списки плюсов и минусов (хотя лично я плотно не работал с данное IDE и что-то могу упустить).
Достоинства (оставим все те же, ничего не усложнилось)
- Простой интерфейс облегчает освоение программирования (не пугает начинающих сложными меню и обилием кнопок)
- В меню присутствуют ссылки на примеры (что опять же немаловажно для быстрого освоения начинающими)
- Простой и удобный менеджер библиотек (хотя довольно тормозной и не всегда понятно какую же библиотеку нужно ставить из предложенного списка)
- Простой и удобный менеджер плат, в котором вы легко и интуитивно можете выбрать необходимую версию рабочей платформы.
- Хорошо русифицированный интерфейс (хотя это может быть “медвежьей услугой” – если вы захотите потом перейти на другую IDE, придется заново осваивать команды, так как другие IDE не русифицированы)
Недостатки
- Отсутствие выбора платформы разработки: вы можете использовать только SDK Arduino8266 или Arduino32. ESP-IDF уже не применимо в данном случае.
- Нет автодополнения кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор). Для этого потребовалось бы создать подобие IntelliSence.
- При выборе другого проекта придется заново настраивать плату и её параметры
- Про сборку проекта одновременно для нескольких плат / микроконтроллеров даже говорить не приходится
- В настройках платы небольшой выбор разметок flash-памяти, но появилась возможность указывать разметку прямо в скетче (не пробовал!)
- В списке плат можно выбрать только промышленно выпускаемые платы, да и то не все, что есть на ali, например.
- Долгая компиляция проекта. Похоже при каждой сборке компилируются все файлы проекта заново, в том числе и библиотеки.
В итоге, выбор IDE зависит от требований проекта и опыта пользователя. Если вам нужна простая в использовании, но не очень удобная, среда для освоения программирования и небольшого проекта, Arduino IDE 2 может стать вашим выбором. Если же у Вас уже есть некоторый опыт и вам нужна более мощная и многофункциональная среда разработки для более крупного проекта, посмотрите в строну профессиональных IDE – Visual Studio Code, PlatformIO или Espressif IDE.
Связанные статьи
Espressif IDE
Страница проекта: esp32/get_started
Как установить: Установка ESP-IDF с помощью ESP-IDF Installation Manager
Espressif IDE – это не полностью самостоятельная среда разработки, а расширение (дополнение, плагин) к “чужим” редакторам кода на выбор: VSCode или Eclipse. Сейчас основным инструментом разработки под ESP-IDF официально считается расширение для VSCode, но начнем мы с версии Eclipse.
“Самостоятельная” Espressif IDE
Как установить: Установка ESP-IDF с помощью ESP-IDF Installation Manager
Специализированная IDE, которая построена на базе Escipse CDT. То есть получается, что в конечном итоге это всё равно тот же плагин, но с жестко интегрированным Eclipse CDT внутри. Что ж, вполне приемлемо. Её мы и рассмотрим в данном обзоре, очень кратко, разумеется.
Я не работал в данной IDE над серьезными и большими проектами, но сборка текстового проекта “из коробки” не потребовала от меня никаких дополнительных настроек – 1) установил, 2) импортировал тестовый пример в рабочую область, 3) скомпилировал. Разве что IntelliSence не заработал сразу – пришлось дополнительно установить все компоненты платформы. Пользовался я данной IDE совсем немного по времени, так что мои оценки могут быть весьма поверхностными.
Что можно сказать с первого взгляда? Не знаю почему, но китайский софт можно сразу же отличить по его внешнему виду, даже если интерфейс на английском. Интерфейс меня лично немного напрягает – обилие множества кнопок без подписей и в различных стилях оформления. Но это только мое личное мнение и в целом и общем вполне приемлемо.
Поскольку она создана только для ESP32 и ESP-IDF, то это теоретически дает и максимально возможную адаптацию интерфейса под чип. IntelliSence, или как-там оно называется в данной IDE, работает довольно шустро (заметно пошустрее чем VSCode), для доступа к исходным кодам самой ESP-IDF ничего настраивать не нужно, вот только почему-то макросы препроцессора плохо распознает. Но некоторые действия (например открытие исходного кода примеров) на мой взгляд не очень логичны.
Кликнув по файлу sdkconfig в дереве папок и файлов, откроется довольно удобный редактор конфигурации проекта:
Что, несомненно, очень удобно. Но лично я не нашел эту функцию, так как не догадался щелкнуть по файлу, а в главном меню IDE она отсутствует.
Достоинства
- “Родная” “полноценная” IDE от производителя чипов.
- Простой метод смены версии ESP-IDF для проекта прямо из UI без необходимости правки файлов конфигурации
- Встроенный навигатор по файлам и папкам проекта, причем в дерево автоматически “подтягиваются” включаемые файлы библиотек.
- Наглядный редактор конфигурации проекта SDK Configuration Editor
- Подсветка синтаксиса и ошибок “на лету”, причем работает достаточно шустро и стабильно.
- При повторной компиляции собираются только измененные файлы, поэтому повторные запуски происходят достаточно быстро
Недостатки
Отсутствие выбора платформы разработки: вы можете использовать только ESP-IDF. Но после того, как добавили режим “Arduino as component” – появилась возможность вести разработку и для Arduino core.- Нет автодополнения кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор)
- Отсутствие русского языка в интерфейсе (начинающим может быть сложновато).
Расширение Espressif IDE для Visual Studio Code или Theia IDE
Как установить: Установка ESP-IDF с помощью ESP-IDF Installation Manager
Кроме рассмотренной выше Espressif IDE, существует расширение ESP-IDE и для Visual Studio Code или Theia IDE. В настоящее время для ESP я пользуюсь в основном только этим инструментом. В последних версиях расширения многое сделано очень удобно и практично. Хотя плагин имеет оценку всего 3 звезды, но на мой взгляд это относится к первым версиям этого расширения. Китайцы проделали огромную работу над ошибками, и сейчас он заслуживает более высоких оценок.
Здесь отлично работает IntelliSence и автодополнение кода, но иногда может понадобится доработка напильником начальная настройка. Тестовый проект собрался сразу после установки на “чистом” компьютере без каких-либо проблем. А еще здесь доступен прикольный SDK Configuration Editor в виде “дерева” элементов – для тех кто любит графические UI, это будет отличным вариантом.
Достоинства
- Официальное расширение IDE от производителя чипов с богатым набором инструментов.
- Выбор версии ESP-IDF из списка установленных в три клика
- Наглядный и легко вызываемый SDK Configuration Editor – как в графическом, так и в текстовом виде
- Навигатор по файлам и папкам проекта, можно подключать любые папки в рабочую область
- Частично русифицированный интерфейс (но это заслуга русификатора Visual Studio Code)
- Подсветка синтаксиса и ошибок “на лету”, причем работает оно шустро и стабильно.
- Автодополнение кода (это когда вы начинаете вводить имя функции или переменной, а IDE предлагает варианты на выбор) – очень помогает в работе.
- При повторной компиляции собираются только измененные файлы, поэтому повторные запуски происходят достаточно быстро. Особенно под linux – работать одно удовольствие. Исключение – изменение конфигурации проекта, тогда перекомпилируется весь проект полностью, включая SDK.
Недостатки
Отсутствие выбора платформы разработки: вы можете использовать только ESP-IDF и ничего более. Updated: в новых версиях можно писать код для Arduino, используя режим “Arduino как компонент”.- Поначалу может быть довольно сложно разобраться, как создать проект, настроить IntelliSence и т.д.
А мы переходим к последнему номеру нашей программы. После антракта…
PlatformIO
Страница проекта: platformio.org
Ссылка на плагин для VSCode: PlatfromIO IDE
Как установить: Установка PlatformIO и Переползаем с Arduino IDE на VSCode + PlatformIO
Как утверждает 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 можно внедрить в код вашего устройства что-то “лишнее”, но на системах управления ядерными реакторами я бы побоялся его использовать.
Ну а на этом я завершаю свой небольшой обзор, надеюсь он был вам полезен. Ваши вопросы и комментарии вы можете оставить ниже или в чате. Благодарю за внимание, всем добра! В заключение оставлю ссылки на другие статьи по данной тематике.
Связанные статьи
- ESP32 в вопросах и ответах ( FAQ ) - кратенько обо всём сразу
- Железо
- ESP32: чипы, модули, платы… - эта статья поможет вам разобраться, чем отличаются чип ESP32 от модуля и от платы, и немного разобраться с классификацией - какие они бывают и чем отличаются
- ESP32 pinout - здесь вы сможете понять, какие выводы ESP32 классической серии использовать можно, какие нет; а какие можно, но осторожно
- ESP32-S3 pinout - то же самое, но для серии ESP32-S3
- Программирование в Arduino IDE / Trema IDE
- Настройка Arduino IDE для работы с ESP32 - подготовка Arduino IDE к работе микроконтроллерами ESP32, выбор платы, настройка её параметров и разделов памяти
- Arduino ESP32 шаг за шагом. Телеметрия через WiFi и MQTT для чайников - подробный разбор как создать проект телеметрии на ESP32 - чем ESP32 кардинально отличается от ESP8266, какие могут быть варианты написания кода для каждого шага.
- Ещё статьи на тему Arduino
- Программирование в PlatformIO
- Переползаем с Arduino IDE на VSCode + PlatformIO - установка и первоначальная настройка VSCode и PlatformIO применительно к ESP32
- Телеметрия на ESP8266 + MQTT - пошаговое руководство по созданию DIY-проекта с удаленным управлением на ESP8266
- Еще статьи на тему PlatformIO
- Программирование в ESP-IDF
- Установка ESP-IDF с помощью ESP-IDF Installation Manager - установка и первоначальная настройка ESP-IDF на компьютер
- Подключение библиотек к проекту ESP-IDF - как подключить библиотеки к проекту, созданному для ESP-IDF
- Ещё статьи на тему 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 например. И бывают моменты, когда много памяти занято, но через пару секунд она уже есть в наличии.
Но… Потом я от этого отказался. Решил проблему каким-то другим путем.
Возможно ли как считать прошивку из памяти ESP32?
Если прошивка не зашифрована – теоретически да. Вскрыть модуль (если flash под крышкой), подключиться к ней и считать каким-нибудь инструментом.
Возможно, если порыться в API, есть и функции считывания образа прошивки из flash-раздела, но я так глубоко не искал.
Возможно вам будет интересно–https://xakep.ru/2019/11/26/esp32-hack/
Хоспаде, да Ваш сайт это просто сокровище какое-то! Огромное спасибо за Ваш труд, котяра!
Здравствуйте.
Очень, хорошая статья, спасибо!
Вот такой вопрос. Arduino IDE v2.3.6, использую Arduino core for the ESP32.
На данный момент использую только версию ядра 2.0.17. Но хочется попробовать их новые ядра на v3.x.y.
Как в Arduino IDE можно относительно оперативно менять версию ядра, не скачивая их заново каждый раз с помощью Менеджера плат???
Не знаю. Я в Arduino IDE не работал уже несколько лет.
Наверное никак
Всем добрый день! Занимаюсь профессионально промышленной автоматизацией от проекта до ПО и пусконаладки. Программы пишу в основном на инженерных языках. ESP-модулями в основном балуюсь, но оцениваю как очень удачные и нужные в автоматизации умного дома например. Китайцам удалось внедрить то, над чем европейцы кроптели десятилетиями, но не сдвинули с места. Им конечно до китайцев в деле допиливания далеко. А теперь и недостижимо. Скончалась европейская инженерная школа. А китайская родилась и крепчает. Сайт автора увидел недавно и очень оценил. Все подробно и профессионально. И главное автор допиливает как китайцы до конца. Подписался и на телеграмм автора. Тем более, что интерес не праздный: сын построил дом и его надо снабдить умом.
Кстати, кому интересно – я сваял блок управления любительским ЧПУ-станком или роботом. Подробно на телеграмме https://t.me/+_yZIauZPzdo4Y2Iy.