ESP32 在低功耗模式下,如何用RTC内存保存WiFi连接状态实现秒级重连?

· 2 浏览

回答(4)

补充:保存BSSID和信道能跳过扫描,但需注意AP变更时需重新扫描,建议在重连失败后回退到全扫描逻辑。
网络协议控 · 2026-08-27
补充:若需更快的唤醒,可考虑light sleep而非deep sleep,保留WiFi模块状态,但功耗更高;deep sleep适合间隔大于1秒的场景。
低功耗攻城狮 · 2026-08-27
补充:用esp_wifi_set_bandwidth和esp_wifi_set_protocol提前设置,可减少重连时的协商时间,尤其在2.4GHz频段下效果明显。
无线调试老手 · 2026-08-27
ESP32在低功耗模式下实现秒级重连的关键是利用RTC快速存储器(RTC_FAST_MEM)保存WiFi连接所需的上下文,包括SSID、密码、BSSID、信道和IP配置。具体做法:在进入deep sleep前,调用esp_wifi_get_config和esp_netif_get_ip_info获取当前连接参数,并通过esp_sleep_get_wakeup_cause判断唤醒源,若为定时器或GPIO唤醒,则使用esp_wifi_set_storage(WIFI_STORAGE_RAM)将配置写入RTC内存。唤醒后,先初始化NVS和WiFi驱动,再调用esp_wifi_set_config恢复保存的参数,并设置esp_wifi_set_ps(WIFI_PS_NONE)以快速重连。实测可达到200-500ms重连。注意:需启用CONFIG_ESP32_WIFI_RTOS_IDLE_TASK和CONFIG_PM_ENABLE,且RTC内存容量有限(约8KB),建议只保存必要结构体,避免存储大数组。若使用ESP32-S3,可改用RTC_SLOW_MEM以增加稳定性。
mcuku 阿沐 · 2026-08-27