Перевод статьи с небольшими правками для ESP-IDF 4.4.5.
В этом руководстве показано, как настроить soft-AP с использованием модуля Espressif и ESP-IDF. Оно охватывает процесс создания проекта, настройки Wi-Fi и обработки событий подключения с помощью event loop и логирования.
В любом Wi-Fi-приложении первым шагом является установление соединения между устройством и маршрутизатором. В терминологии Wi-Fi устройство называется станцией (STA), а маршрутизатор — точкой доступа (AP). В большинстве случаев модуль Espressif работает как станция, подключаясь к существующему маршрутизатору. Однако перед этим пользователь должен пройти процесс provisioning — то есть ввести SSID и пароль маршрутизатора.
Существует несколько способов provisioning, но наиболее распространённые — это через Bluetooth и Wi-Fi. При использовании Wi-Fi процесс обычно выглядит следующим образом:
-
Модуль Espressif запускает временную точку доступа (soft-AP).
-
Пользователь подключается к этой точке доступа.
-
Модуль показывает веб-страницу, где запрашивает SSID и пароль.
-
Пользователь вводит данные.
-
Модуль завершает работу soft-AP и переходит в режим станции, подключаясь к маршрутизатору.
Даже если ваше приложение в основном работает в режиме станции, вам может понадобиться настроить soft-AP для этапа provisioning.
Поскольку provisioning — частая задача, это руководство будет дополнено ещё одним, где показано, как настроить HTTP-сервер для получения SSID и пароля от пользователя.
Для реальных приложений лучше использовать более надёжное решение, например Unified Provisioning framework. Он позволяет настраивать ESP-устройства через Wi-Fi (SoftAP) или Bluetooth LE с использованием различных схем безопасности.
Что нужно до начала
Убедитесь, что вы:
-
Можете скомпилировать и прошить пример
hello_world. Используйте либоidf.py, либо расширение ESP-IDF для VS Code. -
Имеете отладочную плату Espressif. В примере используется ESP32-C3-DevkitM-1, но подойдёт любая плата от Espressif, (прим. в моем случае — это ESP32-S3).
-
Понимаете разницу между Wi-Fi точкой доступа (AP) и станцией (STA).
Создание нового проекта
-
Создайте проект на основе
hello_world. -
Установите целевой чип .
-
Выберите правильный порт (например,
/dev/tty.usbserial-11320). -
Соберите, прошейте и запустите монитор.
Затем обновите содержимое hello_world_main.c следующим кодом:
#include #include "sdkconfig.h" void app_main(void) { printf("Hello tutorial!\n"); }
Переименуйте файл в basic_soft_ap.c и обновите CMakeLists.txt:
idf_component_register(SRCS "basic_http_server.c" PRIV_REQUIRES INCLUDE_DIRS "")
Если переименовывать файл в VSCode, то он автоматически обновит имя в
CMakeLists.txt.
Сделайте полную очистку проекта, пересоберите и снова прошейте. Каждый раз при изменении CMakeLists.txt требуется делать полную очистку.
На практике — не всегда необходимо делать полную очистку, т.к. билд занимает много времени
Отключите NVS, чтобы избежать предупреждений в menuconfig. Найдите и снимите галочки с опций, связанных с NVS.
В VSCode можно быстро открыть menuconfig перейдя в расширение ESP-IDS, а затем выбрать SDK Configuration Editor.
Работа с логами
Логи — очень полезный инструмент отладки. Для использования:
#include "esp_log.h" static const char* TAG = "my_module"; ESP_LOGI(TAG, "Server connection with code %d", server_code);
Уровни логов:
-
ESP_LOGE— ошибка -
ESP_LOGW— предупреждение -
ESP_LOGI— информация -
ESP_LOGD— отладка -
ESP_LOGV— подробный вывод
Запуск soft-AP
-
Задайте параметры AP:
#define ESP_WIFI_SSID "esp_tutorial" #define ESP_WIFI_PASS "test_esp" #define ESP_WIFI_CHANNEL 1 #define MAX_STA_CONN 2
В реальных проектах используйте NVS для хранения данных!
-
Инициализируйте стек IP:
esp_netif_init(); esp_netif_create_default_wifi_ap();
-
Инициализируйте event loop:
Создайте функцию wifi_init_softap, в которой выполните всю настройку.
#include #include #include "sdkconfig.h" #include "esp_log.h" #include "esp_wifi.h" #define ESP_WIFI_SSID "esp_demo" #define ESP_WIFI_PASS "esp_demo" #define ESP_WIFI_CHANNEL 1 #define MAX_STA_CONN 2 static const char *TAG = "Basic soft-AP"; static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { ESP_LOGI(TAG, "Event %d!\n", event_id); //%ld заменено на %d из-за ошибки комп. } void wifi_init_softap() { esp_netif_init(); esp_event_loop_create_default(); esp_netif_create_default_wifi_ap(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); // always start with this esp_wifi_init(&cfg); esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, NULL); wifi_config_t wifi_config = { .ap = { .ssid = ESP_WIFI_SSID, .ssid_len = strlen(ESP_WIFI_SSID), .channel = ESP_WIFI_CHANNEL, .password = ESP_WIFI_PASS, .max_connection = MAX_STA_CONN, .authmode = WIFI_AUTH_WPA2_PSK // .pmf_cfg = { В версии 4.4.5 такой опции нет // .required = true, // }, }, }; esp_wifi_set_mode(WIFI_MODE_AP); esp_wifi_set_config(WIFI_IF_AP, &wifi_config); esp_wifi_start(); ESP_LOGI(TAG, "wifi_init_softap finished. SSID:%s password:%s channel:%d", ESP_WIFI_SSID, ESP_WIFI_PASS, ESP_WIFI_CHANNEL); } void app_main(void) { printf("Hello soft-ap tutorial!\n"); wifi_init_softap(); }
-
Обработайте Wi-Fi события:
static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data){ printf("Event nr: %ld!\n", event_id); //в случае ошибки изменить %ld }
Соберите, прошейте, запустите монитор. Подключитесь к сети esp_tutorial со смартфона. В терминале появится Event nr: 14!, что означает WIFI_EVENT_AP_STACONNECTED.
Вывод консоли до подключения смартфона
I (1567) Basic soft-AP: wifi_init_softap finished. SSID:esp_demo password:esp_demo channel:1 I (1567) Basic soft-AP: Event 12!
Вывод консоли после подключения
I (2307617) wifi:new:<1,1>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1 I (2307617) wifi:station: 04:b1:67:37:a2:a2 join, AID=1, bgn, 40U I (2307747) Basic soft-AP: Event 14! I (2307867) esp_netif_lwip: DHCP server assigned IP to a station, IP is: 192.168.4.2 I (2308647) wifi:idx:2 (ifx:1, 04:b1:67:37:a2:a2), tid:0, ssn:13, winSize:64
Заключение
Вы узнали, как:
-
Создать новый проект на базе
hello_world -
Инициализировать библиотеку
esp_netif -
Настроить event loop
-
Запустить soft-AP
-
Проверить события подключения
Это основа для построения более сложных Wi-Fi приложений: клиентов MQTT, HTTP-серверов и других сетевых решений.
ссылка на оригинал статьи https://habr.com/ru/articles/902444/
Добавить комментарий