日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

启明云端分享|ESP32-S3 Smartconfig一键配网

發(fā)布時間:2024/10/14 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 启明云端分享|ESP32-S3 Smartconfig一键配网 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 物聯(lián)網(wǎng)時代技術(shù)開始規(guī)模化服務(wù)于民眾,方便快捷顯得尤為重要,smartconfig一鍵配網(wǎng)便是一個典型案例。
  • 智能家居/家電現(xiàn)階段還處于普及階段,由于家庭wifi網(wǎng)絡(luò)的普及,目前普遍采用wifi與路由器完成連接,與手機(jī)/云端進(jìn)行數(shù)據(jù)交互智能硬件,如智能插座,智能空調(diào),智能空氣凈化器,智能燈泡,智能門鎖由于不具備人機(jī)交互界面,不能像電腦一樣的搜索/選擇指定路由器,輸入連接SSID和密碼的界面,所以必須先解決正確連接路由問題。

ESP32-S3 Smartconfig一鍵配網(wǎng)

1.開發(fā)環(huán)境:
esp-idf版本 :master
esp-idf環(huán)境:ESP-IDF開發(fā)環(huán)境搭建
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/get-started/index.html

注:官方暫時沒有s3的安裝教程,可以參照32系列其他方式選擇master分支即可。
配網(wǎng)例程:esp-idf\examples\wifi\smart_config


2.硬件需求
Esp32-s3 開發(fā)板一塊
Usb數(shù)據(jù)線一條


3.一鍵配網(wǎng)(SmartConfig)連接過程:
1)ESP32 設(shè)備進(jìn)入初始化狀態(tài),開啟混監(jiān)聽所有網(wǎng)絡(luò)數(shù)據(jù)包。
2)手機(jī)連上 WiFi,開啟 APP 軟件,輸入手機(jī)所在 WiFi 密碼,請求配網(wǎng),發(fā)送UDP廣播包。
3)ESP32 通過 UDP 包(長度)獲取配置信息捕捉到路由 SSID 和 PASSWD,連接路由器。


4.配網(wǎng)APP
樂鑫官方:配網(wǎng)APP
https://www.espressif.com/zh-hans/support/download/apps
根據(jù)自己的手機(jī)系統(tǒng)選擇相應(yīng)的APP

例程分析:

