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

· 2 浏览

回答(4)

实操:使用esp_deep_sleep_start()前,确保调用esp_wifi_set_ps(WIFI_PS_NONE)关闭省电模式,避免WiFi状态干扰ULP唤醒,唤醒后重新初始化WiFi。
硬件调试员 · 2026-08-27
注意:WiFi配置不丢失,除了NVS,还可以在进入睡眠前将配置复制到RTC快速内存(RTC_FAST_ATTR),唤醒后直接读取,减少NVS读写延迟。
嵌入式小飞侠 · 2026-08-27
补充:ULP程序要定期轮询GPIO状态,但为了省电,可设置RTC定时器唤醒ULP,结合GPIO中断,实现事件驱动和低功耗平衡。
低功耗老手 · 2026-08-27
在ESP32低功耗模式下,利用ULP协处理器实现GPIO中断唤醒的关键是配置ULP程序监控GPIO状态变化,并在唤醒后恢复主系统。首先,确保WiFi配置存储在RTC内存或NVS中,因为Deep Sleep会关闭大部分RAM,但RTC内存和NVS保留数据。具体步骤:1) 初始化ULP协处理器,编写ULP程序,使用GPIO中断寄存器(如RTC_GPIO_PIN_INT_EN)检测边沿触发,并在触发时设置唤醒标志;2) 在进入Deep Sleep前,调用esp_sleep_enable_ulp_wakeup()使能ULP唤醒源,并保存WiFi配置到NVS(使用esp_wifi_set_storage(WIFI_STORAGE_FLASH)确保持久化);3) 唤醒后,从NVS恢复WiFi配置,重新初始化WiFi。实操建议:ULP程序需在编译时通过esp32ulp-elf工具链生成,并注意GPIO需支持RTC功能(如GPIO0-15)。测试时,用逻辑分析仪验证GPIO中断触发和唤醒时序。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器