4、经典配网模式:SmartConfig(ESP-Touch)、蓝牙辅助配网、AP模式配网、二维码配网

配网,说白了就是让设备知道你家Wi-Fi的SSID和密码。我刚开始做物联网那会儿,设备还得用网线连电脑配置,用户体验差得离谱。后来各种无线配网方案冒出来了,今天咱们就把四种经典模式掰开揉碎讲清楚。

这四种模式各有各的适用场景,没有绝对的好坏。我个人的习惯是:量产产品优先考虑蓝牙辅助配网,低成本方案用SmartConfig,调试阶段用AP模式,固定场景用二维码。你想想看,选对了配网方式,用户第一印象就好了一大半。

核心观点:配网的本质是「信道协商」+「凭证传输」。设备不知道路由器的信道,也不知道密码,配网就是解决这两个未知数。

四种经典配网模式对比 SmartConfig ESP-Touch / 一键配网 蓝牙辅助配网 BLE + Wi-Fi 双模 AP 模式配网 设备开热点 二维码配网 扫码即配 核心差异:传输信道不同 → 用户体验不同 → 适用场景不同 传输方式 UDP 广播/组播 长度编码 传输方式 BLE GATT 服务 安全通道 传输方式 TCP Socket HTTP POST 传输方式 摄像头扫码 光学传输 选型建议 SmartConfig:成本最低,兼容性依赖路由器 | 蓝牙:体验最好,需双模芯片 AP 模式:兼容性最强,操作步骤多 | 二维码:适合固定网络环境 实际产品中常采用「蓝牙 + AP」双备方案

4.1 SmartConfig(ESP-Touch)

SmartConfig 是乐鑫最早推出来的一键配网方案,也叫 ESP-Touch。它的原理挺巧妙:手机把 SSID 和密码编码到 UDP 报文的长度字段里,设备在混杂模式下监听所有 Wi-Fi 包,从中解出配网信息。

说白了,就是设备还没连上路由器,但能「偷听」到空中的 Wi-Fi 数据包。我当年第一次调通这个流程时,觉得这招真绝——不需要设备先连上网络,就能把密码传过去。

经验之谈:SmartConfig 的成功率很大程度上取决于路由器。有些路由器会过滤组播包,或者加密方式特殊,导致设备收不到编码信息。我建议在产品说明里加一句:「如果配网失败,请尝试 AP 模式。」

ESP-Touch 的编码方式是这样的:

// 伪代码:ESP-Touch 编码逻辑
void encode_wifi_info(char *ssid, char *password) {
    // 1. 将 SSID 和密码拼接成特定格式
    char *data = malloc(strlen(ssid) + strlen(password) + 2);
    sprintf(data, "%s:%s", ssid, password);
    
    // 2. 对每个字节进行长度编码
    for (int i = 0; i < strlen(data); i++) {
        // 发送一个 UDP 包,包长 = 数据字节值 + 基准长度
        send_udp_packet(data[i] + BASE_LEN);
        delay(10); // 间隔 10ms
    }
    
    // 3. 发送结束标记
    send_udp_packet(0xFF + BASE_LEN);
}

设备端收到后,按包长减去基准长度,就能还原出原始数据。嗯,这里要注意:基准长度的选择很关键,太短容易被其他网络包干扰,太长又浪费带宽。

参数 推荐值 说明
基准长度 100 字节 低于常见 TCP ACK 包长,减少误判
发送间隔 10-20 ms 太快设备处理不过来,太慢用户体验差
重试次数 3-5 轮 防止丢包导致配网失败
超时时间 60 秒 超过此时间未收到视为失败

避坑指南:我曾经遇到过一个项目,SmartConfig 在测试环境百试百灵,到了用户家里死活配不上。查了两天才发现,用户的路由器开启了「WMM(Wi-Fi Multimedia)」模式,导致 UDP 包被优先调度,设备收不到稳定的编码序列。解决方案是在设备端增加滤波算法,只关注特定时间窗口内的包。

4.2 蓝牙辅助配网

蓝牙辅助配网是目前体验最好的方案之一。设备同时支持 BLE 和 Wi-Fi,手机先通过 BLE 与设备建立连接,然后把 Wi-Fi 凭证通过 GATT 服务写过去。

为什么说它体验好?因为 BLE 是双向通信,手机能实时知道设备是否收到了信息,还能做交互确认。我做的第一款带蓝牙配网的产品,用户反馈配网成功率从 SmartConfig 的 85% 直接飙到了 98%。

典型的蓝牙配网流程是这样的:

  1. 设备广播:设备上电后,BLE 广播特定 Service UUID,比如 0xFFE0
  2. 手机扫描:App 扫描到设备,发起连接
  3. 服务发现:手机发现 GATT 服务,找到配网 Characteristic
  4. 写入凭证:手机将 SSID + 密码写入设备
  5. 设备确认:设备收到后回复 ACK,然后切换 Wi-Fi 模式连接路由器
  6. 结果上报:设备通过 BLE 上报连接结果(成功/失败)
// 蓝牙配网 GATT 服务定义示例
// 配网服务 UUID: 0xFFE0
// 配网特征值 UUID: 0xFFE1

