Как стать автором
Обновить

Настройка soft-AP с использованием модуля Espressif и ESP-IDF

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.5K
Автор оригинала: Francesco

Перевод статьи с небольшими правками для 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 процесс обычно выглядит следующим образом:

  1. Модуль Espressif запускает временную точку доступа (soft-AP).

  2. Пользователь подключается к этой точке доступа.

  3. Модуль показывает веб-страницу, где запрашивает SSID и пароль.

  4. Пользователь вводит данные.

  5. Модуль завершает работу 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).

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

  1. Создайте проект на основе hello_world.

  2. Установите целевой чип .

  3. Выберите правильный порт (например, /dev/tty.usbserial-11320).

  4. Соберите, прошейте и запустите монитор.

Затем обновите содержимое 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.

NVS config
NVS config

В VSCode можно быстро открыть menuconfig перейдя в расширение ESP-IDS, а затем выбрать SDK Configuration Editor.

ESP-IDS menuconfig
ESP-IDS menuconfig

Работа с логами

Логи — очень полезный инструмент отладки. Для использования:

#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

  1. Задайте параметры AP:

#define ESP_WIFI_SSID "esp_tutorial"
#define ESP_WIFI_PASS "test_esp"
#define ESP_WIFI_CHANNEL 1
#define MAX_STA_CONN 2

В реальных проектах используйте NVS для хранения данных!

  1. Инициализируйте стек IP:

esp_netif_init();
esp_netif_create_default_wifi_ap();
  1. Инициализируйте 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();

}
  1. Обработайте 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-серверов и других сетевых решений.

Теги:
Хабы:
+4
Комментарии1

Публикации

Истории

Работа

Программист С
40 вакансий

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область