当前位置: 首页 > news >正文

ESP32 低功耗优化实战:light sleep 模式让续航提升 40 倍

ESP32 低功耗优化实战:light sleep 模式让续航提升 40 倍

关键词:ESP32、低功耗、light sleep、FreeRTOS、物联网
Github源码:https://github.com/WuQinghui-00/ESP32-Light-Sensor-Monitor

一、背景

我最近在做一款基于 ESP32 的智能光照监测系统,使用 FreeRTOS 实现多任务架构。项目跑通后,我发现一个问题:功耗太高了。

实测工作电流在 80mA 左右,如果电池供电,几个小时就没电了。作为一个可能部署在室外的物联网设备,这样的功耗显然不行。

所以,我决定给项目加上低功耗优化。

二、方案选型

ESP32 支持多种低功耗模式:

  • Modem sleep:约 20mA,需要保持 Wi-Fi 连接时使用

  • Light sleep:约 0.8-2mA,CPU 暂停,外设保留,可被 GPIO 或定时器唤醒

  • Deep sleep:约 10μA,深度睡眠,唤醒后程序从头执行

考虑到我的系统需要周期性采集光照数据(每 10 秒一次),同时支持外部触发唤醒,唤醒后需要快速恢复运行,我选择了 Light sleep 模式。

三、代码实现

3.1 配置唤醒源

首先需要包含头文件:
#include "esp_sleep.h"
#include "driver/gpio.h"

配置 GPIO4 作为唤醒源,同时开启定时器唤醒作为保底:
const uint64_t wakeup_pin_mask = 1ULL << GPIO_NUM_4;
esp_sleep_enable_ext1_wakeup(wakeup_pin_mask, ESP_EXT1_WAKEUP_ANY_HIGH);
esp_sleep_enable_timer_wakeup(10 * 1000000);

配置 GPIO4 为输入模式:
gpio_config_t io_conf = {
.pin_bit_mask = wakeup_pin_mask,
.mode = GPIO_MODE_INPUT,
.intr_type = GPIO_INTR_DISABLE,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
};
gpio_config(&io_conf);

3.2 进入睡眠和唤醒

进入睡眠的代码非常简单:
ESP_LOGI(TAG, "Entering light sleep...");
esp_light_sleep_start();
ESP_LOGI(TAG, "Woken up!");

唤醒后可以获取唤醒原因:
esp_sleep_wakeup_cause_t wakeup_cause = esp_sleep_get_wakeup_cause();
if (wakeup_cause == ESP_SLEEP_WAKEUP_EXT1) {
ESP_LOGI(TAG, "Wakeup caused by GPIO");
} else if (wakeup_cause == ESP_SLEEP_WAKEUP_TIMER) {
ESP_LOGI(TAG, "Wakeup caused by timer");
}

3.3 集成到 FreeRTOS 任务中

我的系统原本有一个 Sensor 任务负责采集光照数据。我把低功耗逻辑集成进去:

void sensor_task(void *pvParameters)
{
// 配置唤醒源...

while (1) {
// 采集传感器数据
read_sensor();

// 发送到队列
xQueueSend(sensor_queue, &data, 0);

// 等待 3 秒让日志显示清楚
vTaskDelay(pdMS_TO_TICKS(3000));

// 进入 light sleep
ESP_LOGI(TAG, "Entering light sleep...");
esp_light_sleep_start();

// 唤醒后继续循环
ESP_LOGI(TAG, "Woken up!");
}
}

四、效果验证

4.1 串口日志

烧录后,串口输出如下:

I (389) SENSOR_TASK: State: DARK, Voltage: 500mV
I (3389) SENSOR_TASK: Entering light sleep...
(此时串口暂停,CPU 进入睡眠)
(10 秒后定时器唤醒,或 GPIO 触发唤醒)
I (3389) SENSOR_TASK: Woken up!
I (3389) SENSOR_TASK: Wakeup caused by timer
I (3389) SENSOR_TASK: State: DARK, Voltage: 500mV

可以看到系统成功进入睡眠,然后被唤醒,继续正常工作。

4.2 功耗数据

  • 正常工作:80mA

  • Light sleep:2mA

