娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

ESP32學(xué)習(xí)筆記(5)——WiFi接口使用(STA和AP模式)

發(fā)布者:Joyful222Life最新更新時(shí)間:2025-03-04 來源: jianshu關(guān)鍵字:ESP32  STA  AP模式 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一、概述

Wi-Fi 庫支持配置及監(jiān)控 ESP32 Wi-Fi 連網(wǎng)功能。

支持配置:

  • 基站模式(即 STA 模式或 Wi-Fi 客戶端模式),此時(shí) ESP32 連接到接入點(diǎn) (AP)。


  • AP 模式(即 Soft-AP 模式或接入點(diǎn)模式),此時(shí)基站連接到 ESP32。


  • AP-STA 共存模式(ESP32 既是接入點(diǎn),同時(shí)又作為基站連接到另外一個(gè)接入點(diǎn))。

  • 上述模式的各種安全模式(WPA、WPA2 及 WEP 等)。

  • 掃描接入點(diǎn)(包括主動(dòng)掃描及被動(dòng)掃描)。

  • 使用混雜模式監(jiān)控 IEEE802.11 Wi-Fi 數(shù)據(jù)包。

ESP-IDF 編程指南——Wi-Fi

二、API說明

以下 WIFI 接口位于 esp_wifi/include/esp_wifi.h。

2.1 esp_wifi_init

2.2 esp_wifi_set_mode

2.3 esp_wifi_get_mode

2.4 esp_wifi_start

2.5 esp_wifi_connect

2.6 esp_wifi_disconnect

2.7 esp_wifi_scan_start

2.8 esp_wifi_get_mac

2.9 esp_wifi_set_config

2.10 esp_wifi_get_config

三、AP模式

3.1 一般場(chǎng)景

3.2 Wi-Fi/LwIP初始階段

如上圖中 1.11.21.31.4 所示,分別


初始化LwIP

創(chuàng)建LwIP核心任務(wù)并初始化與LwIP相關(guān)的工作。




ESP_ERROR_CHECK(esp_netif_init());

初始化Wi-Fi事件處理

Wi-Fi事件處理基于esp_event庫。Wi-Fi驅(qū)動(dòng)程序會(huì)將事件發(fā)送到默認(rèn)事件循環(huán)。應(yīng)用程序可以在使用進(jìn)行注冊(cè)的回調(diào)中處理這些事件esp_event_handler_register()。esp_netif組件還處理Wi-Fi事件,以提供一組默認(rèn)行為。例如,當(dāng)Wi-Fi站連接到AP時(shí),esp_netif將自動(dòng)啟動(dòng)DHCP客戶端(默認(rèn)情況下)。




// 創(chuàng)建系統(tǒng)事件任務(wù)并初始化應(yīng)用程序事件的回調(diào)函數(shù)。ESP_ERROR_CHECK(esp_event_loop_create_default());// 創(chuàng)建具有TCP / IP堆棧的默認(rèn)網(wǎng)絡(luò)接口實(shí)例綁定AP。esp_netif_create_default_wifi_ap();ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,

                                                    ESP_EVENT_ANY_ID,

                                                    &wifi_event_handler,

                                                    NULL,

                                                    NULL));

初始化Wi-Fi




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

3.3 Wi-Fi配置階段



wifi_config_t wifi_config = {

        .ap = {

            .ssid = EXAMPLE_ESP_WIFI_SSID,

            .ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),

            .channel = EXAMPLE_ESP_WIFI_CHANNEL,

            .password = EXAMPLE_ESP_WIFI_PASS,

            .max_connection = EXAMPLE_MAX_STA_CONN,

            .authmode = WIFI_AUTH_WPA_WPA2_PSK        },

    };

    if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) {

        wifi_config.ap.authmode = WIFI_AUTH_OPEN;

    }


    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));

    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config));

3.4 Wi-Fi啟動(dòng)階段



ESP_ERROR_CHECK(esp_wifi_start());

3.5 Wi-Fi連接階段

