ESP32 在低功耗模式下,如何用 RTC 定时器实现精确的周期唤醒并保持 Wi-Fi 快速重连?

· 2 浏览

回答(4)

实测建议:在唤醒后先调用esp_wifi_set_bandwidth(WIFI_BW_HT20)降低带宽,可减少重连时间约20%,但吞吐量会下降,适合仅需传输小数据的应用。
嵌入式小王 · 2026-08-27
若重连要求极高,可考虑使用ESP32的light sleep模式,保留Wi-Fi连接,但功耗约10mA,比deep sleep高,适合唤醒间隔短(<1s)的场景。
无线老兵 · 2026-08-27
注意:deep sleep期间RTC内存会保留,可将Wi-Fi配置和连接状态存入RTC快速内存(RTC_DATA_ATTR),唤醒后直接恢复,省去重新初始化开销。
低功耗老张 · 2026-08-27
核心方案:使用ESP32的deep sleep模式配合RTC定时器(RTC_TIMER)实现周期唤醒,同时利用ESP32的快速启动特性(CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP=y)跳过启动校验,将唤醒后Wi-Fi重连时间压缩至100ms内。具体步骤:1) 在唤醒源中配置RTC定时器(esp_sleep_enable_timer_wakeup(time_us)),time_us需精确到微秒,建议用esp_timer获取基准时间校准漂移;2) 唤醒后立即调用esp_wifi_start(),并设置Wi-Fi为STA模式且启用快速扫描(esp_wifi_set_config中的scan_method=WIFI_FAST_SCAN),同时保存上次连接的BSSID和信道(esp_wifi_get_ap_info),重连时直接指定,跳过扫描;3) 若需更低功耗,可关闭不必要的外设(如ADC、触摸),并启用Wi-Fi的modem sleep(esp_wifi_set_ps(WIFI_PS_MIN_MODEM)),但注意这会影响重连速度,需权衡。实测中,若RTC时钟源使用外部32.768kHz晶振,精度可达±20ppm,周期误差小于1秒/天。建议在唤醒后先同步RTC时间(如通过NTP),再计算下次唤醒时间,避免累积漂移。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器