一、概述
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
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,
上一篇:ESP32學(xué)習(xí)筆記(6)——Log日志庫使用
下一篇:ESP32學(xué)習(xí)筆記(4)——UART串口使用
推薦閱讀最新更新時(shí)間:2025-04-09 14:29

設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌穩(wěn)居微控制器領(lǐng)域榜首,鞏固其在全球車用半導(dǎo)體市場(chǎng)的領(lǐng)導(dǎo)地位
- 迅為imx6ull開發(fā)板使用c語言調(diào)用shell命令控制led燈
- 迅為IMX8MM開發(fā)板Android編譯環(huán)境搭建
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的使用
- 迅為ITOP4412開發(fā)板Qt界面添加圖片
- 迅為IMX6開發(fā)板OTA遠(yuǎn)程升級(jí)-SWUpdata概述和使用
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的搭建
- 迅為IMX6開發(fā)板Buildroot文件系統(tǒng)4G撥號(hào)上網(wǎng)工具測(cè)試
- 實(shí)驗(yàn)分享丨迅為IMX6ULL開發(fā)板點(diǎn)亮第一個(gè)led燈
- RDR-805 - 100W USB PD 3.0 帶 3.3 V-21 V PPS 電源,使用 InnoSwitch3-Pro 和 VIA Labs VP302 控制器
- 智能語音分類垃圾桶(基于CW32和CI1122)
- 使用 NXP Semiconductors 的 TL431AI 的參考設(shè)計(jì)
- DER-110 - 7.3 W 雙輸出非隔離電源
- LTC1622,Zeta 轉(zhuǎn)換器(3.3V,1A)
- eTQFP144封裝的SPC58 4B,C,E和G線的微型插座模塊
- 使用 ON Semiconductor 的 STK350-010 的參考設(shè)計(jì)
- 使用 ADA4077-4ARUZ-R7 雙電源高精度放大器用于低功耗線性化 RTD 電路的典型應(yīng)用電路
- U盤寫保護(hù)擴(kuò)展板
- ADR443A 3 Vout 超低噪聲、LDO XFET 電壓基準(zhǔn)的典型應(yīng)用,具有電流吸收器和電流源
- TE Connectivity在推動(dòng)長(zhǎng)期可持續(xù)發(fā)展目標(biāo)方面取得顯著進(jìn)展
- 世索科攜一系列用于半導(dǎo)體制造的先進(jìn)材料亮相Semicon China 2025
- TITAN Haptics助力中國(guó)健康產(chǎn)業(yè)的革新
- 汽車線束布置的四大注意事項(xiàng)
- 什么原因?qū)е缕囉秃母吆秃桶l(fā)動(dòng)機(jī)轉(zhuǎn)速高
- 莫仕的電容式背光設(shè)計(jì)在汽車應(yīng)用的五大設(shè)計(jì)挑戰(zhàn)與方案
- 關(guān)于車載Ethernet降噪措施的必要性
- 學(xué)子專區(qū)論壇- ADALM2000實(shí)驗(yàn):脈寬調(diào)制
- 車載以太網(wǎng)的靜噪措施
- 未來自動(dòng)駕駛汽車會(huì)不會(huì)造成道路擁堵?
- 有獎(jiǎng)直播預(yù)報(bào)名|TI 新一代Sitara™ AM62處理器革新人機(jī)交互——加速邊緣AI的開發(fā)
- 免費(fèi)申請(qǐng)?jiān)u測(cè):1.3元起的國(guó)產(chǎn)USB和Touchkey單片機(jī)CH554評(píng)估板
- EEWORLD E金礦榮耀登場(chǎng)!為夢(mèng)想加分!
- 物聯(lián)網(wǎng)年中大考:無線連接技術(shù)知多少?
- 下載有禮嘍!2017年泰克亞太專家大講堂第三期: 超寬帶復(fù)雜電磁信號(hào)產(chǎn)生與實(shí)時(shí)分析技術(shù)
- 學(xué)最新DLP課程,跟帖搶樓贏好禮!
- 2023 DigiKey KOL 系列——將TinyML融入IoT物聯(lián)網(wǎng)應(yīng)用中
- 將想法變成現(xiàn)實(shí),Maxim MAX32630FTHR創(chuàng)意設(shè)計(jì)大賽,重磅開啟!
- 只為汽車更安全,下載 TI DRV3000系列產(chǎn)品手冊(cè),搶樓截圖入好禮嘍!
- 看完本文的對(duì)比,是選智能投影還是智能電視你就有數(shù)了
- 特定用途集成電路芯片(ASIC)的成本計(jì)算
- 加密貨幣比的泡沫是否已經(jīng)擠完了?
- 福建寧德已成為全球最大的聚合物鋰離子電池生產(chǎn)基地
- 網(wǎng)約車呈野火燎原之勢(shì)增長(zhǎng),2028年增長(zhǎng)率將達(dá)到10.6%
- 基于CSE7761的智能漏電保護(hù)設(shè)計(jì)方案
- cob光源是什么意思
- led吸頂燈調(diào)色溫是怎樣實(shí)現(xiàn)的
- 本田智能汽車為智能玻璃變色車窗申專利:電流通過時(shí)會(huì)變暗
- 數(shù)字化儀表的興起與嵌入式HMI系統(tǒng)應(yīng)用