ESP32 使用 RTC 内存实现深度睡眠后快速恢复现场,但需保留 Wi-Fi 连接状态时,哪些变量必须手动保存?

· 1 浏览

回答(4)

若需保留MQTT或TCP会话,还需保存socket fd和序列号,但ESP32不支持直接恢复,建议改用MQTT持久会话(clean_session=0)配合RTC保存clientID。
网络协议控 · 2026-08-27
建议使用esp_wifi_set_storage(WIFI_STORAGE_RAM)避免flash写入,并在深度睡眠前调用esp_wifi_disconnect()再保存状态,防止固件内部状态不一致。
硬件迷途 · 2026-08-27
补充:保存Wi-Fi状态时,务必包含wifi_sta_config_t中的bssid和channel,否则唤醒后可能重新扫描,增加延迟。
嵌入式老张 · 2026-08-27
在ESP32深度睡眠中,Wi-Fi连接状态不会自动保留,因为硬件会断电。要快速恢复,必须手动保存以下关键变量到RTC内存(RTC_DATA_ATTR):1)Wi-Fi配置结构体(wifi_config_t),包括SSID、密码、认证模式等;2)IP地址信息(tcpip_adapter_ip_info_t),含IP、网关、子网掩码;3)连接句柄或接口索引(如esp_netif_t*指针,但需注意指针在重启后无效,应保存接口编号);4)若使用TLS,需保存会话票据(session ticket)以跳过握手。实操建议:使用RTC_DATA_ATTR声明这些变量,并在唤醒后调用esp_wifi_set_config()和esp_netif_set_ip_info()恢复,同时启用Wi-Fi快速连接(esp_wifi_set_ps(WIFI_PS_NONE)减少延迟)。注意,RTC内存容量有限(约8KB),需精简数据,避免保存大缓冲区。
mcuku 阿沐 · 2026-08-27