Перейти к содержимому

ESP-IDF 5.0.0: что придется исправить в уже работающем проекте

Метки:

Добрый день, уважаемый читатель!

Давно не следил за новыми версиями Espressif32 и ESP-IDF, но сегодня то-то навеяло, видимо. Вроде бы недавно обновился до ESP-IDF 4.4.3, а сегодня опять обновление “прилетело”. ?

ESP-IDF 5.0.0: что придется исправить в уже работающем проекте

На этот раз уж как прилетело, так прилетело – версия Espressif32 6.0.1, которая содержит в себе ESP-IDF 5.0.0.

Никогда такого не было, и вот опять!

ESP-IDF 5.0.0: что придется исправить в уже работающем проекте

Насколько я знаю, разработчики PlatformIO обычно придерживаются стратегии, когда в новую версию платформы Espressif32 подпадают только стабильные релизы. Значит пришло время…

И понеслось… Вагон и маленькая тележка ошибок при компиляции.

Часть проблем, конечно, моих рук дело – то есть я сам когда-то заложил проблемы в коде, но до сих пор почему-то работало ?. Ну да с такими проблемами ладно – сами разберемся… Обсуждать здесь такие проблемки не буду, просто постараюсь исправить в ближайшее время и обновить библиотеки на GitHub-е.

Но часть проблем связана просто с тем, что разработчики ESP-IDF что-то поменяли внутри самой платформы. И теперь придется привыкать “жить по новому”. Вот я их здесь и перечислю, вдруг кому-то пригодится.

 


Особенности версии

Приведу краткое описание новой версии из официальной документации по выпуску

  • Предварительно зашифрованное распространение прошивки во время обновлений OTA
  • Более надежная схема безопасности (на основе SRP6a+AES-GCM) в компоненте обеспечения WiFi
  • Интеграция стека mbedTLS-3.x (3.2.1)
  • Поддержка схемы безопасной загрузки v2 на основе ECDSA для ESP32-C2.
  • Включено ядро ​​​​SMP FreeRTOS (исходная версия AWS)
  • Дополнительные функции Wi-Fi:802.11r (быстрый переход BSS)
    Поддержка PMF для softAP
    Поддержка регистратора WPS в softAP
    Поддержка WPA3 OWE для станции
    Поддержка WPA3 SAE H2E для станции

Теперь о проблемах, с которыми пришлось столкнуться после обновления….


Не забудьте выполнить PlatformIO: Clean

Сразу после обновления не забудьте выполнить команду PlatformIO: Clean – это удалить все ранее скомпилированные файлы из папки проекта. Иначе будет ещё большая куча маловразумительных ошибок.


Многие функции теперь не доступны без явного #include соответствующего модуля

Многие функции и объявления типов, которые казались ранее системными, теперь не доступны без явного #include модуля, в котором они объявлены. Это, например, касается функции ets_timeout_us(), для доступа к которой теперь требуется #include “rom/ets_sys.h” (а в прежних версиях всё работало “и так”).

Поэтому если вы столкнулись с проблемой, когда компилятор что-то там не находит – воспользуйтесь поиском пор содержимому фреймфорка, скорее всего нужно просто добавить воды #include.

 


ADC полностью переписан

Полностью изменили механизм работы с ADC (АЦП), везде и всюду – и в измерениях, и в калибровке. Теперь доступны два режима изменения – oneshot и сontinuous. Первый вариант в целом равнозначен прежнему режиму. Во втором случае под результаты изменений создается буфер для фильтрации, дальше я пока не разбирался, так как без надобности.

Код работы с АЦП придется переделывать полностью. К сожалению, справка по новым функциям написана “на отвали” и почти ничего не понятно. Но хотя бы есть примеры кода.

Получается, что хорошо, что статья по ADC до сих пор в черновиках, иначе переписывать всю пришлось бы, а не часть, как сейчас

Modbus вынесен в отдельный репозиторий

Ещё одним сюрпризом стало удаление протокола Modbus из ESP-IDF. Шта???!!! Посчитали ненужным и выпилили из проекта. Вынесли в отдельный репозиторий, который теперь просто не компилируется!

Подключить через platformio.ini не получилось – библиотека скачивается, но не компилируется. Решение оказалось достаточно простым:

ESP-IDF 5.0.0: что придется исправить в уже работающем проекте


