Рубрики
Проекты на ESP32

Настройка Wi-Fi точки доступа (AP) на ESP32 с помощью ESP-IDF

В данной статье мы научимся настраивать плату ESP32 в режиме программной точки доступа (soft-AP) с помощью ESP-IDF. Статья включает в себя объяснения необходимых API для подключения к Wi-Fi, подробную информацию о драйвере Wi-Fi, а также пример скетча для ESP-IDF, демонстрирующий работу платы ESP32 в качестве точки доступа и позволяющего другим устройствам подключаться к ESP32 AP.

У нас также есть руководство по настройке ESP32 в режиме станции Wi-Fi с использованием ESP-IDF.

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

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

Дополнительно на нашем сайте вы можете прочитать статью про начало работы с ESP32 с использованием ESP-IDF.

Введение в точки доступа (AP)

Режим программной точки доступа (Soft-Access point/AP) также известен как «программно-управляемая точка доступа». Действуя как «виртуальный маршрутизатор», программная точка доступа объединяет программное обеспечение, которое настраивает плату ESP32 в качестве беспроводной точки доступа. Поскольку отсутствует подключение к проводной сети, она называется Soft-AP. Так как физический маршрутизатор не требуется, использование ESP32 в режиме Soft-AP является выгодным. В этом режиме ESP32 может создавать собственную беспроводную сеть, к которой могут подключаться находящиеся поблизости устройства с поддержкой Wi-Fi, выступая таким образом в качестве точки доступа.

API ESP32 для работы Wi-Fi с помощью ESP-IDF

Давайте сначала обсудим некоторые важные функции, необходимые для работы ESP32 в качестве точки доступа. ESP-IDF предоставляет библиотеку esp_wifi.h , которая используется для настройки и мониторинга работы сети Wi-Fi на ESP32. Это включает в себя настройку режимов точки доступа и клиента Wi-Fi в различных режимах безопасности, например, WPA, WEP и т. д., мониторинг пакетов Wi-Fi и сканирование ближайших точек доступа. В этом руководстве мы сосредоточимся на том, как подключить станции к ESP32, настроив нашу плату ESP32 в режиме точки доступа/программной точки доступа/точки доступа. Давайте посмотрим, как это будет сделано. 

Первым шагом является подключение заголовочного файла:

Конфигурация

Начнем с инициализации ресурса выделения Wi-Fi для драйвера Wi-Fi. Он отвечает за запуск задачи Wi-Fi

Функция принимает один параметр config, который представляет собой указатель на уже инициализированную структуру конфигурации Wi-Fi. Обычно мы устанавливаем структуру конфигурации Wi-Fi в значение WIFI_INIT_CONFIG_DEFAULT() , чтобы инициализация конфигурации происходила со значениями по умолчанию. Это показано ниже:

Здесь wifi_init_config_t — это структура, обозначающая параметры конфигурации стека Wi-Fi, передаваемые в функцию esp_wifi_init().

Далее мы настроим режим Wi-Fi. Как упоминалось ранее, библиотека ESP-IDF Wi-Fi поддерживает несколько режимов работы Wi-Fi. Для установки режима Wi-Fi мы используем функцию esp_wifi_set_mode() и передаем в нее режим Wi-Fi в качестве параметра. По умолчанию режим установлен на station. Мы можем установить режим на station, soft-AP или оба (station + soft-AP). Параметр может принимать одно из трех значений:

  • WIFI_MODE_STA (режим станции);
  • WIFI_MODE_AP (для режима программной точки доступа);
  • WIFI_MODE_APSTA (для режима станции + программной точки доступа).

Запуск Wi-Fi

Для запуска Wi-Fi-соединения в заданных настройках вызывается функция esp_wifi_start() . В зависимости от настроенного режима, она сначала создает свой блок управления, а затем инициализирует этот режим.

Для подключения платы ESP32, установленной в режиме станции, к точке доступа используется функция esp_wifi_connect() . Эта функция применима только в том случае, если настроен режим «станция» или «станция + программная точка доступа».

Примечание: эта функция недоступна в режиме Soft-AP. Там она не требуется.

Особенности Wi-Fi на ESP32

ESP32 Wi-Fi поддерживает четыре виртуальных интерфейса Wi-Fi: STA, AP, Sniffer и Reserved. Более того, плата ESP32 может быть сконфигурирована в трех режимах: режим станции, режим программной точки доступа и одновременно режимы станции и программной точки доступа. Ниже мы привели еще несколько особенностей ESP32 Wi-Fi.

  • Протокол ESP-NOW и режим дальней связи поддерживают передачу данных на расстояние до 1 км.
  • Максимальная пропускная способность TCP по беспроводной сети составляет 20 Мбит/с.
  • Кроме того, она обеспечивает максимальную пропускную способность UDP в беспроводной сети до 30 Мбит/с.
  • В сочетании с различными стандартами безопасности, включая WPA/WPA2/WPA3/WPA2-Enterprise/WPA3-Enterprise/WAPI/WPS и DPP.
  • IEEE 802.11b, IEEE 802.11g, IEEE 802.11n, а также API для настройки режима протокола.
  • AMSDU, AMPDU, HT40, QoS, спящий режим модема, несколько антенн.