當(dāng)有終端接入或斷開連接時(shí),產(chǎn)生 WIFI_EVENT_AP_STACONNECTED 或 WIFI_EVENT_AP_STADISCONNECTED 事件。




static void wifi_event_handler(void* arg, esp_event_base_t event_base,

                                    int32_t event_id, void* event_data){

    if (event_id == WIFI_EVENT_AP_STACONNECTED) {

        wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data;

        ESP_LOGI(TAG, 'station 'MACSTR' join, AID=%d',

                 MAC2STR(event->mac), event->aid);

    } else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {

        wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data;

        ESP_LOGI(TAG, 'station 'MACSTR' leave, AID=%d',

                 MAC2STR(event->mac), event->aid);

    }}

3.6 完整代碼



/*  WiFi softAP Example


   This example code is in the Public Domain (or CC0 licensed, at your option.)


   Unless required by applicable law or agreed to in writing, this

   software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR

   CONDITIONS OF ANY KIND, either express or implied.

*/#include #include 'freertos/FreeRTOS.h'#include 'freertos/task.h'#include 'esp_system.h'#include 'esp_wifi.h'#include 'esp_event.h'#include 'esp_log.h'#include 'nvs_flash.h'#include 'lwip/err.h'#include 'lwip/sys.h'/* The examples use WiFi configuration that you can set via project configuration menu.


   If you'd rather not, just change the below entries to strings with

   the config you want - ie #define EXAMPLE_WIFI_SSID 'mywifissid'

*/#define EXAMPLE_ESP_WIFI_SSID      CONFIG_ESP_WIFI_SSID#define EXAMPLE_ESP_WIFI_PASS      CONFIG_ESP_WIFI_PASSWORD#define EXAMPLE_ESP_WIFI_CHANNEL   CONFIG_ESP_WIFI_CHANNEL#define EXAMPLE_MAX_STA_CONN       CONFIG_ESP_MAX_STA_CONNstatic const char *TAG = 'wifi softAP';static void wifi_event_handler(void* arg, esp_event_base_t event_base,

                                    int32_t event_id, void* event_data){

    if (event_id == WIFI_EVENT_AP_STACONNECTED) {

        wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data;

        ESP_LOGI(TAG, 'station 'MACSTR' join, AID=%d',

                 MAC2STR(event->mac), event->aid);

    } else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {

        wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data;

        ESP_LOGI(TAG, 'station 'MACSTR' leave, AID=%d',

                 MAC2STR(event->mac), event->aid);

    }}void wifi_init_softap(void){

    ESP_ERROR_CHECK(esp_netif_init());

    ESP_ERROR_CHECK(esp_event_loop_create_default());

    esp_netif_create_default_wifi_ap();


    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();

    ESP_ERROR_CHECK(esp_wifi_init(&cfg));


    ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,

                                                        ESP_EVENT_ANY_ID,

                                                        &wifi_event_handler,

                                                        NULL,

                                                        NULL));


    wifi_config_t wifi_config = {

        .ap = {

            .ssid = EXAMPLE_ESP_WIFI_SSID,

            .ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),

            .channel = EXAMPLE_ESP_WIFI_CHANNEL,

            .password = EXAMPLE_ESP_WIFI_PASS,

            .max_connection = EXAMPLE_MAX_STA_CONN,

            .authmode = WIFI_AUTH_WPA_WPA2_PSK        },

    };

    if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) {

        wifi_config.ap.authmode = WIFI_AUTH_OPEN;

    }


    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));

    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config));

    ESP_ERROR_CHECK(esp_wifi_start());


    ESP_LOGI(TAG, 'wifi_init_softap finished. SSID:%s password:%s channel:%d',

             EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS, EXAMPLE_ESP_WIFI_CHANNEL);}void app_main(void){

    //Initialize NVS

    esp_err_t ret = nvs_flash_init();

    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {

      ESP_ERROR_CHECK(nvs_flash_erase());

      ret = nvs_flash_init();

    }

    ESP_ERROR_CHECK(ret);


    ESP_LOGI(TAG, 'ESP_WIFI_MODE_AP');

    wifi_init_softap();}


