在ESP32低功耗模式下,ULP协处理器是唯一能在深度睡眠中运行的处理器,可独立执行GPIO边沿检测。要实现边沿检测并保持WiFi连接,需分两步:首先,配置ULP程序监控GPIO,使用RTC GPIO(如GPIO0-5、25-27等)并设置边沿触发(上升/下降沿),通过RTC_IO寄存器或ulp_set_io_pullup等API初始化。ULP在检测到边沿后,可设置一个唤醒标志(如RTC_SLOW_MEM中的变量),然后调用ulp_wakeup_period或直接触发ESP32唤醒。其次,WiFi连接保持需在进入深度睡眠前启用WiFi的Modem Sleep模式(WiFi.setSleep(true)),并配置ESP32的定时唤醒(esp_sleep_enable_timer_wakeup)或ULP唤醒,但注意深度睡眠会断开WiFi,因此若需保持连接,应使用Light Sleep模式(esp_sleep_enable_wifi_wakeup),该模式下WiFi保持连接但CPU暂停,ULP仍可运行。实操建议:使用esp_sleep_enable_ulp_wakeup()使能ULP唤醒,并在ULP程序中用RTC_IO寄存器读取GPIO状态,通过比较前后值实现边沿检测。注意ULP程序需用汇编或C(通过esp32ulp工具链)编写,并确保GPIO配置为RTC功能。
mcuku 阿沐 · 2026-08-27