湖北网站建设,南京做网站seo的,原创wordpress改成英文,小程序制作开发适用场景#xff1a; 电池供电设备#xff08;如传感器节点、可穿戴设备、远程监控装置#xff09; 一、低功耗模式简介
ESP32提供3种核心低功耗模式#xff0c;功耗对比如下#xff1a;
模式功耗唤醒延迟保持工作的模块Active约100mA-所有功能全速运行Light Sleep约0.8…适用场景 电池供电设备如传感器节点、可穿戴设备、远程监控装置 一、低功耗模式简介
ESP32提供3种核心低功耗模式功耗对比如下
模式功耗唤醒延迟保持工作的模块Active约100mA-所有功能全速运行Light Sleep约0.8mA1msCPU暂停外设/内存保持Deep Sleep约0.01mA约1秒仅RTC控制器和RTC内存 关键结论 需要秒级响应 → 轻度睡眠如蓝牙遥控器 超长待机月/年级别→ 深度睡眠如每小时采集1次的传感器 二、深度睡眠模式 (Deep Sleep)
原理关闭主CPU和大部分外设仅保留RTC控制器和RTC内存仅8KB可用。
唤醒源配置代码示例
#include esp_sleep.hvoid setup() {// 1. 配置定时器唤醒单位微秒esp_sleep_enable_timer_wakeup(10 * 1000000); // 10秒后唤醒// 2. 配置外部引脚唤醒可选esp_sleep_enable_ext0_wakeup(GPIO_NUM_33, 0); // PIN33低电平唤醒// 3. 配置触摸引脚唤醒可选esp_sleep_enable_touchpad_wakeup();// 4. 进入深度睡眠esp_deep_sleep_start(); // 程序在此停止重启后从setup()重新运行
}void loop() {} // 深度睡眠不会进入loop()
函数解析 esp_sleep_enable_timer_wakeup(us) 设置RTC定时器us为微秒数最大约4.5小时 注意超过最大值需用esp_sleep_enable_timer_wakeup()循环计数 esp_sleep_enable_ext0_wakeup(pin, level) pin唤醒引脚仅限RTC引脚0,2,4,12-15,25-27,32-39 level0低电平唤醒1高电平唤醒 esp_deep_sleep_start() 关键动作保存RTC内存数据 → 关闭非RTC模块 → 进入睡眠 → 唤醒后重启
数据保存技巧
// 将数据存入RTC内存重启后仍存在
RTC_DATA_ATTR int bootCount 0; // 使用RTC_DATA_ATTR宏void setup() {Serial.begin(115200);bootCount;Serial.printf(第%d次唤醒\n, bootCount); // 每次唤醒1
} 三、轻度睡眠模式 (Light Sleep)
原理暂停CPU时钟保留内存状态外设可通过中断快速唤醒。
基础代码框架
void enterLightSleep() {// 1. 配置GPIO唤醒任意引脚esp_sleep_enable_ext1_wakeup(BIT(GPIO_NUM_15), // 使用GPIO15唤醒ESP_EXT1_WAKEUP_ANY_HIGH // 高电平触发);// 2. 配置串口唤醒可选esp_sleep_enable_uart_wakeup(0); // 串口0收到数据时唤醒// 3. 进入轻度睡眠esp_light_sleep_start(); // 唤醒后继续执行后续代码
}void loop() {if (needsSleep) {Serial.println(进入轻度睡眠...);enterLightSleep();Serial.println(已唤醒); // 唤醒后输出}// 正常执行其他任务
}
函数解析 esp_sleep_enable_ext1_wakeup(bitmask, mode) bitmask使用BIT(GPIO_NUM_X)设置多个引脚 modeESP_EXT1_WAKEUP_ALL_LOW所有低电平或ESP_EXT1_WAKEUP_ANY_HIGH任一高电平 esp_light_sleep_start() 唤醒后从该函数后继续执行不重启 四、电池供电场景优化策略 硬件层面 关闭未使用的LED/传感器电源 添加10μF电容稳定电源 软件层面 // 深度睡眠前关闭外设
void prepareDeepSleep() {btStop(); // 关闭蓝牙WiFi.disconnect(true); // 断开WiFiadc_power_off(); // 关闭ADC电源esp_sleep_pd_config( // 关闭RTC外设电源域ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
} 功耗实测数据 场景平均电流2000mAh电池寿命深度睡眠每小时唤醒1分钟0.02mA4.5年轻度睡眠待机蓝牙0.9mA3个月 五、常见问题排查 唤醒立即复位 检查RTC_DATA_ATTR保存的数据是否溢出仅8KB 避免在setup()中初始化已关闭的外设 功耗偏高 执行gpio_deep_sleep_hold_dis()禁用GPIO保持器 用esp_sleep_get_wakeup_cause()判断唤醒源针对性优化 轻度睡眠无法唤醒 确认唤醒引脚未配置为输出模式 检查esp_sleep_enable_xxx_wakeup()返回值成功返回ESP_OK 最佳实践在深度睡眠中每小时采集一次温湿度数据并上传其余时间保持睡眠可使CR2032纽扣电池工作1年以上。