Блог
ESP-IDF: SDK, сборка, сравнение с Arduino
Что такое esp32 idf, как его установить и как собрать первый проект — ESP-IDF это официальный C/C++ SDK от Espressif, и он копает глубже Arduino-обёртки. Короткие ответы на вопросы, которые задают, когда Board Manager перестаёт хватать.
Что такое ESP32 IDF?
ESP-IDF (Espressif IoT Development Framework) — официальный C/C++ SDK от Espressif, той самой компании, что делает чип. Вместо дружелюбной обёртки Arduino вы получаете FreeRTOS, драйверы железа и систему сборки idf.py. Это не язык и не IDE; это тот инструментарий, с которым говорит официальная документация чипа.
Как установить ESP32 IDF?
На Windows среда Espressif IDE или установщик esp-idf поднимают Python, Git и инструментарии за один запуск. На Linux: git clone —recursive репозитория, затем source install.sh и export.sh. Закладывайте 4–6 ГБ на диске и 10–20 минут; моя установка v5.3 на ноутбуке 2022 года заняла 14 минут.
Как добавить проект в ESP32 IDF?
Проект — это одна папка: каталог main/ с вашими C-файлами плюс CMakeLists.txt вверху. Скопируйте один из примеров в examples/get-started, один раз выполните idf.py set-target esp32s3, затем idf.py build. Код в стиле Arduino не ляжет без изменений: ESP-IDF хочет app_main(), а не setup() и loop(). FAQ для начинающих описывает путь Arduino, если вы из него.
Как запустить boot.py на ESP32?
boot.py — стартовый скрипт MicroPython, а не понятие ESP-IDF. Сначала прошейте MicroPython (esptool.py write_flash 0x1000 micropython.bin), затем загрузите boot.py в файловую систему — и он выполняется при каждом запуске. Ждёте boot.py в ESP-IDF? Не та прошивка для задачи.
ESP-IDF или Arduino — что выбрать?
Работают оба; ответ зависит от вашей платы и вашего терпения. Arduino — обёртка, прячущая sdkconfig и систему сборки. ESP-IDF даёт контроль и совпадает с официальными доками — а они хорошие, но предполагают опыт в C. Для всего с глубоким сном плюс Wi-Fi, или для продукта, безопаснее ESP-IDF; для любительского прототипа Arduino добирается быстрее.
Что такое app_main() и почему сборка требует его?
Каждый проект ESP-IDF определяет ровно одну app_main() — точку входа, без разделения setup()/loop(). Создайте внутри неё задачу FreeRTOS и держите её живой. Если сборка заканчивается на «undefined reference to app_main» — не хватает именно этой функции.
Что такое sdkconfig и стоит ли его редактировать?
sdkconfig — сгенерированный конфиг вашего проекта, который пересоздаётся при каждой чистой сборке. Не правьте его руками: idf.py menuconfig записывает его за вас. В git коммитится файл sdkconfig.defaults. FAQ о внутренностях объясняет, как конфиг распространяется в сборку.
Что значит «fatal error: driver/gpio.h: No such file or directory»?
Отсутствующая зависимость компонента. Заголовок есть в SDK — просто ваш CMakeLists.txt не объявил его в REQUIRES. Одна строка чинит, и это самая частая ошибка компиляции ESP-IDF, которую я помогал разбирать на форумах. Я сам наступил на неё в первом проекте в два часа ночи; после того как перестал паниковать, починка заняла 20 секунд.
Как задать скорость порта ESP32 через ESP-IDF?
Выполните idf.py menuconfig → Serial flasher config → Default flash baud rate. Это прямой ответ на вопрос «как задать скорость esp32 в esp-idf»: речь о скорости прошивки, а не о скорости UART вашего приложения. Скорость приложения — это параметр драйвера UART, который выставляется в коде отдельно.
Можно ли запускать код Arduino внутри ESP-IDF?
Да, свежие ядра поставляют Arduino как опциональный компонент — idf.py add-dependency espressif/arduino-esp32 подтянет его. В основном работает, хотя смешивание двух миров путает: две системы конфигурации, два API таймеров. Выбирайте что-то одно на проект. Отладка смешанного проекта — та область, где FAQ по отладке отрабатывает своё.
Проекты по этой теме запускаются прямо в бесплатном симуляторе sensbench: схема уже собрана, прошивка включена — без аккаунта и установки.