重连
WiFi STA API、重连策略
前置阅读:STA 模式 — 连接路由器
学习目标
- 理解 WiFi 断线原因和检测机制
- 掌握
wifi_sta_set_reconnect_policy()配置自动重连 - 掌握
wifi_sta_fast_connect()快速重连 - 理解自动重连与省电模式的交互
基本概念
重连策略的两个层级
| 层级 | 机制 | 配置 |
|---|---|---|
| SDK 内置 | wifi_sta_set_reconnect_policy() |
间隔、次数 |
| 应用层兜底 | SDK 重连失败后的自定义策略 | 全信道扫描 |
快速连接
wifi_sta_fast_connect() 跳过全信道扫描,直接连上次成功的信道和 BSSID——重连时间从 2~5 秒缩短到 < 500ms。
sequenceDiagram
participant W as WS63
participant AP as 路由器
Note over W,AP: 正常连接
AP--xW: 断线(信号弱/路由器重启)
Note over W: 检测到 DISCONNECTED
loop 自动重连
W->>W: 等待 5 秒
W->>AP: 快速连接(上次 BSSID)
alt 成功
AP-->>W: 重连成功
else 失败
W->>W: 增加等待间隔
end
end
涉及 API
| API | 用途 |
|---|---|
wifi_sta_set_reconnect_policy(enable, seconds, max_retry) |
配置自动重连 |
wifi_sta_fast_connect(&fast_request) |
快速连接 |
wifi_sta_get_ap_info() |
获取当前 AP 信息 |
wifi_register_event_cb() |
监听连接/断开事件 |
案例说明
做什么
STA 连接路由器后启用 SDK 自动重连 → 断开后 5 秒内自动恢复。SDK 内置重连 + 应用层兜底的双层策略。
关键配置
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 重连间隔 | 初始 5s,最大 60s | 指数退避 |
| 最大重试 | 0 = 无限 | 产品化设备常用 |
| 快速连接 | 记录上次 BSSID+信道 | < 500ms 重连 |
代码详解
/* 连接成功后启用 SDK 自动重连 */
wifi_sta_set_reconnect_policy(1, 5, 0);
/* enable=1, interval=5s, max_retry=0(无限) */
/* 断线事件处理 */
static void wifi_event_cb(wifi_event_t event, void *data) {
if (event == WIFI_EVENT_DISCONNECTED) {
printf("WiFi disconnected, auto reconnecting...\n");
/* SDK 自动开始重连——无需手动干预 */
}
}
/* 快速连接——跳过扫描 */
wifi_sta_fast_connect_t fast = {
.ssid = saved_ssid,
.bssid = saved_bssid,
.channel = saved_channel
};
wifi_sta_fast_connect(&fast);
/* 应用层兜底——SDK 重连 10 次失败后 */
if (retry_count > 10) {
wifi_sta_scan(); // 全信道扫描
wifi_sta_connect(&scan_result);
}