Перевод статьи с небольшими правками для 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-серверов и других сетевых решений.