// 写入数据格式(JSON 或自定义协议)
{
    "ssid": "MyWiFi",
    "password": "12345678",
    "token": "a1b2c3d4"  // 可选,用于安全校验
}

// 设备端处理回调
void on_write_callback(uint8_t *data, uint16_t len) {
    // 解析 JSON
    cJSON *root = cJSON_Parse((char *)data);
    char *ssid = cJSON_GetString("ssid");
    char *password = cJSON_GetString("password");
    
    // 保存到 NVS
    nvs_save_wifi_config(ssid, password);
    
    // 回复 ACK
    send_ble_response("OK");
    
    // 切换 Wi-Fi 模式
    wifi_connect(ssid, password);
}

个人建议:蓝牙配网一定要做「超时回退」。如果设备在 30 秒内没有收到配网信息,应该自动进入低功耗休眠,而不是一直广播耗电。我习惯的做法是:广播 30 秒 → 休眠 5 分钟 → 再广播 30 秒,如此循环。

4.3 AP 模式配网

AP 模式是最「笨」但也最可靠的方法。设备自己开一个 Wi-Fi 热点,手机连上这个热点,然后通过 HTTP 或 Socket 把路由器信息传给设备。

你想想看,为什么它可靠?因为设备开热点是「自己说了算」,不存在路由器兼容性问题。我遇到过不少工业客户,他们宁愿多操作两步,也要用 AP 模式——稳定压倒一切。

AP 模式的标准流程:

  1. 设备启动 SoftAP,热点名通常叫 SmartDevice_XXXX
  2. 手机 Wi-Fi 切换到该热点
  3. 手机访问设备 IP(通常是 192.168.4.1)
  4. 在网页或 App 中输入路由器 SSID 和密码
  5. 设备收到后关闭热点,连接目标路由器
// AP 模式 HTTP 服务器伪代码
void start_ap_http_server() {
    // 1. 启动 SoftAP
    wifi_softap_config_t ap_config = {
        .ssid = "SmartDevice_001",
        .password = NULL,  // 开放热点,方便连接
        .channel = 6,
        .max_connection = 1
    };
    wifi_softap_start(&ap_config);
    
    // 2. 启动 HTTP 服务器
    http_server_start(80);
    
    // 3. 注册配网接口
    http_register_handler("/config", HTTP_POST, [](request *req) {
        char *ssid = req->get_param("ssid");
        char *password = req->get_param("password");
        
        // 保存并切换模式
        save_and_switch(ssid, password);
        
        return "OK";
    });
}

避坑指南:我曾经犯过一个低级错误——AP 模式的热点没有设置超时关闭。结果用户配完网,设备连上路由器了,但热点还开着,白白耗电。后来我加了个逻辑:设备成功连接路由器后,立即关闭 SoftAP。另外,热点名最好带上设备 MAC 后四位,方便用户区分多个设备。

4.4 二维码配网

二维码配网是个「取巧」的方案。它把 Wi-Fi 信息直接编码成二维码,贴在设备上或显示在屏幕上,手机扫码后自动解析并连接。

说白了,就是省去了「传输」这一步——信息已经提前写好了。这个方案最适合固定网络环境,比如工厂、仓库、智能家居网关。我见过一个智能灯的项目,出厂时就把家里 Wi-Fi 信息烧进二维码,用户扫码即用,体验极好。

二维码的编码格式通常遵循 Wi-Fi 联盟的规范:

// 二维码 Wi-Fi 配置格式
WIFI:T:WPA;S:MyWiFi;P:12345678;;

// 字段说明:
// T: 加密类型(WPA/WPA2/WEP/nopass)
// S: SSID
// P: 密码
// ;; 结束符

// 示例:开放网络
WIFI:T:nopass;S:GuestWiFi;;

// 示例:WPA2 加密
WIFI:T:WPA;S:HomeWiFi;P:password123;;

手机端扫码后,解析出 SSID 和密码,直接调用系统 Wi-Fi API 连接。整个过程用户只需要「扫一下」和「点确认」两步。

场景 二维码配网适用性 备注
家庭环境 一般 Wi-Fi 密码可能变更,二维码需重新生成
工厂/仓库 非常适合 网络固定,批量部署效率高
酒店/商场 适合 统一网络,二维码可印在房卡或宣传页上
户外设备 不适合 二维码易磨损,且网络环境多变

经验之谈:二维码配网有个隐藏坑——二维码的容错等级。我建议至少用 M 级(15% 容错),因为设备外壳上的二维码容易被刮花或沾灰。另外,二维码尺寸不要小于 2cm × 2cm,否则手机扫码距离太近反而对不上焦。

4.5 四种模式对比总结

好了,四种模式都讲完了。咱们来做个横向对比,方便你选型时参考:

维度 SmartConfig 蓝牙辅助 AP 模式 二维码
用户体验 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐
兼容性 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
硬件成本 最低 较高(需 BLE) 低 低
安全性 低 高 中 中
部署效率 高 高 低 最高
适用场景 消费类 IoT 中高端产品 工业/调试 固定网络

我个人建议:如果是做消费级产品,优先上蓝牙配网,用户体验是第一位的。如果成本敏感,SmartConfig 也能用,但一定要做好失败后的降级方案。AP 模式作为保底方案永远不要去掉——它虽然操作繁琐,但几乎不会失败。