本教程適用于ESP32-S3、ESP32-C3、ESP32-C6
睡眠模式介紹
ESP32系列常見(jiàn)的休眠方式有三種,分別為Modem-sleep、Light-sleep 和 Deep-sleep。
Modem-sleep模式:CPU正常工作,可以對(duì)時(shí)鐘進(jìn)行配置。進(jìn)入 Modem-sleep 模式后,還可以選擇降低CPU時(shí)鐘頻率,進(jìn)?步降低電流。休眠期間WiFi或 Bluetooth LE 可保持連接。
Light-sleep模式:CPU暫停工作,數(shù)字內(nèi)核時(shí)鐘受限。任何喚醒事件(MAC、主機(jī)、RTC 定時(shí)器或外部中斷)都會(huì)喚醒芯片。休眠期間WiFi或Bluetooth LE可保持連接。
Deep-sleep模式:數(shù)字內(nèi)核斷電,CPU內(nèi)容丟失。RTC時(shí)鐘定時(shí)器或RTC GPIO可以將芯片從Deep-sleep模式中喚醒。進(jìn)?休眠狀態(tài)后,關(guān)閉除RTC模塊外的所有其他模塊。休眠期間WiFi或Bluetooth LE無(wú)法保持連接。
硬件準(zhǔn)備
ESP32系列模組既支持外置32.768 kHz的時(shí)鐘振蕩器作為RTC睡眠時(shí)鐘,也支持外部激勵(lì)信號(hào)(如有源晶振)作為RTC睡眠時(shí)鐘。ESP32外置32.768 kHz晶振的電路如下圖所示。具體的32k晶振引腳請(qǐng)參考對(duì)應(yīng)芯片的技術(shù)規(guī)格書。
(https://www.espressif.com.cn/zh-hans/support/documents/technical-documents?keys=&field_download_document_type_tid%5B%5D=510)
軟件準(zhǔn)備
部分源碼解析
1. 電源管理功能
電源管理功能(power_managenment) 是ESP-IDF中集成的電源管理算法,可以根據(jù)應(yīng)用程序組件的需求,調(diào)整外圍總線 (APB) 頻率和CPU頻率,并使芯片進(jìn)入Light-sleep模式,盡可能減少運(yùn)行應(yīng)用程序的功耗。
通過(guò)調(diào)用esp_pm_configure() 函數(shù),在應(yīng)用程序中啟用動(dòng)態(tài)調(diào)頻 (DFS) 功能和自動(dòng) Light-sleep 模式。此函數(shù)的參數(shù) esp_pm_config_t 定義了頻率調(diào)節(jié)的相關(guān)設(shè)置。在此參數(shù)結(jié)構(gòu)中,需要初始化以下三個(gè)字段:
max_freq_mhz :最大 CPU 頻率 (MHz),獲取 ESP_PM_CPU_FREQ_MAX 鎖后所使用的頻率。
min_freq_mhz :最小 CPU 頻率 (MHz),即未持有電源管理鎖時(shí)所使用的頻率。注意,10 MHz 是生成1MHz的REF_TICK默認(rèn)時(shí)鐘所需的最小頻率。
light_sleep_enable :沒(méi)有獲取任何管理鎖時(shí),決定系統(tǒng)是否需要自動(dòng)進(jìn)入Light-sleep狀態(tài)( true/false)。
2. ble廣播間隔
在程序中有個(gè)結(jié)構(gòu)體 adv_params,其中有兩個(gè)變量 .adv_int_min 和 .adv_int_max,這兩個(gè)參數(shù)影響著廣播間隔,可設(shè)置范圍為 0x20~0x4000,廣播時(shí)間間隔為 Time = N * 0.625 ms。
例如:0x640(十六進(jìn)制)= 1600(十進(jìn)制)* 0.625ms = 1s
3. ble連接間隔
當(dāng)連接成功后,在連接事件中有兩個(gè)變量 conn_params.max_int 和 conn_params.min_int,這兩個(gè)參數(shù)影響著連接間隔, 可設(shè)置范圍為0x0006~0x0C80,連接間隔為 Time = N * 1.25 ms
例如:0x320(十六進(jìn)制)= 800(十進(jìn)制)* 1.25ms = 1s
注:最大連接間隔是 4 s,所以當(dāng)設(shè)置超過(guò)4s時(shí)設(shè)置無(wú)效,則會(huì)變成了默認(rèn)的間隔,功耗會(huì)增加。
完整示例代碼鏈接(基于ESP-IDF release/v5.3版本)
https://gitee.com/SNKjxn/ble_power_save
獲取工程后,激活esp-idf并進(jìn)入工程目錄下
設(shè)置目標(biāo)芯片
idf.py set-target (目標(biāo)芯片型號(hào))
例如:
編譯燒錄
正常運(yùn)行l(wèi)og如下:
功耗測(cè)試結(jié)果參考
注意:下面的測(cè)試結(jié)果,硬件均為外加32k晶振的單模塊。
軟件廣播間隔1s,連接間隔1s。
ESP32-C3
平均功耗 474ua
ESP32-C6
平均功耗 512ua
ESP32-S3
平均功耗 826ua
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5809瀏覽量
170188 -
功耗測(cè)試
+關(guān)注
關(guān)注
0文章
16瀏覽量
9613 -
樂(lè)鑫
+關(guān)注
關(guān)注
0文章
191瀏覽量
25437
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論