跳转至

省电模式

WiFi Power Save API

前置阅读:STA 连接

学习目标

  • 理解 WiFi 省电模式的原理——DTIM 间隔控制唤醒频率
  • 掌握省电模式的启用/禁用
  • 理解省电模式对功耗和延迟的 trade-off

规格与功能

STA 连接路由器后启用省电模式,降低功耗。对于电池供电的 IoT 设备,省电模式是必备功能。

基本概念

DTIM 和工作原理

路由器(AP)每 100ms 发送一个 Beacon,其中每 N 个 Beacon(DTIM 间隔)携带广播/组播数据指示。STA 在 DTIM Beacon 时唤醒接收数据,其他 Beacon 时休眠。

DTIM = 1:  B B B B B B B B B B   每个都醒(~100ms 延迟,功耗高)
DTIM = 3:  B . . B . . B . . B   每 3 个醒一次(~300ms 延迟,功耗 1/3)
DTIM = 10: B . . . . . . . . B   每 10 个醒一次(~1s 延迟,功耗 1/10)

DTIM 间隔由路由器决定,STA 无法修改。但可以让 STA 在每个 DTIM 时不醒来——省电模式就是这个开关。

功耗 vs 延迟

模式 唤醒频率 延迟 功耗 适用
Active 始终在线 < 1ms ~50mA 实时通信
Power Save DTIM 间隔 100ms~1s ~5mA 传感器定时上报

涉及 API

API 用途
wifi_sta_set_pm(enabled) 启用/禁用省电模式
wifi_get_power_save_mode() 查询当前状态

案例操作指导

STA 连接成功后启用省电模式,观察延迟变化。

关键配置

  • 省电模式:通过单一 API 开关控制
  • 启用时机:STA 连接成功后
  • 禁用时机:需要实时通信时(如 OTA 升级)

代码详解

启用省电模式

// STA 连接成功后 → 启用省电
static void wifi_event_cb(wifi_event_t event, void *data)
{
    if (event == WIFI_EVENT_STA_DHCP_SUCCESS) {
        wifi_sta_set_pm(true);  // 启用省电
        printf("[WiFi] power save enabled\n");
    }
}

动态切换

// 常规上报期间 → 省电
wifi_sta_set_pm(true);

// OTA 升级期间 → 关闭省电(需要低延迟)
wifi_sta_set_pm(false);

// 升级完成 → 恢复省电
wifi_sta_set_pm(true);