Начало работы с ESP32 с использованием ESP-IDF


В этом вводном руководстве по ESP32 с использованием ESP-IDF мы познакомим вас с некоторыми основными понятиями программирования ESP32 с помощью ESP-IDF в VS Code. Будут рассмотрены примеры логирования, генерации задержек, ввода с клавиатуры и мигания встроенного светодиода ESP32.

Прежде чем продолжить, убедитесь, что у вас установлена ​​последняя версия VS Code и настроено расширение ESP-IDF:

В двух предыдущих уроках мы рассмотрели, как установить, скомпилировать, собрать и прошить код в ESP32 с помощью esp-idf. В этом уроке мы рассмотрим несколько примеров для начала работы, таких как логирование, включение отладочной информации и простая программа мигания светодиода.

Также про начало работы с ESP32 с использованием ESP-IDF вы можете прочитать в следующей статье на нашем сайте - эти две статьи как бы дополняют друга, какие то моменты лучше освещены в одной статье, другие моменты - в другой статье.

Вход в систему ESP-IDF

ESP-IDF обладает некоторыми возможностями логирования, которые мы рассмотрим в первую очередь, поскольку они чрезвычайно полезны и используются довольно часто. Сначала мы включим файл «esp_log.h» в наши скрипты.

Вместо простого вывода сообщения с помощью команды printf, мы можем использовать различные типы логов. Библиотека логирования ESP-IDF поддерживает следующие пять уровней логирования:

  1. ESP_LOGE: Ведение журнала ошибок (самый низкий уровень)
  2. ESP_LOGW: Ведение журнала предупреждений
  3. ESP_LOGI: Информационный журнал
  4. ESP_LOGD: Отладочная инструкция
  5. ESP_LOGV: Подробный (самый высокий уровень)

Для регистрации ошибки мы будем использовать следующую функцию:

Примечание: в функции ESP_LOGE() буква 'E' означает ошибку.

Функция логирования принимает два аргумента. Первый аргумент — это тег, а второй — отформатированная строка. Если вы зададите разные теги в разных участках кода, это упростит мониторинг этих частей кода.

В нашем скрипте мы укажем в качестве первого параметра 'LOG', который является тегом, а в качестве второго аргумента — отформатированную строку 'This is an error'. Таким образом, наша функция регистрации ошибок будет выглядеть примерно так:

Аналогичным образом мы определим разделы журналов для предупреждений, информационных сообщений, отладочной информации и подробного вывода соответственно.

Тестирование скрипта для ведения логов.

Вот как выглядит наш скрипт на данный момент:

Наш скрипт для ведения логов

Теперь давайте скомпилируем этот код. Откройте последовательный терминал, введите следующую команду и нажмите Enter:

Вот как выглядит результат после успешной прошивки микросхемы:

Результат успешной прошивки микросхемы скриптом логгирования

Давайте разберемся, что означает этот вывод. Слева направо: E означает ошибку, W — предупреждение, а I — информацию. Числа в скобках указывают время в миллисекундах после запуска приложения и вызова данной функции.

Обратите внимание, что журналы ошибок, предупреждений и информации отображаются, но отладочные сообщения и подробный вывод отсутствуют. По умолчанию они отключены. Нам придется изменить настройки самостоятельно.

Включите режимы отладки и подробного вывода с помощью Menuconfig

Мы будем использовать menuconfig для включения отладочных и подробных настроек. Откройте командную строку ESP-IDF 4.3 и дождитесь загрузки переменных окружения. Теперь укажите путь к текущему корневому каталогу, как показано ниже, а затем откройте menuconfig с помощью команды idf.py menuconfig.

Включение меню конфигурации с помощью команды idf.py menuconfig

Эта команда открывает конфигурацию среды разработки Espressif IoT. Перейдите в раздел ‘Component config’ («Конфигурация компонентов»).

Раздел конфигурации компонентов в меню конфигурации ESP-IDF

Далее перейдите в раздел ‘Log output’ («Вывод в журнал»).

Раздел «Вывод в журнал» в меню конфигурации ESP-IDF

Затем перейдите к разделу ‘Default log verbosity (Info)’ («Уровень детализации журнала по умолчанию (Информация)»).