理论续航提升:80mA / 2mA = 40 倍。原来只能用 1 天的电池,现在能用 40 天。

五、踩坑记录

坑 1:编译警告被当作错误

加了低功耗代码后,编译报 cc1.exe: some warnings being treated as errors。在 CMakeLists.txt 里加了 target_compile_options(${COMPONENT_TARGET} PRIVATE -Wno-error) 解决。

坑 2:定时器和 GPIO 同时唤醒

一开始没加定时器,只能靠 GPIO 唤醒。后来加了 10 秒定时器作为保底,防止漏触发。现在两种唤醒方式可以同时工作。

六、总结

通过这次优化,我学会了:

  1. ESP32 低功耗模式的使用方法

  2. 多唤醒源配置(GPIO + 定时器)

  3. 在 FreeRTOS 任务中集成低功耗逻辑

  4. 功耗数据测量和分析

最终效果:待机电流从 80mA 降至 2mA,理论续航提升 40 倍。

下一步计划:集成 Wi-Fi 和 MQTT,实现数据上云。

七、项目链接

GitHub:https://github.com/WuQinghui-00/ESP32-Light-Sensor-Monitor

八、参考资源

ESP-IDF 电源管理文档:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/system/power_management.html
ESP32 低功耗模式详解:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/system/sleep_modes.html


http://www.jsqmd.com/news/550150/

相关文章:

  • 笔记3
  • 理财不迷路,这些产品超靠谱! - 品牌测评鉴赏家
  • 从下载到运行:llama.cpp在Windows7下的完整配置流程(含常见错误修复)
  • Qwen3-0.6B-FP8镜像使用全流程:部署、验证、提问一气呵成
  • 避坑指南:PotreeConverter转换点云数据时常见的5个问题及解决方案
  • 2026年口碑好的公考培训公司哪家好,润雨泽川实力见证 - 工业品牌热点
  • VideoAgentTrek-ScreenFilter在软件测试中的应用:自动验证UI界面正确性
  • 开源工具高效获取B站无损音质:3大核心流程掌握Hi-Res音频下载
  • VSCode嵌入式开发必备插件指南
  • 新手入门指南:通过autoclaw在快马平台创建第一个任务管理应用
  • 如何用Rainmeter打造专业级Windows桌面音频可视化效果
  • ASMR下载神器:轻松构建个人听觉图书馆的智能解决方案
  • ISAAC-SIM新手必看:从零开始用GUI操控机器人(含Physics Inspector详解)
  • 公务员考试机构怎么选购,润雨泽川公考的性价比高不高? - 工业推荐榜
  • 告别云端依赖!LFM2.5-1.2B-Thinking本地部署实战:低配电脑也能流畅运行
  • 如何30分钟搭建专业仓储系统?中小企业零成本方案
  • NoFences:免费开源桌面分区工具,让Windows桌面告别杂乱无章
  • 【机构级Python金融计算规范】:中金/华泰/高盛都在用的12条代码审计清单(附GitHub私有模板仓库邀请码)
  • SEO_中小企业实用的低成本SEO方法介绍
  • 说说哈尔滨靠谱的公务员考试培训机构,润雨泽川公考值得推荐吗? - 工业品网
  • 2026年上海帝爵汽车服务费用揭秘,这家报废车回收公司到底多少钱 - myqiye
  • SDMatte老照片修复应用:结合去噪与上色模型实现全流程修复
  • Meixiong Niannian画图引擎在影视制作中的应用:特效预可视化
  • 声学模拟实战:用Python实现格林函数计算声场分布(附完整代码)
  • 毕业设计图纸源码参考
  • 告别定制模型:用WinCLIP+做少样本异常检测,一个模型覆盖多条产线
  • 2026年厦门勒索病毒解密/bixi勒索病毒解密公司推荐:厦门嘉辰信息技术,balckbit/lockbit2.0/malox等全系解决方案 - 品牌推荐官
  • 从‘保护大熊猫’到游戏设计:用Scratch克隆与子弹机制打造你的第一个塔防小游戏
  • 别再死记硬背公式了!用PyTorch手把手实现一个前馈网络,搞定NLP文本分类
  • HarmonyOS组件预览避坑指南:@Preview参数配置常见问题与解决方案