FedEx 2026-yil oxirida 2000 ta elektr yuk mashinasini Harbingerdan sotib oladi
FedEx 2026-yil oxirida Harbingerdan 2000 ta elektr yuk mashinasini $300 millionga sotib olishga kelishib oldi.

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.
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:
Shu bilan biz Wi-Fi sozlashni avtomatiklashtirish uchun zarur bo'lgan asbob-uskunalarni tayyorladik.
ESP32 oilasiga mansub mahsulotlarda bir nechta Wi-Fi sozlash usullari mavjud. Ushbu usullar:
Bizning maqsadimiz barcha ushbu usullarni sinab ko'rishdir.
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.
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.
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 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.
Claude Code ushbu oqimlarni mustaqil ravishda qayta bajarishi mumkin.
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.
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