本教程适用于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张

软件准备

部分源代码分析

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张

2. 广播间隔ble


程序中有一个结构体 adv_params,这里面有两个变量 .adv_int_min 和 .adv_int_max,这两个参数影响广播间隔,可以设置为 0x20~0x4000,广播时间间隔为 Time = N * 0.625 ms。

比如:0x640(十六进制)= 1600(十进制)* 0.625ms = 1s

在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理  第3张

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张

基于ESP的完整示例代码链接(基于ESP)-IDF release/v5.3版本)

https://gitee.com/SNKjxn/ble_power_save

获得项目后,激活esp-idf并进入项目目录。

设定目标芯片

idf.py set-target (目标芯片型号)

例如:

在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理  第5张

编译烧录

在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理  第6张

log的正常运行如下:

在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理  第7张

功耗试验结果参考

注:以下测试结果,硬件均为单模块,外加32k晶振。

软体广播间隔1s,连接间隔1s。

ESP32-C3

平均功耗 474ua

在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理  第8张

ESP32-C6

平均功耗 512ua

在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理  第9张

ESP32-S3

平均功耗 826ua

在睡眠模式下,乐鑫esp32系列蓝牙连接功耗测试,启明云乐鑫代理  第10张