ESP32 Wi-Fi 入门:Station/AP/SmartConfig 三模式

把一颗 ESP32 放上电,第一件想干的事永远是——让它联网。但 Wi-Fi 模式那么多,Station、AP、SmartConfig,到底哪个该先学?本文用一张图、三段代码、五个坑,把 ESP32 入网三件套讲透。 

💡 一句话记住

 

Station 是「连别人的网」,AP 是「自己造个网」,SmartConfig 是「让手机告诉我密码」。

一、目标:能联网,才有 IoT

ESP32 的灵魂是 Wi-Fi。无论是上传温湿度数据、被 App 远程控制、还是 OTA 升级,第一步都是把它接入网络。ESP-IDF 给 Wi-Fi 模块定义了 3 种最常用工作模式,对应三类场景:

 
   
   
   
   
   
 

     

STA

     

连家里路由器

   

     

AP

     

自建热点配网

   

     

SC

     

手机广播配网

   

下面这张图把三种模式的角色关系画在一起:

 ESP32 三种 Wi-Fi 模式角色对照

     ① STA 模式      家里路由器      连接      ESP32  作为客户端  由 AP 分配 IP  场景: 联网上传数据

     ② AP 模式      ESP32  SSID: ESP32-AP            手机    电脑  ESP32 当 AP  场景: 首次配网 / 离线控制

     ③ SmartConfig      手机 App    )))  广播      路由器      监听      ESP32  嗅探广播帧解出  SSID + 密码  场景: 无屏设备一键配网

               

二、Station 模式:让 ESP32 当客户端

STA 是最常用的模式。ESP32 把自己当成一台手机,去连家里的路由器。ESP-IDF 把入网流程拆成 5 个步骤,记住这条主干线,其他模式都是它的变种:

2.1 五步入网模板

// 1. 初始化 NVS(存 Wi-Fi 凭据)
nvs_flash_init();

// 2. 初始化 TCP/IP + 事件循环
esp_netif_init();
esp_event_loop_create_default();
esp_netif_create_default_wifi_sta();

// 3. 初始化 Wi-Fi 驱动
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);

// 4. 设置模式 + 配置 SSID/密码
wifi_config_t wifi_cfg = {
  .sta = { .ssid = "MyWiFi", .password = "12345678" },
};
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(WIFI_IF_STA, &wifi_cfg);

// 5. 启动 + 连接
esp_wifi_start();
esp_wifi_connect();

2.2 事件机制:别在 main 里 while 等 IP

连不连得上、IP 拿没拿到,全靠事件回调,不是阻塞返回。三个事件必须挂:        

事件 触发时机 该做什么
WIFI_EVENT_STA_START 驱动启动完成 调 esp_wifi_connect
WIFI_EVENT_STA_DISCONNECTED 连接丢失/失败 重连或退避
IP_EVENT_STA_GOT_IP DHCP 拿到 IP 业务可以起来了
💡 提示:拿到 IP_EVENT_STA_GOT_IP 才算真正联网成功,仅仅触发 STA_CONNECTED 只代表二层关联完成,业务层还不能发 TCP/UDP。

三、AP 模式:让 ESP32 自己造个热点

AP(Access Point)模式下,ESP32 自己变成路由器,手机/电脑可以直接连它。最典型的场景是 首次开机配网:设备没存过家里 Wi-Fi 凭据时,先开个热点让用户连,再通过网页表单或 App 把 SSID/密码灌进来。

3.1 关键参数

参数 含义 建议值
ssid 热点名 ESP32-XXXX
authmode 加密方式 WPA2_PSK
channel 信道 1/6/11
max_connection 最多接几台 ≤ 4
password 密码长度 ≥ 8 字节

3.2 最小代码片段

wifi_config_t ap_cfg = {
  .ap = {
    .ssid = "ESP32-AP",
    .ssid_len = 0,
    .channel = 6,
    .password = "12345678",
    .max_connection = 4,
    .authmode = WIFI_AUTH_WPA2_PSK,
  },
};
esp_wifi_set_mode(WIFI_MODE_AP);
esp_wifi_set_config(WIFI_IF_AP, &ap_cfg);
esp_wifi_start();
⚠️ 误区:AP 模式默认 IP 是 192.168.4.1,不是 192.168.1.1。手机连上后访问网页配网要敲这个地址,不少新手在这里卡半小时。

