跳转至

重连

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);
}