portTICK_RATE_MS исключён

Если вы использовали макрос portTICK_RATE_MS для пересчета миллисекунд в тики RTOS, то знайте, что его больше нет. Используйте вместо него другие макросы – portTICK_PERIOD_MS или pdMS_TO_TICKS(time_in_ms)


Добавили функцию sys_delay_ms()

Наконец-то добавили аналог ардуиновского delay(): это самый обычный vTaskDelay(ms / portTICK_PERIOD_MS), но пользоваться удобно.

 


Замены устаревших типов

Вообще, замененных типов и макросов в ESP-IDF 5.0.0 довольно много:

  • eTaskStateGet -> eTaskGetState
  • portTickType -> TickType_t
  • xTaskHandle -> TaskHandle_t
  • xQueueHandle -> QueueHandle_t
  • xSemaphoreHandle -> SemaphoreHandle_t
  • xQueueSetHandle -> QueueSetHandle_t
  • xQueueSetMemberHandle -> QueueSetMemberHandle_t
  • xTimeOutType -> TimeOut_t
  • xMemoryRegion -> MemoryRegion_t
  • xTaskParameters -> TaskParameters_t
  • xTaskStatusType -> TaskStatus_t
  • xTimerHandle -> TimerHandle_t
  • xCoRoutineHandle -> CoRoutineHandle_t
  • pdTASK_HOOK_CODE -> TaskHookFunction_t
  • portTICK_RATE_MS -> portTICK_PERIOD_MS
  • pcTaskGetTaskName -> pcTaskGetName
  • pcTimerGetTimerName -> pcTimerGetName
  • pcQueueGetQueueName ->pcQueueGetName
  • vTaskGetTaskInfo -> vTaskGetInfo
  • xTaskGetIdleRunTimeCounter -> ulTaskGetIdleRunTimeCounter
  • tmrTIMER_CALLBACK -> TimerCallbackFunction_t
  • pdTASK_CODE -> TaskFunction_t
  • xListItem -> ListItem_t
  • xList -> List_t
  • pxContainer -> pvContainer

gpio_pad_select_gpio() больше не доступен

Функция gpio_pad_select_gpio() обычно использовалась во всех демо-проектах для инициализации GPIO и перевода его в режим ввода-вывода. Теперь придется окончательно переходить на gpio_reset_pin().

Модуль “soc/cpu.h” изменен на “esp_cpu_utils.h”

Этот модуль у меня используется для перехвата стека при различных сбоях и исключениях.

 


MQTT клиент теперь настраивается совсем по другому

Параметров стало больше и теперь они сгруппированы в разделы:

  • broker – параметры брокера, в свою очередь теперь делится на блоки address и verification
  • credentials – параметры авторизации, то есть логин, пароль и всё что с этим связано
  • session – параметры сессии: протокол, чистая сессия, keepalive, LWT и т.д.
  • network – конфигурация сети (в основном таймауты)
  • task – приоритет и размер стека для задачи
  • buffer – размеры буферов для отправки и приема

То есть “старые” параметры “переехали” в другие разделы, например:

  • Был host -> стал broker.address.hostname
  • Был port -> стал broker.address.port

Ну и появились новые параметры, так что если вы пользовались встроенным MQTT клиентом, рекомендую ознакомится с документацией.


HTTPS OTA теперь тоже инициализируется немного по другому

Для “обновлений по воздуху” добавили несколько параметров, и теперь конфигурирование OTA приходится выполнять за два этапа – вначале необходимо настроить esp_http_client_config_t (как и раньше), а затем прицепить его к esp_https_ota_config_t, который уже можно передать в esp_https_ota():

ESP-IDF 5.0.0: что придется исправить в уже работающем проекте

Но это не так страшно, как с MQTT клиентом – там почти всю конфигурацию перелопачивать пришлось.

На этом в моих проектах проблемы с переходом закончились. А у вас?

В ближайшее время протестирую работу новой версии и выложу обновленные библиотеки для проекта термостат

Официальную документацию о выпуске можно посмотреть здесь на английском

 


На этом пока всё, до встречи на сайте и на dzen-канале!

💠 Полный архив статей вы найдете здесь


Пожалуйста, оцените статью:
[ 5 из 5, всего 1 оценок ]

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *