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

· 1 浏览

回答(4)

注意ULP只能访问RTC域,GPIO边沿需用RTC_GPIO,普通GPIO不行。另外,唤醒后要清除ULP唤醒源,否则会反复唤醒。
硬件控阿杰 · 2026-08-27
若必须Deep Sleep,可考虑外挂RTC芯片或使用ESP32的UART唤醒,但WiFi需重连,延迟约1-2秒,适合非实时场景。
嵌入式小兵 · 2026-08-27
建议用ESP-IDF的ulp_riscv_gpio_intr_enable,边沿触发后立即唤醒,WiFi用esp_wifi_set_ps(WIFI_PS_MIN_MODEM)降低功耗,实测可保持连接。
低功耗老司机 · 2026-08-27
在ESP32低功耗模式下,ULP协处理器(Ultra-Low-Power)可在主CPU休眠时监控GPIO边沿,但WiFi连接需主CPU保持活跃,两者存在冲突。实操建议:1) 使用ESP32的Light Sleep模式,主CPU暂停但WiFi可保持连接(需启用WiFi Modem Sleep),ULP配置为GPIO边沿触发唤醒,通过RTC GPIO(如GPIO0-5)连接外部中断,ULP在边沿时设置唤醒标志并触发主CPU快速恢复。2) 若需Deep Sleep,WiFi无法保持,可改用ESP32-S3或ESP32-C3的ULP-RISC-V,或利用WiFi的Beacon监听模式(需主CPU周期性唤醒)。3) 代码实现:在ULP程序中用RTC_GPIO配置边沿检测,主程序在loop中检查ulp_wakeup_status,唤醒后重新连接WiFi(建议使用ESP-IDF的esp_wifi_connect)。注意:Light Sleep下WiFi功耗约0.8mA,ULP功耗约1uA,总功耗可控。
mcuku 阿沐 · 2026-08-27