Настройка ESP32 в качестве программной точки доступа с использованием ESP-IDF

В режиме программной точки доступа (soft-AP) плата ESP32 выступает в качестве точки доступа, позволяя находящимся поблизости устройствам подключаться к ней. Давайте рассмотрим пример скетча, предоставленный ESP-IDF, чтобы узнать, как настроить ESP32 в качестве точки доступа.

Создание примера проекта

Откройте VS Code и перейдите в меню View > Command Palette («Вид» > «Палитра команд»). Введите   в строке поиска ESP-IDF: New Project и нажмите Enter.

Укажите название проекта и каталог. Мы назвали наш проект «ESP_IDF_WIFI_AP». Для платы ESP-IDF мы выбрали опцию custom board («Пользовательская плата»). В качестве целевой платформы ESP-IDF мы выбрали модуль ESP32. Нажмите кнопку ‘Choose Template’ («Выбрать шаблон»), чтобы продолжить.

В разделе Extension («Расширение») выберите опцию ESP-IDF:

На вкладке getting_started («Начало работы») для Wi-Fi мы нажмем на «softAP». Теперь нажмем ‘Create project using template softAPСоздать проект, используя шаблон softAP«).

Вы получите уведомление о создании проекта. Чтобы открыть проект в новом окне, нажмите «Да».

Это открывает наш проект ESP_IDF_WIFI_AP, который мы создали во вкладке EXPLORER. Внутри папки проекта находится несколько папок. Это одинаково для всех проектов, которые вы будете создавать через ESP-IDF Explorer. В основной  папке находится исходный код, то есть файл main.c будет находиться именно здесь.

Редактирование файла Kconfig

Сначала перейдите в main > Kconfig.projbuild

Этот файл содержит определения различных параметров, включая ESP_WIFI_SSID, ESP_WIFI_PASSWORD, ESP_WIFI_CHANNEL и ESP_MAX_STA_CONN. Вы можете добавить и другие параметры по своему усмотрению между ключевыми словами меню и конечного меню. Вы можете установить значения, выделенные ниже, в этом файле. Рекомендуется задать сетевые учетные данные для вашей платы ESP32, включая SSID и пароль. Вместо того чтобы жестко прописывать их в файле main.c, удобнее определить эти параметры здесь. Определите их по своему усмотрению, а затем сохраните этот файл.

Теперь перейдите в файл main > softap_example_main.c и откройте его.

Ниже приведён код, который открывается в этом окне. В этом примере сначала настраивается режим точки доступа (AP) для платы ESP32, а затем разрешается подключение к ней станций. По умолчанию к плате ESP32 могут подключаться максимум 4 станции. Однако этот параметр можно изменить в файле Kconfig, как упоминалось ранее.

Код ESP-IDF для настройки ESP32 в качестве точки доступа

Как работает код?

Для начала мы подключим необходимые библиотеки, включая библиотеки FreeRTOS для генерации задержек, esp_wifi.h для включения Wi-Fi-соединения, esp_event.h для мониторинга событий Wi-Fi и esp_log.h в качестве библиотеки для ведения журналов.

Далее мы определили параметры, которые задали в файле Kconfig. Если вы уже определили эти параметры в этом файле, то нет необходимости жестко прописывать значения здесь. Однако, если вы хотите определить эти параметры в файле main.c, то укажите их в двойных кавычках. Например: #define EXAMPLE_WIFI_SSID “ESP32-Soft-AP”

Этот код использует информационное логирование. Функция логирования принимает два аргумента. Первый аргумент — это тег, а второй — отформатированная строка. Поэтому эта глобальная переменная будет полезна при вызове функций ESP_LOGI(). Здесь «wifi softAP» — это тег, который будет использоваться при логировании.

event_handler()

У нас есть функция event_handler(), которая обрабатывает события Wi-Fi. Она действует как функция обратного вызова при возникновении любого события Wi-Fi. Драйвер Wi-Fi отправляет в задачу обработки событий различные события. Два из них: WIFI_EVENT_AP_STACONNECTED и WIFI_EVENT_AP_STADISCONNECTED. Первое событие происходит, если станция подключается к точке доступа. Аналогично, второе событие происходит, если станция отключается от точки доступа. В нашей функции event_handler() мы проверяем, соответствует ли идентификатор события Wi-Fi одному из этих двух событий. Если да, то в терминал будет выведен MAC-адрес станции вместе с соответствующим сообщением в зависимости от типа события.

wifi_init_softap()

Функция wifi_init_softap() будет вызываться внутри функции app_main() для инициализации Wi-Fi в режиме программной точки доступа для ESP32.

