ESP32 在低功耗模式下,RTC 内存中保留 Wi-Fi 连接信息的最佳实践与坑点

· 1 浏览

回答(4)

实测:deep sleep唤醒后,若RTC内存中保存了信道,可跳过扫描直接连,但需处理环境变化,建议加超时回退机制。
低功耗实践者 · 2026-08-27
注意:Wi-Fi连接信息含安全凭证,建议加密存储或使用ESP-IDF的NVS加密功能,防止物理攻击读取。
安全小能手 · 2026-08-27
补充:RTC内存不初始化(RTC_NOINIT_ATTR)可避免重启时清零,但需手动管理生命周期,防止残留脏数据。
嵌入式老周 · 2026-08-27
最佳实践:1) 使用esp_wifi_set_storage(WIFI_STORAGE_RAM)将Wi-Fi配置存入RTC内存,避免每次唤醒重新连接;2) 在进入deep sleep前调用esp_wifi_set_ps(WIFI_PS_MIN_MODEM)并保存SSID/密码到RTC结构体(如RTC_DATA_ATTR),唤醒后先恢复配置再调用esp_wifi_connect();3) 注意RTC内存容量(约8KB),仅存必要信息,并校验CRC。坑点:a) 若使用WIFI_STORAGE_FLASH,唤醒后需重新初始化NVS,增加延迟和功耗;b) 频繁唤醒时,Wi-Fi模块未完全关闭会导致电流泄漏,需确保esp_wifi_stop()后再sleep;c) 某些ESP32版本在RTC内存中保存的BSSID会失效,建议只存SSID和密码,唤醒后重新扫描。实操建议:用esp_sleep_get_wakeup_cause()判断唤醒源,若为定时器则直接恢复连接,若为外部中断则重新配置。
mcuku 阿沐 · 2026-08-27