Hardware

ESP32 uchun Wi-Fi sozlashni avtomatiklashtirish

1-oktabr, 2026, 07:546 ko'rish5 daqiqa o'qish
ESP32 uchun Wi-Fi sozlashni avtomatiklashtirish

Har bir mijoz yangi Wi-Fi bilan jihozlangan mahsulotni qabul qilganda, birinchi narsa Wi-Fi sozlashdir. Bu jarayon har doim ishlamasligi mumkin emas. Bu muammo Groundrun tizimi bilan hal qilinishi mumkin. Ushbu tizimni qanday sozlash va qanday ishlatishni ko'rib chiqamiz.

Tizimni sozlash

ESP32 uchun Wi-Fi sozlashni avtomatiklashtirish uchun biz bir nechta qadamlarni bajarishimiz kerak. Bu jarayonda biz ESP32-C6 devboarddan foydalanamiz. Groundrun tizimi bilan bu jarayon juda oddiy:

The app's home screen: a plain white background with a list of five purple buttons, one per Wi-Fi commissioning mechanism, labeled BLE provisioning, BLE + QR provisioning, SmartConfig, SoftAP provisio
  • ESP32-C6 plitani USB orqali Groundrun tizimiga ulang.
  • Android telefonni USB orqali shu Groundrun tizimiga ulang.

Shu bilan biz Wi-Fi sozlashni avtomatiklashtirish uchun zarur bo'lgan asbob-uskunalarni tayyorladik.

Wi-Fi komissiyasi

ESP32 oilasiga mansub mahsulotlarda bir nechta Wi-Fi sozlash usullari mavjud. Ushbu usullar:

  • Bluetooth: Telefon Bluetooth Low Energy orqali plitaga ulanadi va tarmoq nomini va parolni yuboradi.
  • Soft AP: Plita o'zining vaqtinchalik Wi-Fi tarmog'ini boshlaydi va telefon ushbu tarmoqqa ulanib, haqiqiy kredensiallarni yuboradi.
  • Wi-Fi captive portal: Mehmondorxonada yoki aeroportda Wi-Fi login sahifasi kabi ishlaydi. Telefon avtomatik ravishda web sahifasiga yo'naltiriladi va kredensiallarni kirita oladi.
  • SmartConfig: Espressifning o'z usuli, ESP32-da ESPTouch v2 sifatida ishlaydi va ESP-IDF SDKga kiritilgan. Telefon uy tarmog'iga ulanib qoladi va kredensiallarni kodlangan paketlar oqimida tarqatadi. Plita, hali hech qanday tarmoqqa ulanmagan, promiskuous rejimda tinglaydi.
  • WPS (Wi-Fi Protected Setup): Wi-Fi Alliance standarti. Routerda tugmani bosish orqali plita o'zini tarmoqqa ulanadi va kredensiallarni router bilan bevosita muzokaralaydi.

Bizning maqsadimiz barcha ushbu usullarni sinab ko'rishdir.

A flow builder step list for SmartConfig: launching the provisioner app, opening SmartConfig, broadcasting the rig's Wi-Fi credentials, and confirming over the board's own serial line that it joined.

Smartfon ilovasi

Ko'p hollarda, sizda allaqachon smartfon ilovangiz bo'lishi mumkin. Bizning holatimizda, bizga faqat Wi-Fi ulanishini namoyish qilish uchun oddiy ilova kerak edi. Shuning uchun Claude ilovani tezda ishlab chiqardi. Ilova har bir usul uchun to'g'ri baytlarni to'g'ri vaqtda yuborishi kerak.

Ilova ko'rinishidan qattiq talab qilinmaydi va ko'rinishi ham yaxshi emas.

Firmware

Mavjud ulanishli mahsulot uchun firmware allaqachon yozilgan. Bizning holatimizda, biz AI dasturlash vositalari firmwareni tushunishi uchun eng yaxshi amaliyotlarni qo'llashimiz kerak. Claude firmware kodini biz uchun ishlab chiqardi. Groundrun tizimi ESP32 firmware bilan ishlash uchun zarur mahoratlarni ta'minlaydi va biz har bir Wi-Fi sozlash mexanizmini amalga oshiruvchi kod fayllariga ega bo'ldik.

The same SmartConfig flow shown as a swimlane sequence diagram between the installer, the provisioner app, and the ESP32-C6 board.

Claude Code tizimga va uning asbob-uskunalariga kirish imkoniyatiga ega bo'lgani uchun, bu ishni mustaqil ravishda bajaradi. Bizga maqsad, maqsad va to'xtash sharti beriladi, shuning uchun u nima maqsadga erishish va qachon to'xtash kerakligini biladi.

