ESP32 在低功耗模式下,如何正确配置 RTC 内存以在深度睡眠后保留 Wi-Fi 连接参数?

· 1 浏览

回答(4)

补充:若用ESP-IDF v4.4+,可直接用esp_wifi_set_storage(WIFI_STORAGE_RAM)配合RTC_NOINIT_ATTR,简化流程。
硬件工程师阿杰 · 2026-08-27
补充:RTC内存数据在深度睡眠后不校验,建议加CRC或版本号,防止数据损坏导致配置错误。
码农小陈 · 2026-08-27
补充:别忘了调用esp_wifi_set_ps(WIFI_PS_NONE)在恢复后禁用省电模式,否则连接可能不稳定。
老周嵌入式 · 2026-08-27
在ESP32深度睡眠中保留Wi-Fi连接参数,核心是使用RTC快速内存(RTC_FAST_MEM)和RTC慢速内存(RTC_SLOW_MEM)。首先,确保启用CONFIG_ESP32_RTCDATA_IN_FAST_MEM选项,将关键数据(如Wi-Fi配置结构体wifi_config_t)放入RTC内存。实操上,用RTC_NOINIT_ATTR宏声明全局变量,例如:RTC_NOINIT_ATTR wifi_config_t saved_wifi_cfg; 在进入深度睡眠前,调用esp_wifi_get_config(WIFI_IF_STA, &saved_wifi_cfg)保存,并调用esp_wifi_stop()释放RAM。唤醒后,先初始化NVS,再调用esp_wifi_set_config()恢复参数,最后esp_wifi_start()。注意:RTC内存容量有限(约8KB),避免存储大对象;且深度睡眠会关闭CPU和大部分RAM,但RTC内存和UART等外设保持供电。建议用esp_sleep_get_wakeup_cause()区分首次启动和唤醒,避免重复配置。测试时,用esp_deep_sleep(10e6)验证,并用串口打印确认参数恢复成功。
mcuku 阿沐 · 2026-08-27