四、STA模式

4.1 一般場(chǎng)景

4.2 Wi-Fi/LwIP初始階段

如上圖中 1.11.21.31.4 所示,分別


初始化LwIP

創(chuàng)建LwIP核心任務(wù)并初始化與LwIP相關(guān)的工作。


ESP_ERROR_CHECK(esp_netif_init());

初始化Wi-Fi事件處理

Wi-Fi事件處理基于esp_event庫。Wi-Fi驅(qū)動(dòng)程序會(huì)將事件發(fā)送到默認(rèn)事件循環(huán)。應(yīng)用程序可以在使用進(jìn)行注冊(cè)的回調(diào)中處理這些事件esp_event_handler_register()。esp_netif組件還處理Wi-Fi事件,以提供一組默認(rèn)行為。例如,當(dāng)Wi-Fi站連接到AP時(shí),esp_netif將自動(dòng)啟動(dòng)DHCP客戶端(默認(rèn)情況下)。


// 創(chuàng)建系統(tǒng)事件任務(wù)并初始化應(yīng)用程序事件的回調(diào)函數(shù)。ESP_ERROR_CHECK(esp_event_loop_create_default());// 創(chuàng)建具有TCP / IP堆棧的默認(rèn)網(wǎng)絡(luò)接口實(shí)例綁定基站。esp_netif_create_default_wifi_sta();esp_event_handler_instance_t instance_any_id;esp_event_handler_instance_t instance_got_ip;ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,

                                                    ESP_EVENT_ANY_ID,

                                                    &event_handler,

                                                    NULL,

                                                    &instance_any_id));ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,

[1] [2] [3]
關(guān)鍵字:ESP32  STA  AP模式 引用地址:ESP32學(xué)習(xí)筆記(5)——WiFi接口使用(STA和AP模式)

上一篇:ESP32學(xué)習(xí)筆記(6)——Log日志庫使用
下一篇:ESP32學(xué)習(xí)筆記(4)——UART串口使用

0

推薦閱讀最新更新時(shí)間:2025-04-09 14:29

