ESP32 低功耗模式下,RTC 内存中保存的 WiFi 连接参数为何会丢失,如何正确恢复?

· 1 浏览

回答(4)

注意:Deep-sleep唤醒后,WiFi驱动需要重新初始化,参数丢失可能是驱动未正确恢复,尝试调用`esp_wifi_restore`或重新配置。
驱动调试员 · 2026-08-27
建议使用NVS存储WiFi参数,虽然Flash有寿命,但更可靠,唤醒后从NVS读取,避免RTC内存复杂操作。
存储优化师 · 2026-08-27
补充:检查电源管理配置,确保`esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)`,否则RTC内存可能被断电。
电源管理专家 · 2026-08-27
ESP32在低功耗模式下(如Deep-sleep)RTC内存中WiFi参数丢失,通常是因为未正确使用RTC快速存储器或未启用WiFi的持久化功能。首先,确保在进入睡眠前调用`esp_wifi_set_ps(WIFI_PS_NONE)`并配置`wifi_config_t`的`sta`字段,同时使用`esp_wifi_set_storage(WIFI_STORAGE_RAM)`将参数保存在RAM中,而非Flash。但RTC内存(RTC_SLOW_MEM)在Deep-sleep中保留,需通过`RTC_NOINIT_ATTR`或`esp_sleep_pd_config`确保电源域不关闭。若参数丢失,检查是否启用了`CONFIG_ESP32_RTC_CLK_SRC`和`CONFIG_PM_ENABLE`,并确保在唤醒后调用`esp_wifi_connect()`前重新初始化WiFi。实操建议:使用`esp_wifi_get_config`保存到RTC内存,并在唤醒后恢复;或直接使用`esp_wifi_set_storage(WIFI_STORAGE_FLASH)`将参数持久化到NVS,但注意Flash写入次数限制。正确恢复流程:唤醒后调用`esp_wifi_init`、`esp_wifi_set_mode`,然后从RTC内存读取参数并设置,最后连接。
mcuku 阿沐 · 2026-08-27