四、SmartConfig:让手机把密码"喊"给设备

SmartConfig 是乐鑫和 TI 推广的一键配网方案。原理简单粗暴:手机连着家里 Wi-Fi,把 SSID 和密码编码进 UDP 组播/广播包的 长度字段或目的 MAC 中疯狂往外发;ESP32 进入 STA 模式后开混杂监听,逐个信道嗅探,解码出凭据,再走标准 STA 流程联网。

4.1 三种协议怎么选

类型 App 特点
ESPTOUCH 乐鑫 EspTouch 通用,最快
AIRKISS 微信小程序 免 App,腾讯生态
ESPTOUCH_AIRKISS 两个都支持 兼容模式

4.2 流程骨架

// STA 模式跑起来后启动 SC
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_start();
esp_smartconfig_set_type(SC_TYPE_ESPTOUCH);
smartconfig_start_config_t scfg =
    SMARTCONFIG_START_CONFIG_DEFAULT();
esp_smartconfig_start(&scfg);

// 事件回调里收到 SC_EVENT_GOT_SSID_PSWD
// → 取出 ssid/password → esp_wifi_connect()
💡 提示:SmartConfig 只支持 2.4 GHz,并且手机和路由器必须在同一个 SSID 下。5 GHz Wi-Fi、双频合一开启时常常配不上,先关 5G 试试。

五、三大常见翻车现场

下面这 3 个坑,几乎人人都踩过一次:

⚠️ 坑 1:没初始化 NVS 就调 esp_wifi_init,直接 ESP_ERR_NVS_NOT_INITIALIZED。Wi-Fi 凭据默认存 NVS,必须先 nvs_flash_init()。
⚠️ 坑 2:在 WIFI_EVENT_STA_DISCONNECTED 里无限快速重连,几秒就把路由器干懵。正确做法是指数退避,1s → 2s → 4s → 上限 30s。
⚠️ 坑 3:AP 模式下用 esp_netif_create_default_wifi_sta() 创建 netif,结果根本没 AP 的 DHCP 服务器。AP 要用 esp_netif_create_default_wifi_ap(),两个函数名只差 3 个字母。

六、模式选型口诀 

💡 一句话记住

 

有屏配 AP 网页填,无屏用 SC 一键来,量产固化走 STA,调试默认双共存。

实际项目中最稳妥的组合是「AP+STA 共存」:开机先 STA 连存档凭据,连 3 次失败就同时开 AP 让用户重新配,配完保存 NVS、关 AP、转纯 STA,鲁棒性最佳。 

🧠 五问自检 
Q1. 为什么 ESP32 默认推荐 STA 模式?
因为 99% 的 IoT 应用都需要联外网(上云、OTA、远控),STA 是接入家庭路由器的标准客户端模式。

 

Q2. 什么场景不该用 SmartConfig?
企业级路由器(强隔离、5G 单频、AP 隔离开启)、对配网时间敏感、需要静态密码可视化的场景;改用 AP 网页配网或 BLE 配网更稳。

 

Q3. 最常见的三个坑?
① 忘了 nvs_flash_init  ② 重连不退避把路由器打爆  ③ AP 错用 STA 的 netif 导致没 DHCP

 

Q4. 核心参数记忆口诀?
STA 等 GOT_IP,AP 用 192.168.4.1,SC 只走 2.4G。

 

Q5. 一句话总结?
三种模式各司其职:STA 联外网、AP 自建网、SmartConfig 接管配网,靠事件驱动而非阻塞轮询。
 
 

📌 长按图片可保存知识卡片

 

📖 参考资料    
[1] Espressif《ESP-IDF Wi-Fi API Reference》

   

乐鑫官方 Wi-Fi 驱动 API 文档,Station/AP/扫描全部接口的权威出处

   

docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html

      

[2] Espressif《Wi-Fi Driver Programming Guide》

   

ESP-IDF 编程指南,事件机制、连接流程、性能调优一站式说明

   

docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi-driver/index.html

     

[3] Espressif《SmartConfig API Reference》

   

ESPTOUCH/AIRKISS 一键配网协议官方说明与 API 列表

   

docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_smartconfig.html

    

   本系列「ESP32 开发实战」下一篇 ·
   《ESP32 ADC 的坑:为什么测出来的电压不准》
 

发表评论