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

ESP32 · 潘东芯片应用 · 65 浏览

回答(4)

若需保留MQTT或TCP会话,还需保存socket fd和序列号,但ESP32不支持直接恢复,建议改用MQTT持久会话(clean_session=0)配合RTC保存clientID。
网络协议控 · 2026-08-27
硬件迷途:同意楼上的,STM32 上先排除硬件再查固件,顺序对了问题就好找。
建议使用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
网络协议控:这个提醒太及时了,我们正好在调 I2C 时序,试试你的方案。
★ 精华
在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),需精简数据,避免保存大缓冲区。
潘东芯片应用 · 2026-08-27