本教程适用于ESP32S32S、ESP32C3、ESP32C6
介绍睡眠模式
有三种常见的ESP32系列休眠方式,分别是Modem-sleep、Light-sleep 和 Deep-sleep。
Modem-sleep模式:CPU 正常工作,可配置时钟。 进入 Modem-sleep 模式之后,也可以选择减少模式。 CPU 时钟频率,进一步降低电流。WiFi或WiFi在休眠期间 Bluetooth LE 可以保持连接。
Light-sleep模式:CPU 停止工作,数字内核时钟有限。任何觉醒事件(MAC、主机、RTC 定时器或外部中断)会唤醒芯片。WiFi或WiFi在休眠期间 Bluetooth LE 可以保持连接。
Deep-sleep模式:数字内断电,CPU 内容丢失。RTC 时钟定时器或 RTC GPIO 从Deep-sleep模式中可以唤醒芯片。进入⼊休眠状态后,关闭RTC。 所有其他模块都在模块之外。WiFi或者Bluetooth LE不能保持连接。
关于睡眠模式的具体说明请参考睡眠模式。 - ESP32 - ESP-IDF 编程指南 latest 文档。
硬件准备
ESP32系列模块支持外置32.768 kHz 作为时钟振荡器 RTC 睡眠时钟,还支持外部激励信号(如有源晶振) RTC 睡眠时钟。ESP32外置32.768 如下图所示,kHz晶振电路。具体的32k晶振引脚请参考相应芯片的技术文件。 | 乐鑫科技。
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第1张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第1张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203204171888672499961.jpg)
软件准备
部分源代码分析
1. 电源管理功能
电源管理功能(power_managenment) 电源管理算法集成在ESP-IDF中,可根据应用程序组件的需要调整外围总线。 (APB) 频率和 CPU 频率,并使芯片进入Light-sleep模式,从而最大限度地降低运行应用程序的功耗。
通过调用 esp_pm_configure() 应用程序中使用动态调频函数。 (DFS) 功能和自动 Light-sleep 模式。这个函数的参数 esp_pm_config_t 对频率调整的相关设置进行定义。本参数结构需初始化如下
三个字段:
max_freq_mhz :最大 CPU 频率 (MHz),获取 ESP_PM_CPU_FREQ_MAX 锁定后使用的频率。
min_freq_mhz :最小 CPU 频率 (MHz),也就是说,没有持有电源管理锁时使用的频率。请注意,10 MHz 这是REF_TICK默认时钟生成1MHz所需的最小频率。
light_sleep_enable :当没有获得任何管理锁时,决定系统是否需要自动进入Light-sleep状态( true/false)。
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第2张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第2张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203204171888672463107.jpg)
2. 广播间隔ble
程序中有一个结构体 adv_params,这里面有两个变量 .adv_int_min 和 .adv_int_max,这两个参数影响广播间隔,可以设置为 0x20~0x4000,广播时间间隔为 Time = N * 0.625 ms。
比如:0x640(十六进制)= 1600(十进制)* 0.625ms = 1s
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第3张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第3张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203204171888672445890.jpg)
3. ble连接间隔
连接成功后,连接事件中有两个变量。 conn_params.max_int 和 conn_params.min_int,这两个参数影响连接间隔, 可以设定0x006~0x0C80的范围,连接间隔为0x006~0x0 Time = N * 1.25 ms
比如:0x320(十六进制)= 800(十进制)* 1.25ms = 1s
注意:最大连接间隔是 4 s,因此,当设置超过4s时,设置无效,就会变成默认间隔,功耗也会增加。
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第4张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第4张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203204171888672434363.jpg)
基于ESP的完整示例代码链接(基于ESP)-IDF release/v5.3版本)
https://gitee.com/SNKjxn/ble_power_save
获得项目后,激活esp-idf并进入项目目录。
设定目标芯片
idf.py set-target (目标芯片型号)
例如:
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第5张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第5张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203204171888672451008.jpg)
编译烧录
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第6张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第6张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203205171888672578037.jpg)
log的正常运行如下:
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第7张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第7张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203205171888672558931.jpg)
功耗试验结果参考
注:以下测试结果,硬件均为单模块,外加32k晶振。
软体广播间隔1s,连接间隔1s。
ESP32-C3
平均功耗 474ua
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第8张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第8张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203205171888672572369.jpg)
ESP32-C6
平均功耗 512ua
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第9张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第9张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203205171888672564380.jpg)
ESP32-S3
平均功耗 826ua
![在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第10张 在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理 第10张](https://www.yuneu.com/zb_users/upload/2024/06/20240620203205171888672556587.jpg)
发表评论