| Установка 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. |