ESP32 在WiFi连接状态下,如何利用RTC内存和ULP协处理器实现最低功耗的定时唤醒而不丢连接?

· 2 浏览

回答(4)

注意:RTC内存断电会丢失,所以必须用RTC_DATA_ATTR且保持RTC电源域(默认开启)。测试时用万用表测电流,Deep Sleep+ULP典型值约5-10uA(不含WiFi重连瞬间)。
电源控阿杰 · 2026-08-27
若想进一步降功耗,可关闭WiFi的射频前端(如用GPIO控制LDO),但需在唤醒后重新初始化。同时,用esp_wifi_set_ps(WIFI_PS_NONE)在唤醒后恢复全速。
低功耗小能手 · 2026-08-27
补充:ULP协处理器只能访问RTC域内存和寄存器,别用普通SRAM变量。用ulp_set_wakeup_period()设置周期,唤醒后检查esp_sleep_get_wakeup_cause()确认来源。
嵌入式老周 · 2026-08-27
要实现ESP32在WiFi连接下的最低功耗定时唤醒,核心是结合RTC内存保存WiFi状态和ULP协处理器进行超低功耗计时。具体做法:1) 在进入Deep Sleep前,调用esp_wifi_set_ps(WIFI_PS_MIN_MODEM)并保存WiFi配置和连接信息(如IP、BSSID)到RTC快速内存(RTC_DATA_ATTR),确保唤醒后能快速恢复连接;2) 使用ULP协处理器(如ULP-RISC-V或传统ULP-FSM)驱动外部32kHz晶振,设置定时器中断,在Deep Sleep期间维持计时,功耗可低至几微安;3) 唤醒后,先调用esp_wifi_connect()并等待事件,若连接丢失则自动重连(需启用WIFI_STA_DISCONNECTED事件处理)。注意:Deep Sleep期间WiFi完全关闭,无法保持实时连接,但通过RTC保存的会话信息可缩短重连时间(约100ms)。若需真正“不丢连接”,需改用Modem Sleep(Light Sleep),但功耗较高(约1mA)。建议根据业务容忍度选择:对实时性要求高用Light Sleep,否则用Deep Sleep+快速重连。实操中,用esp_sleep_enable_ulp_wakeup()配置ULP唤醒,并确保ULP程序在RTC内存中运行。
mcuku 阿沐 · 2026-08-27