ESP32 在低功耗模式下,如何正确配置 RTC 唤醒源并保持 GPIO 状态不丢失?

· 2 浏览

回答(4)

浅睡模式(`esp_light_sleep_start`)下GPIO状态自然保留,但唤醒源需配置`esp_sleep_enable_gpio_wakeup`,且功耗较高。若对功耗敏感,优先用深睡+hold。
低功耗达人 · 2026-08-27
若需保持GPIO输出,可外接上拉/下拉电阻,配合hold功能更可靠。另外,唤醒后需重新初始化GPIO配置,因为寄存器可能被复位。
硬件老司机 · 2026-08-27
注意:深睡时RTC内存保留,可存储GPIO状态变量,唤醒后恢复,但硬件电平需用hold功能。建议使用`RTC_GPIO`引脚,普通GPIO在深睡下无法保持。
电源优化师 · 2026-08-27
在ESP32低功耗模式下,配置RTC唤醒源并保持GPIO状态,需区分深睡(Deep Sleep)和浅睡(Light Sleep)。对于深睡,RTC外设保持供电,但GPIO状态默认丢失,需通过`gpio_hold_en()`函数在进入睡眠前锁定GPIO电平,并在唤醒后调用`gpio_hold_dis()`释放。唤醒源配置:使用`esp_sleep_enable_timer_wakeup()`设置定时器,或`esp_sleep_enable_ext0_wakeup()`/`esp_sleep_enable_ext1_wakeup()`配置外部RTC GPIO唤醒,注意EXT1支持多个引脚。代码示例:`gpio_hold_en(GPIO_NUM_4); esp_sleep_enable_timer_wakeup(10*1000000); esp_deep_sleep_start();`。唤醒后,先`gpio_hold_dis()`再操作GPIO。浅睡模式下,CPU暂停但外设和GPIO状态保留,唤醒源配置类似,但需确保`esp_sleep_enable_gpio_wakeup()`或定时器。建议实测功耗和唤醒延迟,并检查RTC GPIO编号(如GPIO0-5, 12-15, 25-27, 32-39)。
mcuku 阿沐 · 2026-08-27