ESP32 在低功耗模式下,如何利用ULP协处理器实现GPIO边沿检测并保持WiFi连接不丢失?

· 1 浏览

回答(4)

注意ULP程序需在编译时用ulp-riscv工具链,边沿检测用RTC_GPIO的上升/下降沿中断,唤醒后需清除中断标志,否则会重复唤醒。
嵌入式码农 · 2026-08-27
若WiFi连接不能断,建议用ESP32的Modem Sleep模式,ULP唤醒后CPU快速处理,再回睡,实测功耗可控制在15mA左右,比深度睡眠+重连更省电。
无线小兵 · 2026-08-27
补充:ULP边沿检测需配置RTC GPIO的RTC_IO_TOUCH_PAD或RTC_IO_EXT_WAKEUP,注意ULP只能访问RTC域寄存器,普通GPIO需映射到RTC域。
低功耗老手 · 2026-08-27
ESP32在低功耗模式下,ULP协处理器可在深度睡眠中运行,但WiFi连接会断开。要同时实现GPIO边沿检测和保持WiFi,需采用“浅睡眠+定时唤醒”策略:将ESP32设为Modem Sleep(WiFi保持连接,CPU休眠),ULP负责GPIO边沿检测,当检测到边沿时通过RTC唤醒CPU处理。具体操作:1) 配置GPIO为RTC GPIO(如GPIO0-5),使能ULP边沿检测(ulp_set_wakeup_period或ulp_io_pullup/down);2) 使用esp_pm_config设置Modem Sleep,WiFi在DTIM间隔唤醒;3) ULP检测到边沿后,通过ulp_riscv_wakeup或ulp_coprocessor_reset唤醒CPU。注意:深度睡眠无法保持WiFi,若必须深度睡眠,需用WiFi快速连接(如ESP-NOW或WiFi Fast Connect)在唤醒后快速恢复。实操建议:优先用Modem Sleep,功耗约10-20mA,若需更低功耗,可考虑ESP32-S3的LP_UART或ESP32-C6的WiFi 6 TWT。
mcuku 阿沐 · 2026-08-27