完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我司准备用esp32-c3的芯片做主控来开发一tracker类的产品,其中功耗是关键参数,应用场景是蓝牙与手机保持连接、wifi作辅助定位。目前我们买了两块开发板:ESP32-C3-DevKitM-1,想在次开发板上测试一下在蓝牙保持连接的情况下的功耗。
阅读文档,要满足我们的需求,需要ble进入light-sleep模式,根据文档我们做了如下修改: 1.在开发板的GPIO0GPIO1两个引脚上加入了外部32K的晶振,如附图所示: 2.已示例程序为基础:ESP_IDFexamplesbluetoothbluedroidblegatt_server_service_table, (1):Enable Power Management: menuconfig ---> Component config ---> Power management ---> Support for power management (2):Enable tickless Idle: menuconfig ---> Component config ---> FreeRTOS ---> Tickless idle support (3) Minimum number of ticks to enter sleep mode for (NEW) Note: Tickless idle needs to be enabled to allow automatic light sleep. FreeRTOS will enter light sleep if no tasks need to run for 3(by default) ticks, that is 30ms if tick rate is 100Hz. Configure the FreeRTOS tick rate to be higher if you want to allow shorter duration light sleep, for example: menuconfig ---> Component config ---> FreeRTOS -> (1000) Tick rate (Hz) (3):Configure external 32.768Hz crystal as RTC clock source: menuconfig ---> Component config ---> ESP32-specific ---> RTC clock source (External 32kHz crystal) Additional current for external 32kHz crystal Note that the "additional current" option is a workaround for a hardware issue on ESP32 that the crystal can fail in oscillating. Please enable this option when you use external 32kHz crystal. This hardware issue will be resolved in the next ECO chip. (4):Enable Bluetooth modem sleep with external 32.768kHz crystal as low power clock: menuconfig ---> Component config ---> Bluetooth ---> Bluetooth controller ---> MODEM SLEEP Options ---> Bluetooth modem sleep Bluetooth Modem sleep mode (ORIG mode(sleep with low power clock)) Bluetooth low power clock (External 32kHz crystal) 并在应用中增加了如下接口代码Code: Select all #include "esp_err.h"#include "esp_pm.h" esp_pm_config_esp32_t pm_config = { .max_freq_mhz = 80, // e.g. 80, 160, 240 .min_freq_mhz = 10, // e.g. 40 .light_sleep_enable = true, // enable light sleep }; ESP_ERROR_CHECK( esp_pm_configure(&pm_config) ); 将程序烧录至开发版,用手机APP连接开发板蓝牙后,测得最小电流为700ua,最大电流为1.2ma,在这之间不断跳动。 另外有如下几个参数也在原有的example上做了修改:Code: Select all static esp_ble_adv_params_t adv_params = { .adv_int_min =0x640, .adv_int_max = 0x640, .adv_type = ADV_TYPE_IND, .own_addr_type = BLE_ADDR_TYPE_PUBLIC, .channel_map = ADV_CHNL_ALL, .adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY,}; Code: Select all conn_params.latency = 0; conn_params.max_int = 0x300; // max_int = 0x20*1.25ms = 40ms conn_params.min_int = 0x10; // min_int = 0x10*1.25ms = 20ms conn_params.timeout = 400; // timeout = 400*10ms = 4000ms //start sent the update connection parameters to the peer device. esp_ble_gap_update_conn_params(&conn_params); 我的问题是如何使light-sleep 的功耗达到你们文档所说的130ua。使用的ESP_IDF版本是:V4.3 |
|
相关推荐
1个回答
|
|
在ESP32-C3中,light-sleep模式是一种低功耗模式,可以在保持蓝牙连接的同时降低功耗。根据您的需求,我将为您提供一些建议和步骤来实现这一目标。
1. 确保您的开发板已经安装了外部32K晶振,因为ESP32-C3需要一个外部低频晶振来实现light-sleep模式。 2. 在您的项目中,使用ESP-IDF框架。如果您还没有安装,请访问[ESP-IDF安装指南](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/getting-started/index.html#installation-step-by-step)进行安装。 3. 根据您的应用场景,您需要修改示例程序`ESP-IDF/examples/bluetooth/bluedroid/ble/gatt_server_service_table`。以下是一些建议的修改: a. 在`app_main()`函数中,启用电源管理。您可以使用以下代码片段: ```c #if CONFIG_BTDM_CONTROLLER_POWER_MANAGEMENT // Enable BLE power management btdm_pm_init(); #endif ``` b. 在BLE GATT服务中,设置适当的连接参数,例如连接间隔和超时时间。这可以通过调用`esp_ble_gap_set_scan_params()`函数来实现。 c. 在BLE GATT服务中,实现一个回调函数来处理连接事件。在连接事件回调函数中,您可以根据需要设置light-sleep模式。例如: ```c static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) { switch (event) { case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: // Start scanning esp_ble_gap_start_scanning(30); break; case ESP_GAP_BLE_SCAN_RESULT_EVT: // Handle scan result break; case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT: // Stop scanning and connect to the device esp_ble_gap_stop_scanning(); esp_ble_gap_set_dev_name("ESP32-C3-Tracker"); esp_ble_gap_set_local_icon(ESP_BLE_APPEARANCE_UNKNOWN); esp_ble_gatt_server_init(); break; default: break; } } ``` 4. 在您的项目中,确保已经配置了正确的电源管理选项。在`menuconfig`中,找到`Component config -> Bluetooth -> BLE stack`,然后启用`Controller Power Management`。 5. 编译并烧录您的项目到ESP32-C3-DevKitM-1开发板上。使用ESP-IDF提供的`idf.py`工具进行编译和烧录。 6. 测试您的设备在light-sleep模式下的功耗。您可以使用示波器或功耗分析仪来测量功耗。 通过以上步骤,您应该能够在ESP32-C3上实现低功耗的蓝牙连接。请注意,实际功耗可能会受到其他因素的影响,例如信号强度、环境干扰等。因此,在实际应用中,您可能需要进一步优化功耗性能。 |
|
|
|
只有小组成员才能发言,加入小组>>
341 浏览 0 评论
1186 浏览 1 评论
587浏览 6评论
484浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
443浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 02:31 , Processed in 0.759695 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号