Программирование ARM Установка ESP-IDF на Ubuntu Wed, November 13 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Установка 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.
2. Установка среды разработки ESP-IDF для ESP32.

 

Добавить комментарий


Защитный код
Обновить

Top of Page