3. Wi-Fi技术基础

在ESP32的Wi-Fi与BLE共存工程中,Wi-Fi是吞吐主力,BLE是低功耗交互通道。理解Wi-Fi的协议族、信道、连接流程以及ESP-IDF的API模型,是后续做共存调度、时隙分配和性能调优的前提。本节从协议栈到代码落地,梳理一条完整的知识链。

一、802.11协议族:从物理层到MAC层

IEEE 802.11并不是单一协议,而是一个协议族。ESP32系列主要支持802.11 b/g/n,部分型号支持802.11ax(Wi-Fi 6)。理解协议族的关键是区分“频段—调制—速率”三者的对应关系。

  • 802.11b:2.4 GHz,DSSS调制,最高11 Mbps,兼容性好但效率低。
  • 802.11g:2.4 GHz,OFDM调制,最高54 Mbps,与b后向兼容。
  • 802.11n:2.4/5 GHz,引入MIMO和40 MHz信道绑定,单流最高150 Mbps。
  • 802.11ax:引入OFDMA和TWT,提升密集场景效率,ESP32-C6等支持。

在MAC层,802.11采用CSMA/CA(载波侦听多路访问/冲突避免),而不是以太网的CSMA/CD。这意味着Wi-Fi是“先听再说、退避重传”的共享介质协议,这也是Wi-Fi与BLE共存时会产生时隙竞争的根本原因。

二、信道划分:2.4 GHz的“车道”与重叠

2.4 GHz频段被划分为14个信道,每个信道带宽20 MHz,但相邻信道中心频率仅相隔5 MHz,因此存在严重重叠。真正互不干扰的只有1、6、11三个信道。

信道中心频率是否常用说明
12412 MHz是与6、11互不重叠
62437 MHz是中间信道,常作默认
112462 MHz是与1、6互不重叠
132472 MHz部分地区中国可用,欧美受限
142484 MHz日本仅日本允许
BLE的广播信道恰好位于2402、2426、2480 MHz,与Wi-Fi信道1、6、11的边缘接近。共存设计时,若Wi-Fi固定在信道6,BLE广播仍会与Wi-Fi数据帧在时间上竞争,需要靠PTA或软件时分来协调。

三、连接流程:扫描、认证、关联、四次握手

Station接入AP的过程可分为四个阶段,每个阶段都有明确的帧交互:

  1. 扫描(Scan):主动扫描发送Probe Request,被动扫描监听Beacon。ESP-IDF中由esp_wifi_scan_start()触发。
  2. 认证(Authentication):开放系统或共享密钥认证,交换Authentication帧。
  3. 关联(Association):发送Association Request,AP回复Association Response,分配AID。
  4. 四次握手(4-Way Handshake):WPA2/WPA3下通过EAPOL交换PTK,完成密钥派生和加密启用。

只有四次握手完成后,数据帧才会被加密传输。若使用WPA3-SAE,还会先进行SAE握手,再进入四次握手。ESP-IDF的WIFI_EVENT_STA_CONNECTED事件在关联成功时触发,而IP_EVENT_STA_GOT_IP在DHCP完成后触发,二者不可混淆。

四、TCP/IP集成:LwIP与ESP-IDF的分层

ESP-IDF内置LwIP协议栈,Wi-Fi驱动位于LwIP之下,负责802.11帧与以太网帧的转换。应用层通过BSD Socket API访问网络,中间经过LwIP的IP层、TCP/UDP层。

应用层:HTTP / MQTT / Socket
   ↓
LwIP:TCP / UDP / IP / ICMP / DHCP
   ↓
Wi-Fi驱动:802.11 MAC / 加密 / 速率控制
   ↓
射频:2.4 GHz / 5 GHz PHY

在Station模式下,DHCP客户端由LwIP提供,连接成功后自动获取IP。在AP模式下,ESP32可内置DHCP服务器,为接入设备分配地址。若需要静态IP,可在esp_netif配置中关闭DHCP并手动设置。

五、ESP-IDF Wi-Fi API与Station/AP模式

ESP-IDF的Wi-Fi编程围绕esp_netif、esp_event和esp_wifi三个组件展开。典型Station初始化流程如下:

esp_netif_init();
esp_event_loop_create_default();
esp_netif_create_default_wifi_sta();

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

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

wifi_config_t wifi_config = {
    .sta = {
        .ssid = "MyAP",
        .password = "12345678",
        .threshold.authmode = WIFI_AUTH_WPA2_PSK,
    },
};
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
esp_wifi_start();
esp_wifi_connect();

AP模式则将WIFI_MODE_STA改为WIFI_MODE_AP,并配置ap.ssid、ap.password、ap.channel和ap.max_connection。ESP32也支持WIFI_MODE_APSTA,即同时作为Station和AP,这是共存工程中常见的拓扑。

Station模式关注“连得上、拿得到IP、传得稳”;AP模式关注“起得来、分得到地址、带得动设备”。两者共用同一射频,APSTA模式下Wi-Fi自身就要分时,再叠加BLE,时隙调度会更加紧张。

六、案例与误区复盘

案例:某智能灯使用ESP32 Station连接路由器,同时用BLE广播配网。现象是BLE广播间隔从100 ms抖动到300 ms,Wi-Fi吞吐也从8 Mbps降到3 Mbps。排查发现Wi-Fi默认开启省电模式WIFI_PS_MIN_MODEM,导致射频在睡眠与唤醒间频繁切换,与BLE广播抢占时隙。改为WIFI_PS_NONE后,Wi-Fi吞吐恢复,BLE抖动收敛到120 ms以内。

常见误区:

  • 把WIFI_EVENT_STA_CONNECTED当作“已联网”,实际上此时还没有IP,必须等IP_EVENT_STA_GOT_IP。
  • AP模式不设置信道,默认跟随上次配置,导致与BLE广播信道冲突加剧。
  • 忽略esp_wifi_set_ps()对共存的影响,省电模式会显著改变射频占空比。
  • 在事件回调中执行阻塞操作,导致Wi-Fi事件队列堆积,连接超时。

掌握协议族、信道、连接流程和API模型后,才能进一步理解Wi-Fi与BLE为何在同一射频上“抢时间”,以及如何通过软件配置和共存策略让两者稳定并行。

ESP32 Wi-Fi 连接流程与协议栈分层 应用层 HTTP / MQTT / Socket LwIP 协议栈 TCP / UDP / IP / DHCP Wi-Fi 驱动 802.11 MAC / 加密 / 速率 射频 PHY 2.4 GHz / 5 GHz Station 连接四阶段 扫描 Probe/Beacon 认证 Auth 帧 关联 Assoc Req/Rsp 四次握手(WPA2/WPA3) EAPOL / PTK 派生 WIFI_EVENT_STA_CONNECTED 关联成功,尚无 IP IP_EVENT_STA_GOT_IP DHCP 完成,可通信 2.4 GHz 信道重叠示意 CH1 CH2 CH3 CH6 CH7 CH11 CH1 / CH6 / CH11 互不重叠,为推荐信道组合