ESP-IDF предоставляет полезный макрос ESP_ERROR_CHECK(), который используется для проверки наличия или отсутствия ошибки.

Здесь мы инициализируем lwIP с помощью функции esp_netif_init() и создаём задачу IwIP, также известную как задача TCP/IP. lwIP — это стек библиотек TCP/IP, предоставляемый ESP-IDF, который используется для выполнения различных протоколов, таких как TCP, UDP, DHCP и т. д.

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

Кроме того, следующая строка используется для инициализации Wi-Fi по умолчанию в режиме точки доступа. Этот API используется для инициализации, а также регистрации обработчиков событий для интерфейса по умолчанию, который в нашем случае является точкой доступа. Он создает экземпляр сетевого интерфейса, связывающий драйвер Wi-Fi и стек TCP/IP. Эта функция отвечает за создание объекта esp_netif с конфигурацией точки доступа Wi-Fi по умолчанию, подключение netif к Wi-Fi и регистрацию обработчиков Wi-Fi по умолчанию.

Настройка Wi-Fi

Затем мы инициализируем ресурс выделения Wi-Fi для драйвера Wi-Fi. Он отвечает за запуск задачи Wi-Fi. Он принимает единственный параметр cfg, который является указателем на уже инициализированную структуру конфигурации Wi-Fi, установленную в значение WIFI_INIT_CONFIG_DEFAULT(), так что инициализация конфигурации происходит со значениями по умолчанию. Здесь wifi_init_config_t — это структура, обозначающая параметры конфигурации стека Wi-Fi, которые передаются в функцию esp_wifi_init().

Далее, мы регистрируем экземпляр обработчика событий. Таким образом, задача приложения может зарегистрироваться для получения функции обратного вызова, которая будет прослушивать события Wi-Fi. Событие называется ‘ESP_EVENT_ANY_ID‘. Следовательно, она будет прослушивать все события Wi-Fi (ESP_EVENT_ANY_ID), и функция обратного вызова event_handler будет вызвана, если оно произойдет.

В этой части мы задаём SSID и пароль сети, к которой хотим подключить наш ESP32, а также назначаем параметры безопасности для настройки Wi-Fi.

Кроме того, мы устанавливаем режим Wi-Fi как точку доступа (AP). Для этого мы используем функцию esp_wifi_set_mode() и передаем в качестве параметра параметр WiFI_MODE_AP .

Затем мы назначаем SSID и пароль нашей сети. Таким образом, драйвер Wi-Fi настраивается с использованием учетных данных сети точки доступа и режима Wi-Fi.

Запуск Wi-Fi

Затем мы запускаем Wi-Fi-соединение с заданными нами настройками.

На этом этапе в журнале информации отображается сообщение wifi_init_softap finished, а также сведения о SSID и пароле точки доступа. Процесс инициализации Wi-Fi в режиме точки доступа завершен.

app_main()

Внутри функции app_main() мы сначала инициализируем NVS, вызвав функцию nvs_flash_init(). Затем мы проверим, не содержит ли раздел NVS пустых страниц или содержит ли он данные в формате, отличном от текущей версии кода. Если хотя бы одно из этих условий выполняется, мы сотрём флэш-память NVS с помощью функции nvs_flash_erase() и инициализируем её заново.

Затем мы выведем в терминале “ESP_WIFI_MODE_AP” и вызовем функцию wifi_init_softap() для инициализации Wi-Fi в режиме программной точки доступа (soft-AP).

Компиляция скетча

Для прошивки микросхемы введите следующую команду в последовательном терминале. Не забудьте заменить COM-порт на тот, через который подключена ваша плата.

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

Сначала в терминале отображается сообщение «ESP_WIFI_MODE_AP». Затем следует сообщение «wifi_init_softap finished», указывающее на то, что плата ESP32 теперь работает как точка доступа.

Теперь используйте свой ноутбук или мобильный телефон для подключения к сети Wi-Fi платы ESP32. Откройте устройство с поддержкой Wi-Fi и перейдите в раздел Wi-Fi. Найдите доступные сети Wi-Fi. Здесь вы увидите SSID вашей платы ESP32, который вы определили в файле Kconfig. В нашем случае мы установили SSID как ‘ESP32-Soft-AP’.

Нажмите на него и введите установленный вами пароль.

Теперь подключитесь к этой сети. На этом этапе, пока идёт процесс подключения, наш терминал ESP-IDF отображает следующие сообщения в журнале:

После успешного подключения станции к плате ESP32, работающей в режиме точки доступа, в журнале отображается MAC-адрес станции вместе с назначенным ей IP-адресом.

Это информационные записи в логах, которые выводятся при инициализации программного AP для ESP32, начале подключения станции к AP и при успешном подключении к нему.

Аналогично, если станция отключается от точки доступа, также выводятся соответствующие сообщения, как показано ниже:

Вам также может быть интересно прочитать:

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

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