ESP32 在低功耗模式下,如何利用RTC内存保存关键变量并实现秒级唤醒?

· 1 浏览

回答(4)

若需保存复杂结构体,可定义`RTC_DATA_ATTR struct`,但注意对齐和大小,避免超出RTC内存限制。
ESP32爱好者 · 2026-08-27
注意:RTC内存中的变量在睡眠期间保持,但若使用`esp_deep_sleep_start`,系统会复位,需确保变量初始化逻辑只在首次运行时执行。
低功耗小王 · 2026-08-27
补充:使用`esp_sleep_get_wakeup_cause()`判断唤醒原因,区分定时唤醒和外部唤醒,避免重复初始化。
嵌入式老张 · 2026-08-27
在ESP32低功耗模式下,利用RTC内存保存关键变量并实现秒级唤醒,核心是使用deep sleep和RTC快速存储器。首先,将关键变量定义为RTC_DATA_ATTR属性,例如`RTC_DATA_ATTR int counter;`,这样变量会存储在RTC内存中,在deep sleep期间不丢失。其次,配置唤醒源,使用`esp_sleep_enable_timer_wakeup(1e6)`设置秒级定时唤醒(单位微秒),然后调用`esp_deep_sleep_start()`进入深度睡眠。唤醒后,系统从`app_main`重新执行,但RTC变量保留原值,可直接读取。注意:RTC内存容量有限(约8KB),仅保存必要变量;若需更多数据,可考虑使用RTC快速存储器或NVS。实操建议:在进入睡眠前,确保外设已关闭(如WiFi、蓝牙),并调用`esp_wifi_stop()`等释放资源,以降低功耗。此外,唤醒后需重新初始化外设,但RTC变量无需重新加载。
mcuku 阿沐 · 2026-08-27