// 在 event_handler 中,通過獲取不同的時間執(zhí)行相對應(yīng)的操作。 static void event_handler(void* arg, esp_event_base_t event_base,int32_t event_id, void* event_data) {if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {xTaskCreate(smartconfig_example_task, "smartconfig_example_task", 4096, NULL, 3, NULL);} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {esp_wifi_connect(); // 開始連接WiFixEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {xEventGroupSetBits(s_wifi_event_group, CONNECTED_BIT);} else if (event_base == SC_EVENT && event_id == SC_EVENT_SCAN_DONE) {ESP_LOGI(TAG, "Scan done");} else if (event_base == SC_EVENT && event_id == SC_EVENT_FOUND_CHANNEL) {ESP_LOGI(TAG, "Found channel");} else if (event_base == SC_EVENT && event_id == SC_EVENT_GOT_SSID_PSWD) {ESP_LOGI(TAG, "Got SSID and password");smartconfig_event_got_ssid_pswd_t *evt = (smartconfig_event_got_ssid_pswd_t *)event_data;wifi_config_t wifi_config;uint8_t ssid[33] = { 0 };uint8_t password[65] = { 0 };uint8_t rvd_data[33] = { 0 };bzero(&wifi_config, sizeof(wifi_config_t));memcpy(wifi_config.sta.ssid, evt->ssid, sizeof(wifi_config.sta.ssid));memcpy(wifi_config.sta.password, evt->password, sizeof(wifi_config.sta.password));wifi_config.sta.bssid_set = evt->bssid_set;if (wifi_config.sta.bssid_set == true) {memcpy(wifi_config.sta.bssid, evt->bssid, sizeof(wifi_config.sta.bssid));}memcpy(ssid, evt->ssid, sizeof(evt->ssid));memcpy(password, evt->password, sizeof(evt->password));ESP_LOGI(TAG, "SSID:%s", ssid);ESP_LOGI(TAG, "PASSWORD:%s", password);if (evt->type == SC_TYPE_ESPTOUCH_V2) {ESP_ERROR_CHECK( esp_smartconfig_get_rvd_data(rvd_data, sizeof(rvd_data)) );ESP_LOGI(TAG, "RVD_DATA:");for (int i=0; i<33; i++) {printf("%02x ", rvd_data[i]);}printf("\n");}ESP_ERROR_CHECK( esp_wifi_disconnect() );ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );esp_wifi_connect();} else if (event_base == SC_EVENT && event_id == SC_EVENT_SEND_ACK_DONE) {xEventGroupSetBits(s_wifi_event_group, ESPTOUCH_DONE_BIT);} } static void initialise_wifi(void) {ESP_ERROR_CHECK(esp_netif_init()); // 初始化底層TCP/IP堆棧s_wifi_event_group = xEventGroupCreate(); // 創(chuàng)建事件組 ESP_ERROR_CHECK(esp_event_loop_create_default()); // 創(chuàng)建默認(rèn)事件循環(huán)esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); // 創(chuàng)建默認(rèn)WIFI STA 在初始化錯誤的情況下,這個APl中止assert(sta_netif);wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); // 初始化WiFi//首先調(diào)用esp_event_loop_create_default() 創(chuàng)建默認(rèn)事件循環(huán)。//之后使用esp_event_handler_register() 將事件處理程序注冊到系統(tǒng)事件循環(huán)。ESP_ERROR_CHECK( esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL) );ESP_ERROR_CHECK( esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL) );ESP_ERROR_CHECK( esp_event_handler_register(SC_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL) );ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); // 將ESP32 wifi設(shè)置為sta模式ESP_ERROR_CHECK( esp_wifi_start() ); // 根據(jù)配置啟動WiFi為sta } // 創(chuàng)建事件組 s_wifi_event_group = xEventGroupCreate();,觸發(fā)相關(guān)事件則置標(biāo)志位,在任務(wù)中循環(huán)檢測標(biāo)志位處理相應(yīng)事件。 // smartconfig_example_task 任務(wù)中,獲取 CONNECTED_BIT 和 ESPTOUCH_DONE_BIT 表示連接上 AP 和 SmartConfig 配置完成。 static void smartconfig_example_task(void * parm) {EventBits_t uxBits;ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH) ); // 設(shè)置 SmartConfig 的協(xié)議類型smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT();ESP_ERROR_CHECK( esp_smartconfig_start(&cfg) ); //開始 smartconfig 一鍵配網(wǎng)while (1) {uxBits = xEventGroupWaitBits(s_wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY);if(uxBits & CONNECTED_BIT) {ESP_LOGI(TAG, "WiFi Connected to ap");}if(uxBits & ESPTOUCH_DONE_BIT) {ESP_LOGI(TAG, "smartconfig over");esp_smartconfig_stop(); // 配網(wǎng)結(jié)束,釋放 esp_smartconfig_start 占用的緩沖區(qū)。vTaskDelete(NULL);}} } void app_main(void) {ESP_ERROR_CHECK( nvs_flash_init() ); // 初始化NVS分區(qū)initialise_wifi(); // 初始化WiFi為sta模式,等待APP進(jìn)行配網(wǎng) }

配網(wǎng)操作流程:

1.搭建esp-idf環(huán)境
2.編譯smart_config例程

  • 設(shè)置target為S3 idf.py set-target esp32s3

  • 編譯工程 idf.py build

  • 3.燒錄到開發(fā)板
    idf.py flash
    多個設(shè)備需添加串口號(idf.py -p PORT [-b BAUD] flash)


    4.開啟監(jiān)視窗口
    idf.py monitor (idf.py -p PORT monitor)
    出現(xiàn)下面的打印就可以用APP進(jìn)行配網(wǎng)


    5.打開EspTouch APP (配網(wǎng)APP)
    1)手機(jī)連接到WiFi (目前ESP32系列只支持2.4G頻段)
    2)輸入WiFi密碼
    3)點(diǎn)擊確認(rèn),配網(wǎng)成功會顯示開發(fā)板的IP


    6.一鍵配網(wǎng)成功
    日志輸出如下,成功獲取到WiFi的賬號密碼
    并連接到此WiFi,smartconfig停止

    尾聲

    啟明云端作為樂鑫代理,希望我們分享的技術(shù)文檔參幫助到更多技術(shù)小伙伴!如果你需要相關(guān)樂鑫產(chǎn)品,可與我們的商務(wù)取得聯(lián)系,我們會第一時間為您提供樣品和技術(shù)支持!

    總結(jié)

    以上是生活随笔為你收集整理的启明云端分享|ESP32-S3 Smartconfig一键配网的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。