Natijada olingan firmware kod quyidagicha ko'rinadi (bu WPS mexanizmi):

void app_main(void)
{
ESP_ERROR_CHECK(nvs_flash_init());
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
assert(sta_netif);
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &got_ip_event_handler, NULL));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));

/* Read any Wi-Fi credentials esp_wifi's own config store already holds
* (WIFI_STORAGE_FLASH, the default -- backed by NVS) BEFORE starting
* the driver. A freshly mass-erased board has none; a board that
* already completed WPS once and rebooted does. */
wifi_config_t stored_config;
memset(&stored_config, 0, sizeof(stored_config));
esp_err_t get_config_err = esp_wifi_get_config(WIFI_IF_STA, &stored_config);
bool has_stored_creds = (get_config_err == ESP_OK) && (stored_config.sta.ssid[0] != '\0');
ESP_ERROR_CHECK(esp_wifi_start());
if (has_stored_creds) {
    esp_wifi_connect();
} else {
    start_wps();
}
}

Foydalanuvchi oqimlarini sozlash

Foydalanuvchi oqimlari oddiy: foydalanuvchi ilovani ochadi, Wi-Fi parolini kirita oladi va ESP32 tarmoqqa ulanadi. Har bir usulning o'ziga xosliklari bor, shuning uchun har bir usul uchun o'zining oqimi mavjud. Claude bu xaritalashuvni amalga oshirdi va har bir oqimni Groundrun flow builderida yozdi.

An automated regression run showing green checks for captive-portal provisioning, WPS provisioning, Bluetooth provisioning, SmartConfig provisioning, and SoftAP provisioning, alongside the update scen

Claude Code ushbu oqimlarni mustaqil ravishda qayta bajarishi mumkin.

Testlarni bajarish

Endi barcha narsalar ishga tushirildi, shuning uchun biz Wi-Fi sozlash oqimlarini, Groundrun koordinatori orqali interaktiv ravishda va Continuous Integration (CI) regressiya testlari sifatida bajarishimiz mumkin.

Biz har bir o'zgarishda bu regressiya testlarini bajaramiz: tizimdagi har qanday o'zgarish bu qismda mustahkam qolishi kerak.

void app_main(void)
{
    ESP_ERROR_CHECK(nvs_flash_init());
    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());
    esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
    assert(sta_netif);

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));

    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &got_ip_event_handler, NULL));

    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));

    /* Read any Wi-Fi credentials esp_wifi's own config store already holds
     * (WIFI_STORAGE_FLASH, the default -- backed by NVS) BEFORE starting
     * the driver. A freshly mass-erased board has none; a board that
     * already completed WPS once and rebooted does. */
    wifi_config_t stored_config;
    memset(&stored_config, 0, sizeof(stored_config));
    esp_err_t get_config_err = esp_wifi_get_config(WIFI_IF_STA, &stored_config);
    bool has_stored_creds = (get_config_err == ESP_OK) && (stored_config.sta.ssid[0] != '\0');

    ESP_ERROR_CHECK(esp_wifi_start());

    if (has_stored_creds) {
        esp_wifi_connect();
    } else {
        start_wps();
    }
}

Ushbu regressiya yurishlarida biz ESP32 uchun OTA yangilanishni buzish haqidagi testlarni ham bajaramiz.

Vaqtni hisoblash

Har bir CI yurishi avtomatik ravishda vaqt bilan belgilanadi va koordinator har bir qadamni alohida yozib oladi, shuning uchun biz vaqtni qanday sarflaganimizni aniqlashimiz mumkin: firmwareni yuklash, ilovani o'rnatish va ishga tushirish, mexanizmini bajarish va plita tarmoqqa ulanishini tasdiqlash uchun kutish.

Grafik shuni ko'rsatadiki, flash va boot har doim 22 dan 24 sekundgacha vaqt oladi, SmartConfigdan tashqari, u ikkinchi plitani yuklashni talab qiladi va bu fazani 37 sekundgacha uzaytiradi. Shundan keyin, mexanizm segmenti usulga qarab sezilarli darajada farq qiladi, shuning uchun u alohida taqqoslashga arziydi.

Shunday ajratilgan holda, Soft AP mexanizmi vaqti WPSning 13 baravaridan ko'p, bu uning tizim dialogi va ko'p ekranli oqimiga mos keladi. SmartConfig va WPS ikkalasi ham 15 sekunddan kam vaqt oladi, Bluetoothdan ortda qoladi.

Asl manba: groundrun.io

Manba: Hacker News
#ESP32 #Wi-Fi #Groundrun #avtomatiklashtirish #firmware
Telegram da muhokama qilish