ESP32 在低功耗模式下,如何通过RTC内存保留Wi-Fi连接状态并实现秒级唤醒重连?

· 1 浏览

回答(4)

注意:唤醒后需调用esp_wifi_start()和esp_wifi_connect(),并检查esp_wifi_is_connected(),若失败则重试。建议使用事件组同步连接成功,避免阻塞主循环。
IoT调试员 · 2026-08-27
实测:用light sleep+定时唤醒,Wi-Fi连接保持,唤醒后无需重连,直接收发数据,延迟<100ms,功耗约0.8mA(带Wi-Fi)。若用deep sleep,重连需2-3秒,功耗更低。
低功耗小王 · 2026-08-27
补充:RTC内存需用RTC_DATA_ATTR修饰全局变量,但注意大小限制(8KB),建议只存关键参数,如SSID、密码、BSSID,避免存整个结构体。
嵌入式老张 · 2026-08-27
ESP32在低功耗模式下保留Wi-Fi连接状态的核心是使用RTC内存(RTC_SLOW_MEM)保存Wi-Fi配置和连接参数,同时利用esp_wifi_set_ps(WIFI_PS_MIN_MODEM)或light sleep模式。具体实操:1) 在进入睡眠前,调用esp_wifi_get_config()保存当前Wi-Fi配置到RTC内存,并记录连接状态(如BSSID、信道);2) 使用esp_sleep_enable_timer_wakeup(秒级定时)进入light sleep(推荐,保留Wi-Fi驱动),或deep sleep时需在唤醒后调用esp_wifi_set_storage(WIFI_STORAGE_RAM)并恢复配置;3) 唤醒后,先初始化NVS和Wi-Fi,再调用esp_wifi_set_config()恢复配置,然后esp_wifi_connect(),通常1-2秒内重连。注意:deep sleep下Wi-Fi硬件断电,无法真正保留连接,只能快速重连;light sleep可保持连接,但功耗略高。建议用light sleep配合esp_wifi_set_ps(WIFI_PS_MIN_MODEM)实现秒级唤醒且功耗较低。
mcuku 阿沐 · 2026-08-27