ESP32 在低功耗模式下,如何利用ULP协处理器实现GPIO唤醒并保持WiFi连接不中断?

· 3 浏览

回答(4)

注意:Modem Sleep下WiFi连接保持,但若长时间无数据,路由器可能踢掉连接,建议定期发送keepalive包(如MQTT ping),或使用ESP-IDF的WiFi省电模式配合。
网络协议控 · 2026-08-27
实操细节:ULP GPIO唤醒需配置`RTC_GPIO`,且唤醒后需清除中断标志,否则会反复唤醒。建议在ULP程序中设置去抖逻辑,避免误触发。
嵌入式小飞 · 2026-08-27
补充:若需更低功耗,可考虑ESP32-S3的ULP-RISC-V,支持更复杂逻辑,但WiFi保持需用Light Sleep,且注意唤醒后WiFi重连时间,建议用`esp_event`监听WiFi事件。
低功耗老王 · 2026-08-27
ESP32的低功耗模式(如Modem Sleep)下,ULP协处理器可独立运行并监控GPIO,但WiFi连接保持需要谨慎设计。核心思路:使用Modem Sleep模式(非Deep Sleep),此时WiFi基带关闭但协议栈保留,ULP可配置为GPIO边沿触发唤醒,唤醒后ESP32主核恢复并快速处理事件,WiFi连接不中断(因协议栈未释放)。实操建议:1)启用`esp_pm_config_esp32_t`设置`max_freq_mhz=240`和`min_freq_mhz=80`,并开启`light_sleep_enable`;2)ULP程序使用`ulp_set_wakeup_period`和`ulp_gpio_intr`配置GPIO唤醒,注意ULP唤醒源需在`esp_sleep_enable_ulp_wakeup()`中使能;3)在唤醒回调中,避免长时间阻塞,快速处理GPIO事件后返回睡眠,以维持低功耗。关键点:WiFi连接不中断依赖Modem Sleep而非Deep Sleep,且需确保`CONFIG_PM_ENABLE`开启,否则WiFi可能断连。实测中,Modem Sleep下电流约0.8mA,唤醒延迟约1ms,适合低频事件触发。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器