Установка ESP-IDF на Ubuntu |
![]() |
Добавил(а) microsin |
На машине может быть установлено одновременно несколько версий среды разработки ESP-IDF, для этого их надо просто устанавливать в отдельные каталоги. На момент написания статьи последней версией была v5.0.1. В этой статье установка была сделана на примере v4.4.3, и для неё был выбран каталог ~/esp443/esp-idf. Примечание: здесь просто даны пошаговые инструкции по установки без подробных комментариев. Для получения подробных инструкций перейдите на страничку [1], выберите нужную версию. Например, если нам нужна версия 4.4.3, то для получения инструкций нужно перейти по ссылке https://docs.espressif.com/projects/esp-idf/en/v4.4.3/esp32/ , далее кликнуть на Get Started. Процесс по шагам: 1. Установка необходимых компонентов и утилит: $ sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 2. Создание отдельного каталога установки для версии v4.4.3: $ mkdir -p ~/esp443 3. Закачка среды командой git clone: $ cd ~/esp443 $ git clone -b v4.4.3 --recursive https://github.com/espressif/esp-idf.git 4. Установка пакетов для поддержки всех микроконтроллеров семейства ESP32: $ cd ~/esp443/esp-idf/ $ ./install.sh all Примечание: не обязательно устанавливать поддержку для всех микроконтроллеров. Например, если нужны пакеты только для ESP32-C3, то можно выполнить команду ./install.sh esp32c3. Поддерживаются следующие варианты опций для скрипта install.sh: all, esp32, esp32s2, esp32c3, esp32s3. 5. Для всех рабочих действий над проектом служит скрипт idf.py. Перед его использованием необходимо предварительно запустить скрипт export.sh. Для этого установите его атрибуты, разрешающие выполнение: $ chmod +x ~/esp443/esp-idf/export.sh 6. Запуск скрипта export.sh: $ . ./export.sh После шага 6 будет доступен функционал скрипта idf.py. [Небольшая памятка по использованию скрипта idf.py] Запуск idf.py без параметров выведет подсказку по командной строке. $ idf.py Usage: idf.py [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]... ESP-IDF CLI build management tool (утилита управления сборкой проекта). Для команд, которые неизвестны скрипту idf.py, делается попытка их выполнения в качестве системы сборки target. Опции: --version Покажет версию IDF. --list-targets Напечатает список поддерживаемых целей (микроконтроллеров компании Espressif). -C, --project-dir PATH Указывает путь директории проекта. -B, --build-dir PATH Указывает путь для директории build. -w, --cmake-warn-uninitialized / -n, --no-warnings Разрешает предупреждения о неинициализированных переменных CMake для файлов CMake в каталоге проекта (--no-warnings теперь по умолчанию, и это не нужно указывать). Значение по умолчанию может быть установлено через переменную окружения IDF_CMAKE_WARN_UNINITIALIZED. -v, --verbose Подробный вывод сообщений сборки. --preview Разрешает функции IDF, которые все еще находятся в превью. --ccache / --no-ccache Использовать в сборке ccache. По умолчанию запрещено. Значение по умолчанию может быть установлено через переменную окружения with the IDF_CCACHE_ENABLE. -G, --generator [Ninja|Unix Makefiles] CMake generator. -D, --define-cache-entry TEXT Создает запись кэша cmake. Эта опция может быть использована не более одного раза либо глобально, либо для одной субкоманды. -b, --baud INTEGER Скорость для прошивки. По умолчанию может быть установлена через переменную окружения ESPBAUD. Эта опция может быть использована не более одного раза либо глобально, либо для одной субкоманды. -p, --port TEXT Последовательный порт. По умолчанию может быть установлена через переменную окружения ESPPORT. Эта опция может быть использована не более одного раза либо глобально, либо для одной субкоманды. --help Покажет текст подсказки по командам (этот текст, только на английском языке). Команды: add-dependency Добавит зависимость (dependency) в файл манифеста. В настоящий момент разработчики реализовали добавление зависимостей из реестра компонентов (component registry). all Алиас для build. Выполнит сборку проекта. app Сборка только приложения (app). app-flash Только прошивка app. bootloader Сборка только загрузчика. bootloader-flash Только прошивка загрузчика. build-system-targets Напечатает список системных целей сборки. clean Удалит временные файлы результата сборки (из каталога build). confserver Запустит сервер конфигурации JSON. create-component Создаст новый компонент. create-manifest Создаст манифест для указанного компонента. create-project Создаст новый проект. create-project-from-example Создаст проект на основе примера. delete-version Устаревшая команда, ей соответствует новая: "compote component delete". Удалит указанную версию компонента из реестра компонентов (component registry). docs Откроет браузер с документацией ESP-IDF. efuse-common-table Сгенерирует исходник C для IDF-полей eFuse. Устаревший алиас: "efuse_common_table". encrypted-app-flash Только прошивка зашифрованного app. encrypted-flash Прошивка зашифрованного проекта. erase-flash Полное стирание всей памяти flash чипа. Устаревший алиас: "erase_flash". erase-otadata Стирает раздел (partition) otadata. Устаревший алиас: "erase_otadata". flash Прошивка проекта. fullclean Удаление всего содержимого папки build. gdb Запуск GDB. gdbgui GDB UI в браузере по умолчанию. gdbtui Режим GDB TUI. menuconfig Запуск утилиты конфигурации проекта. monitor Отобразит вывод монитора. openocd Запустит openocd из текущего каталога. pack-component Устаревшая команда, ей соответствует новая: "compote component pack". Создаст архив компонента и сохранит его в директорию dist. partition-table Сборка только таблицы разделов. Устаревший алиас: "parititon_table". partition-table-flash Прошивка только таблицы разделов. Устаревший алиас: "partition_table-flash". post-debug Цель target для чтения вывода действия async debug и его остановки. python-clean Удалит сгенерированный байт-код Python из директории IDF. read-otadata Прочитает раздел (partition) otadata. Устаревший алиас: "read_otadata". reconfigure Перезапуск CMake. set-target Установит целевой чип для сборки. show-efuse-table Напечатает таблицу eFuse. Устаревший алиас: "show_efuse_table". size Напечатает базовую информацию о размере app. size-components Напечатает информацию о размере для каждого компонента. size-files Напечатает информацию о размере для каждого файла исходного кода. uf2 Сгенерирует бинарник UF2 со всеми подключенными бинарниками. uf2-app Сгенерирует бирарник UF2 только для приложения. upload-component Устаревшая команда, ей соответствует новая: "compote component upload". Выгрузит компонент в реестр компонентов (component registry). Если компонента нет в реестре, то он будет создан автоматически. upload-component-status Устаревшая команда, ей соответствует новая: "compote component upload-status". Проверит статус выгрузки компонента по job ID. idf.py --list-targets Выведет список поддержваемых целей сборки (микроконтроллеров Espressif), которые были установлены скриптом install.sh на шаге 4. $ idf.py --list-targets esp32 esp32s2 esp32c3 esp32s3 idf.py --version Покажет версию ESP-IDF. $ idf.py --version ESP-IDF v4.4.3-dirty Конфигурирование проекта для ESP32-C3 (первый шаг при подготовке проекта к компиляции): $ idf.py set-target esp32c3 Конфигурирование опций проекта: $ idf.py menuconfig 1. Не найден компонент esp_adc_cal: CMake Error at /home/microsin/esp501/esp-idf/tools/cmake/build.cmake:245 (message): Failed to resolve component 'esp_adc_cal'. Call Stack (most recent call first): /home/microsin/esp501/esp-idf/tools/cmake/build.cmake:281 (__build_resolve_and_add_req) /home/microsin/esp501/esp-idf/tools/cmake/build.cmake:574 (__build_expand_requirements) /home/microsin/esp501/esp-idf/tools/cmake/project.cmake:440 (idf_build_process) CMakeLists.txt:17 (project) Проблема в том, что в ESP-ISF v5.0.1 компонент esp_adc_cal теперь называется esp_adc. Отредактируйте файл espidf/CMakeLists.txt проекта, заменив в секции REQUIRES запись "esp_adc_cal" на "esp_adc". 2. Не найден тип uart_config_t: unknown type name 'uart_config_t' Добавить подключение заголовка: #include "driver/uart.h"
3. Не найден заголовочный файл driver/gpio.h (или uart.h, или spi_master.h): driver/gpio.h: No such file or directory В файл CMakeLists.txt добавить REQUIRES "driver", тем самым разрешается зависимость от компонента driver: if(ESP_PLATFORM) include ( ${CMAKE_CURRENT_LIST_DIR}/espidf.cmake ) idf_component_register( INCLUDE_DIRS ${includes} SRCS ${sources} REQUIRES "driver") endif()
4. Не найден заголовочный файл driver/i2c.h: driver/i2c.h: No such file or directory Надо в файле espidf/CMakeLists.txt проекта добавить в секцию REQUIRES запись "driver". 5. Проблемы с типами, относящимися к FreeRTOS: unknown type name 'QueueHandle_t' Надо добавить подключение заголовков: #include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
6. Не найден тип семафора SemaphoreHandle_t: unknown type name 'SemaphoreHandle_t' Надо добавить подключение заголовка: #include "freertos/semphr.h"
7. Ошибка формата макроса вывода в лог: esp_log.h:265:27: error: format '%d' expects argument of type 'int', but argument 6 has type ... Эти и другие подобные ошибки в макросах ESP_LOGI, ESP_LOGW и ESP_LOGE решаются с помощью макросов форматирования PRIu8, PRIu16, PRIu32, PRId8 и т. д. Пример: uint8_t i = 0; ESP_LOGE(IA611_TAG, "...failed while sending header %d", i);
Надо исправить на: ESP_LOGE(__FUNCTION__, "...failed while sending header %" PRIu8, i);
8. Для команды monitor скорость теперь надо указывать с опцией -b вместо -B: $ idf.py monitor -b 576000 9. KeyError: 'idfSelectedId'. $ IDF_PATH="/home/user/esp/441" . ~/esp/441/export.sh Detecting the Python interpreter Checking "python" ... Checking "python3" ... Python 3.8.10 "python3" has been detected Adding ESP-IDF tools to PATH... Traceback (most recent call last): File "/home/user/esp/441/tools/idf_tools.py", line 1858, in <module> main(sys.argv[1:]) File "/home/user/esp/441/tools/idf_tools.py", line 1854, in main action_func(args) File "/home/user/esp/441/tools/idf_tools.py", line 1176, in action_export tools_info = filter_tools_info(tools_info) File "/home/user/esp/441/tools/idf_tools.py", line 1118, in filter_tools_info targets = get_user_defined_targets() File "/home/user/esp/441/tools/idf_tools.py", line 1098, in get_user_defined_targets if env == idf_env_json['idfSelectedId']: KeyError: 'idfSelectedId' Вероятно скрипт tools/idf_tools.py в каталоге ESP-IDF v4.4.x был случайно заменен скриптом tools/idf_tools.py из каталога ESP-IDF v5.0.1. [Ссылки] 1. ESP-IDF Versions. |