ESP32學(xué)習(xí)筆記(22)——ADC接口使用
一、概述 ESP32 集成了 2 個(gè) 12 位逐次逼近模數(shù)轉(zhuǎn)換器 (SARADC),支持 18 個(gè)測(cè)量通道(模擬使能引腳)。 支持以下通道: ADC1: 8通道:GPIO32 - GPIO39 ADC2: 10個(gè)通道:GPIO0、GPIO2、GPIO4、GPIO12-GPIO15、GOIO25-GPIO27 ESP-IDF 編程指南——ADC 1.1 ADC限制 Wi-Fi 驅(qū)動(dòng)程序使用了 ADC2。因此,應(yīng)用程序只能在未啟動(dòng) Wi-Fi 驅(qū)動(dòng)程序時(shí)使用 ADC2。 某些 ADC2 引腳用作捆扎引腳(GPIO 0,2,15),因此無法自由使用。 ESP32 DevKitC : 由于外部自動(dòng)編程電路,無法
[單片機(jī)]
ESP32學(xué)習(xí)筆記(8)——TCP客戶端
一、TCP與UDP優(yōu)缺點(diǎn) 1、TCP面向連接(如打電話要先撥號(hào)建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接。 2、TCP提供可靠的服務(wù)。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保證可靠交付。 TCP通過校驗(yàn)和,重傳控制,序號(hào)標(biāo)識(shí),滑動(dòng)窗口、確認(rèn)應(yīng)答實(shí)現(xiàn)可靠傳輸。如丟包時(shí)的重發(fā)控制,還可以對(duì)次序亂掉的分包進(jìn)行順序控制。 3、UDP具有較好的實(shí)時(shí)性,工作效率比TCP高,適用于對(duì)高速傳輸和實(shí)時(shí)性有較高的通信或廣播通信。 4、每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信。 5、TCP對(duì)系統(tǒng)資源要求較多,UDP對(duì)系統(tǒng)資源要求較少。
[單片機(jī)]
樂鑫旗艦級(jí)芯片 ESP32通過了藍(lán)牙 Bluetooth LE 5.0 認(rèn)證!
據(jù)樂鑫官方微信消息,2019 年 11 月 30 日,樂鑫的旗艦級(jí)芯片 ESP32 通過了藍(lán)牙技術(shù)聯(lián)盟(Bluetooth SIG)Bluetooth LE 5.0?的認(rèn)證。 這標(biāo)志著 ESP32 Controller 支持的協(xié)議版本從 Bluetooth LE 4.2 升級(jí)到了 Bluetooth LE 5.0,具有更高的穩(wěn)定性和兼容性。Bluetooth LE 5.0 越來越成為當(dāng)前藍(lán)牙芯片的主流版本,這樣一來,ESP32 將更好地兼容和適配其他藍(lán)牙 5.0 芯片,在藍(lán)牙及物聯(lián)網(wǎng)領(lǐng)域發(fā)揮優(yōu)勢(shì)。 樂鑫成立于2008 年,是一家專注于物聯(lián)網(wǎng)和人工智能領(lǐng)域的無線通訊芯片及方案的跨國(guó)研發(fā)公司,在全球多個(gè)地區(qū)設(shè)立了銷售與研發(fā)中心
[手機(jī)便攜]
工程師自制低成本免維護(hù)地面自動(dòng)氣象站提升天氣預(yù)報(bào)準(zhǔn)確
準(zhǔn)確的天氣預(yù)報(bào)仍然是一個(gè)開放的科學(xué)問題。 傳統(tǒng)上,自動(dòng)氣象站(AWS)可以使用固態(tài)傳感器輕松監(jiān)控溫度,壓力和濕度,但風(fēng)和降水通常涉及機(jī)械部件,實(shí)現(xiàn)穩(wěn)健性/可靠性的成本較高,定期維護(hù)和繁瑣的安裝。 它們的成本從幾百美元到幾千美元,并且由于所需SIM卡的GSM / 3G數(shù)據(jù)計(jì)劃,通常會(huì)帶來額外的運(yùn)行費(fèi)用。 因此,只有在大城市才能找到天氣愛好者,大學(xué)等部署的公共AWS,世界上大多數(shù)農(nóng)村/貧困地區(qū)根本沒有地面天氣數(shù)據(jù) - 這通常是他們最需要的地方。 即使在擁有大量AWS的大城市,也沒有足夠的天氣數(shù)據(jù)來提供現(xiàn)代氣象服務(wù),例如實(shí)時(shí)降雨雷達(dá)超級(jí)本地天氣警報(bào)和臨近預(yù)報(bào)。 這些服務(wù)所需的數(shù)據(jù)傳統(tǒng)上需要多普勒天氣雷達(dá),由于其成本極高而很少
[嵌入式]
工程師自制低成本免維護(hù)地面自動(dòng)氣象站提升天氣預(yù)報(bào)準(zhǔn)確
添点儿料...
无论热点新闻、行业分析、技术干货……
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 绍兴市| 双辽市| 中阳县| 武穴市| 石楼县| 高平市| 兴仁县| 沁阳市| 商都县| 大英县| 曲阜市| 沙坪坝区| 浙江省| 阿鲁科尔沁旗| 滨海县| 朝阳县| 东丽区| 微山县| 叶城县| 苏尼特左旗| 梓潼县| 马尔康县| 蒲江县| 崇信县| 鄂托克前旗| 湖北省| 嵩明县| 荔浦县| 苗栗市| 多伦县| 五家渠市| 乐至县| 富宁县| 邢台市| 尉氏县| 徐闻县| 乐山市| 留坝县| 临湘市| 兰考县| 工布江达县|