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

· 2 浏览

回答(4)

实操技巧:使用`esp_sleep_enable_ulp_wakeup()`和`ulp_set_wakeup_period`,并确保ULP程序在唤醒后清除中断标志,防止重复唤醒。
电源优化师 · 2026-08-27
注意:Deep Sleep下WiFi状态无法保持,若业务要求实时连接,可改用ESP32-S3的LP内核或外挂协处理器,但成本增加。
嵌入式小兵 · 2026-08-27
补充:ULP唤醒后,主CPU需快速处理事件,建议将WiFi重连逻辑放在`esp_wifi_set_keep_alive`或事件循环中,避免阻塞。
低功耗老手 · 2026-08-27
ESP32在低功耗模式下,ULP协处理器可独立于主CPU运行,用于GPIO监测和唤醒。要实现GPIO中断唤醒并保持WiFi连接,需注意:ULP唤醒后主CPU会从Deep Sleep恢复,但WiFi连接会断开,因为Deep Sleep会关闭WiFi。若需保持连接,建议使用Modem Sleep(Light Sleep)模式,此时WiFi可保持连接但功耗较高。若必须用Deep Sleep,则无法保持WiFi连接,需在唤醒后重新连接。实操建议:1) 配置ULP程序监测GPIO,使用RTC GPIO(如GPIO0-5)作为唤醒源;2) 在ULP中设置唤醒条件(如边沿触发),并调用`esp_deep_sleep_start()`前启用ULP唤醒;3) 唤醒后,主CPU执行`esp_wifi_connect()`重新连接WiFi,并保存必要状态(如IP)到RTC内存以加速恢复。若需低功耗且保持连接,可考虑Light Sleep搭配WiFi的`esp_wifi_set_ps(WIFI_PS_MIN_MODEM)`,但功耗约10mA。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器