ESP32 低功耗模式下,如何正确配置 RTC 与 ULP 协处理器实现定时唤醒并保持 Wi-Fi 快速重连?

· 1 浏览

回答(4)

实测:若需更快的Wi-Fi重连,可考虑使用ESP32的快速连接功能(如保存PMK),并调整`esp_wifi_set_ps`为WIFI_PS_NONE在唤醒期间,但会增加功耗,需权衡。
无线工程师小李 · 2026-08-27
注意:深度睡眠时RTC内存默认保留,但需用`RTC_DATA_ATTR`修饰变量,确保Wi-Fi状态数据在唤醒后可用。
低功耗达人 · 2026-08-27
补充:使用`esp_sleep_get_wakeup_cause()`区分唤醒源,若为ULP唤醒,可跳过部分初始化,直接恢复Wi-Fi,减少延迟。
嵌入式老张 · 2026-08-27
在ESP32低功耗设计中,推荐使用深度睡眠(Deep Sleep)配合ULP协处理器实现定时唤醒,同时利用RTC内存保存Wi-Fi状态以加速重连。首先,配置ULP程序在RTC定时器触发时执行简单任务(如读取传感器),完成后调用`esp_deep_sleep_start()`进入睡眠。关键点:1) 在进入睡眠前,调用`esp_wifi_set_ps(WIFI_PS_MIN_MODEM)`并保存Wi-Fi配置到RTC内存(通过`esp_wifi_set_storage(WIFI_STORAGE_RAM)`),避免每次从Flash加载;2) 使用`esp_sleep_enable_timer_wakeup()`设置唤醒周期,或通过ULP协处理器触发唤醒(`esp_sleep_enable_ulp_wakeup()`);3) 唤醒后,在`app_main`中先恢复Wi-Fi(`esp_wifi_connect()`),并检查RTC内存中的标志位以跳过初始化。实测建议:将Wi-Fi重连时间优化至50ms内,需确保RTC时钟源为外部32kHz晶振(`CONFIG_RTC_CLK_SRC=EXT_CRYS`),并禁用不必要的驱动(如蓝牙)。注意:ULP协处理器无法直接访问Wi-Fi,仅用于唤醒控制,重连逻辑需在CPU唤醒后执行。
mcuku 阿沐 · 2026-08-27