Раздел ‘Default log verbosity (Info)’ в меню конфигурации ESP-IDF

Теперь выберите ‘Verbose’. Здесь мы выбираем минимальный уровень детализации. Это означает, что мы будем получать сообщения в режиме подробного вывода и сообщения более высокого уровня (ошибки, предупреждения, информация, отладка). Однако, если бы мы выбрали ‘debug’ («Отладка»), то вывод отображал бы сообщения до уровня отладки, а подробный вывод отсутствовал бы. По сути, минимальный уровень устанавливается в следующем порядке:

Выбор минимального уровня логирования в меню конфигурации ESP-IDF

Нажмите 'Q' для выхода и сохраните настройки, нажав 'Y'.

Сохранение настроек конфигурации ESP-IDF

Включите режимы отладки и подробного вывода в коде

Мы также можем включить отладку и подробный вывод в скрипте программы. Добавьте следующую строку кода для установки конфигурации с помощью функции esp_log_level_set(). Она принимает два аргумента. Первый аргумент — это тег, а второй — фактический уровень, который мы хотим установить в качестве минимального уровня.

В нашем скрипте мы укажем в качестве первого параметра 'LOG', который является тегом, а в качестве второго аргумента — 'ESP_LOG_INFO', уровень логирования. Мы устанавливаем для тега 'LOG' уровень info. Таким образом, уровень логирования для тега LOG будет выглядеть примерно так:

Кроме того, мы добавим дополнительный набор уровней логирования с другим тегом. В первом наборе мы использовали тег 'LOG'. Во втором наборе мы установим тег 'TAG'.

Вот как сейчас выглядит наш скрипт:

Теперь запустите программу.

Наш скрипт логирования в VS Code

Вот как теперь выглядит вывод. Те сообщения с тегом 'LOG' выводились до уровня info. Это потому, что мы установили для тега 'LOG' уровень info. Однако сообщения с тегом 'TAG' выводились до уровня verbose, потому что именно это мы задали в menuconfig.

Вывод нашего лога в VS Code

Генерация задержек с помощью ESP-IDF на ESP32

Ещё одна важная концепция, которая часто используется, — это включение задержек в наши программные скрипты.

Для генерации задержек мы будем использовать FreeRTOS (на нашем сайте вы также можете более подробно прочитать про использование FreeRTOS в ESP32 с помощью ESP-IDF). Поэтому сначала мы включим необходимые для неё библиотеки в наш программный скетч.

Внутри функции цикла мы добавим задержку. Для генерации задержки мы будем использовать функцию «vTaskDelay». Она принимает в качестве первого параметра целое число (uint32), которое является константой TickType, определяющей количество тактов, которые нужно задержать. Это число соответствует такту, то есть частоте микросхемы.

Чтобы перевести тактовые секунды в миллисекунды, мы разделим их на portTICK_PERIOD_MS. Параметр portTICK_PERIOD_MS является частью директивы #defines. Он настраивается при компиляции скетча и по умолчанию устанавливается равным скорости работы микросхемы. Таким образом, 1000, разделенное на количество тактов, в течение которых работает микросхема, даст нам миллисекунды.

Пример скетча

Давайте запустим следующий скетч, чтобы увидеть, как генерируется задержка. В этом скетче мы определили TAG как 'DELAY'. Это будет заменено внутри функции ESP_LOGI() на первый параметр. В качестве второго параметра мы будем увеличивать значение целочисленной переменной 'i', которая изначально имеет значение 0. Будет сгенерирована задержка, после которой будет выведена информация в лог.

Наш скрипт с задержкой в VS Code

Теперь прошейте микросхему, введя в терминале следующую команду:

Ввод команды для прошивки микросхемы

Вот как выглядит вывод. Каждую секунду печатается новое число.

Пример работы нашего скетча с генерацией задержки

Пример мигания светодиода на ESP32 ESP-IDF

Теперь перейдём к одному из самых распространённых первых примеров, который выполняется с использованием ESP32. Мы покажем, как заставить мигать встроенный светодиод ESP32 с помощью ESP-IDF в VS Code.

Для начала создайте новый проект ESP-IDF и перейдите к файлу main.c.

 

 

 

 

 

статья в разработке

(Проголосуй первым!)
Загрузка...
9 просмотров

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

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