-
Notifications
You must be signed in to change notification settings - Fork 7.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ble taking too much power (IDFGH-769) #947
Comments
I have the same issue. Even running the demo heats the chips a lot. |
@joicetm BLE power consumption improvements (i.e. modem sleep mode) are not planned for 3.0. 80-90mA is the best that can be achieved in the current version. |
Do you know what is the release target for the modem sleep mode ? Where can we find the project roadmap and estimate dates? |
This is an important issue for me. I would be using the ESP32 in my project right now if I could run the ble_spp_server demo using less than 10mA. |
@MS-elug @mobilinkd The BLE modem sleep will be release at the next version(v3.1), thank you for your concern about ESP32. |
That's great news, @Yulong-espressif ! Are you able to characterize the current consumption with this enhancement? |
Hi, I am using ESP-WROOM-32 with Arduino IDE. I want to know is there any way to reduce power consumption of BLE peripheral? I made a test on power consumption during BLE advertising which was consuming 112mA current when CPU set at 80Mhz. I want to reduce the current consumption to at least 1mA but BLE should keep on advertise. Please help me in this regards. |
@Yulong-espressif can you tell us a release date for BLE modem sleep (version 3.1)? Moreover I would be interested in the current consumption in BLE modem sleep mode. We are planning to develop a low power product, therefore the current consumption is the most critical part of the project. |
@Yulong-espressif Is BLE wakeup going to be in the next version? |
@sargun Yes, will be release in the version 3.1 |
Actually, both BR/EDR and BLE power save will be released in release/v3.1. |
Thanks for the update, TianHao-Espressif . |
Features has been implemented few days ago. I tried it and it works. With the exactly same features (time interval=50ms, 15B per packet, notify enabled) power consumption passed from 102mA to 35-40mA. Data exchange is not fluid ad before, but don't know the cause. |
@frax84 , the BLE/BR/EDR sleep current and related performance is in test. And what "not fluid" present. Could you provide your test case? |
@TianHao-Espressif Hi Tiao! Actually was not a complain but was just informing the others in this post. By the way, your explanation is very interesting. This is my use case:
With the term "no fluid" i mean that while before (was using BLE with BTDM mode) data were coming evenly time-spaced ("1-2-3-4-5-6-7-8-9-10") now they tend to come less evenly spaced (i.e. "1-2---34--5-6-7--8---9-10"). I have not test data to show but what i'm saying is clearly visible with eye (while with previous settings it was ok) I have two questions.
Thank you EDIT: edited some typos and added more infos about my use case |
Hi All, I have been optimising our ESP32 application for low power at the moment. The lowest consumption with BLE enabled (BT-classic disabled) is around 28-32mA when advertising with a 200ms interval Im just wondering if i am at the limit of what the ESP32 can currently do. I understand that as this chip supports BLE and WiFi the power consumption during transmit and Reception will be higher than a BLE only chip. However since BLE operates on the connection interval paradigm, if there is a 40ms connection interval or a 200ms advertising interval, surely the radio could be disabled between connection intervals saving power during these periods? This would likely result in a much lower average current. Thanks in advance for your response. |
@lucashutchinson Did you try to change TX power? By default it is setup pretty high (+3dBm). Remember that you can decrease TX power for advertising only if you want. |
hi all: |
Hi @chegewara @Weijian-Espressif Yes I have tried changing the TX power between N12 and P9, no real difference was noticed. however i am going to do a few more tests. I have enable bluetooth modem sleep options, and have tried both ORIG and EVED modes. I have also called the functions: Do you have any internal test results of low power bluetooth that can be shared? Thanks for your responses! |
@lucashutchinson . 30mA is in accord with our internal test result for BLE advertising in current stage. In order to further optimize the bluetooth power consumption, we are trying to resolve the issue in the combination use of bluetooth modem sleep and Dynamic Frequency Scaling(DFS) as well as Automatic light sleep. which can hopefully be completed in a month. |
@lucashutchinson Could you help share if any updates for this issue? Thanks. |
1 similar comment
@lucashutchinson Could you help share if any updates for this issue? Thanks. |
There are no updates that I have had from espressif. |
Hi, a commit on optimization of Bluetooth power consumption was merged into ESP-IDF recently. The merge commit is(git describe --tag): v4.0-dev-684-gb859584. An external 32.768kHz crystal is required to take advantage of this feature. Here is the description for this commit and a brief manual. Feature: Bluetooth modem sleep with external 32.768kHz xtal under light sleepOverviewBluetooth modem sleep could work under DFS but could not work under light sleep in previous implementation, which is largely due to the sleep clock source. Sleep clock must provide enough accuracy for BLE to maintain time during sleep.
This patch resolves the issue that Bluetooth modem sleep is not allowed to work with light sleep with external 32kHz crystal. In this case a menuconfig option is provided to set the BLE SCA used to estimate RX window widening during connection events. User guideTo use bluetooth modem sleep with light sleep, please follow the below instructions. ESP-IDF menuconfig options:
Note: Tickless idle needs to be enabled to allow automatic light sleep. FreeRTOS will enter light sleep if no tasks need to run
Note that the "additional current" option is a workaround for a hardware issue on ESP32 that the crystal can fail in oscillating.
Enable light sleep by calling power management API in application:
Test resultBelow are some power consumption statistics on typical BLE use scenario:
|
Hi @mywang-espressif Could you confirm some values? From what i see in some cases with
VS
Min and max values are lower, but average current draw is higher with 80MHz. Anyway thanks for new feature and comprehensive update about it. PS only what is missing is comparison with current draw without light sleep enabled. |
Hi!
I added: #define ADVENTURE_INTERVAL_MIN 3000
#define ADVENTURE_INTERVAL_MAX 3100
struct ble_gap_adv_params adv_params;
/*
Other code
*/
adv_params.itvl_min = ADVENTURE_INTERVAL_MIN;
adv_params.itvl_max = ADVENTURE_INTERVAL_MAX; If the intervals are lower (ex. 2500, 2600), then it works. |
@dashkova If you disable modem sleep, will this problem still exist? |
if disable light sleep, it works. esp_pm_config_t pm_config = {
.max_freq_mhz = 160,
.min_freq_mhz = 40,
.light_sleep_enable = false
}; 24 hours and more - no problem. |
Hello, is it possible to have the ESP32-S3 powered on (in this state it draws ~40 mA), with Wi-Fi off, but BLE on advertising or waiting for a connection in this low power state? I do not mind using the internal XTAL, as the ESP32-S3 is already on. Currently an average power consumption of 100 mA is recorded when sending advertisement packets every 65 ms. How much more power (above the 40 mA base) would be consumed if the ESP32-S3 would listen out for a BLE advertisement in this lower power BLE state? |
I'm having a similar issue to this. I am running with an external crystal and trying to accomplish running BLE with an external crystal to have something similar to the below values. I am using an ESP32-S3.
I have all of the settings listed and followed the example here https://github.com/espressif/esp-idf/tree/master/examples/bluetooth/nimble/power_save . But whenI configure it to run it pulls about 25 mA constantly. I never get anywhere near the 230 µA . I'm also seeing the BLE connection get dropped fairly regularly when I call the following. // Configure Bluetooth modem sleep with higher minimum frequency
esp_pm_config_esp32_t pm_config = {
.max_freq_mhz = 80,
.min_freq_mhz = 40,
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
.light_sleep_enable = true
#endif
};
ESP_ERROR_CHECK(esp_pm_configure(&pm_config));
Could there be something wrong here or am I misunderstanding how this works? I was assuming I could use the external crystal to achieve the 230 µA when running with the config above. |
Hi @michaelboeding , These values represent current values in different states and are not average values. When the system enters light sleep, the current value is 230uA.
Could you please provide the log and sdkconfig? Thanks |
Hey @xiongweichao I think I got this working pretty closely to the estimated values. I had a pin pulled up on a module that was causing some of my readings to be off. I am seeing more like 500 uA but still good. Might also note that my scan min/max intervals were to fast. So the device was also not going to sleep because of that. And finally I did update the connection parameters based on a connection to match apples guidelines here: https://developer.apple.com/library/archive/qa/qa1931/_index.html |
Michael, would you mind sharing some of your code with me? I am just starting to build a project to track horses in my open stable, I want to fasten beacons in their manes, and position a few battery+solar powered ESP32 in important locations (i.e. water and food locations) which shall scan for nearby horses every minute or so, sleeping (can be deep sleep) in between scans. The goal is to log how the horses move around and alert me if a horse does not move for ~4h or so, which might indicate a health problem. |
Hi @xiongweichao & @michaelboeding , We are currently getting 15 mA average current consumption instead of the 34 uA mentioned. I just have my ESP32-C6-Mini-1 module and no other components connected other than 32kHz external crystal. Can you provide guidance on how to achieve the current consumption as specified in the example. |
Hi @JhakanMurali , These values represent current values in different states and are not average values. When the system enters light sleep, the current value is 34 uA . You can verify this value by stopping advertising. |
Hello @xiongweichao , Additionally if possible , kindly specify up to what minimum current value can ESP32 C6 & ESP32H2 be reduced during the advertising phase. |
connection needs to be maintained so it is not completely idle, power draw while connected depends on connection interval, it can be quite high if the connection interval is short as the device must wake for every connection interval (to check for data received, handle lost connection etc.) |
@fanoush @xiongweichao Thanks for your reply. We have stated our working application below. Kindly have a look. We have enabled Light sleep mode and the power has significantly reduced(in mA). However to further reduce the power consumption, can we set a specific time interval for advertising in Light sleep mode itself and after this specific interval switch to Deep sleep mode and maintain it until next advertising starts. Kindly provide your insights to help us achieving this |
@JhakanMurali I think you need to note that the light sleep mode can maintain the connection, Deep sleep mode cannot maintain connection. In the connected state, you can reduce power consumption by increasing the connection interval Before entering deep sleep, you may need to call these APIs ( |
@xiongweichao Thanks for the insight. I didn't know that the gateway and slave device will be disconnected when the slave device enters deep sleep mode. I hope I'm understanding this right. If so each time after the slave device switches back to light sleep it has advertise and once again connect with the gateway device right? I will definitely check with the power consumption after increasing the connection interval. What would be your suggestion on switching between light sleep and deep sleep mode for our application or any other methods to achieve our objectives as stated above. |
Since there is no disconnection, there is no need for advertising and reconnection.
If you are just using bluetooth, I think you can use deep sleep when there is no connection. For deep sleep, you can refer to Sleep Modes. |
@xiongweichao You stated that "Deep sleep mode cannot maintain connection", |
@xiongweichao @fanoush @michaelboeding We've enabled Light sleep mode using 32kHz crystal and have checked for current consumption. The current seems to be in Milliamps(mA) despite stated that it takes current in microamps (uA) as per the datasheet of ESP32-H2-Mini in light sleep MODE. I have attached the snippet from ESP32-H2-MINI datasheet stating the current consumption in power modes. Kindly provide your insight on how to achieve this. ![]() |
@JhakanMurali To fullfill the first two requirements, you need to use light sleep mode. There're a few things you should look into:
|
Hey @JhakanMurali what are your advertising intervals you are currently using for BLE. |
We are currently using ESP32H2-MINI1N2 module and have integrated the module with Bluetooth gatts_server build to connect with another ESP32-C6 module with Bluetooth gattc_client build. Along with the ESP32H2 MINI N2 module we have used the 32KHz crystal and have followed the same steps in menuconfig as specified for ESP32H2 . We understand that BLE power save mode is not Pure Light Sleep and during BLE transmit in this mode my current consumed will significantly rise closer to the current between pure light sleep and Active mode. Kindly confirm if I have understood this point clearly Our Application needs: @michaelboeding The Average Current consumed during the advertise and connection interval in BLE power Save mode (5 seconds) is 20 mA. This impacts our Battery Life largely. Insights required :
|
@ChrysalisChenJ @michaelboeding We have used ESP32H2-MINI-N2 module and set the configurations for ESP32H2 given in this BLE power save(Auto light sleep) mode .But BLE advertising in this mode has given results in mA only. Our requirement for current consumed during BLE advertising is less than 200 microamps (µA) Hence kindly provide solutions for the below queries: 1.We want to know what is the minimum current consumption (in exact number) in general that can be achieved during BLE advertisement. I can vary my TX power, Advertising interval and connection interval accordingly if this can be possible. |
When we say advertising interval and connection interval, we mean the interval for BLE to send or receive a packet instead of the period to advertising or remaining connection state. From what you mentioned in the comment, you may use a much smaller advertising interval than 2s when advertising. The average current of ADV should be around 135 uA with the 2s advertising interval and Tx power set to 12 dBm, given that the light sleep-related configurations are correctly set using IDF v5.1.5 while the minimum current is around 27 uA.
The current consumption depends on your application. Using a larger advertising/connection interval can reduce the average current but will require more time to establish the connection or to transfer data. What you can do is change the parameters(Tx Power, advertising/connection interval) to find a set with the power consumption and delay suitable to you. P.S. As for connection establish failure, plz check if CONFIG_RTC_CLK_SRC_EXT_CRYS is set. |
I believe I am experiencing a related/same issue on ESP32-C6. Testing with ESP32-C6-Devkit-1. I have connected only a 32 kHz crystal for the RTC. Building the example from EDIT: The problem was the way I was measuring the current. I did a few more experiments with increasing the advertisement interval and managed to measure the actual sleep current, which is way lower. It's below 1mA for sure, but I don't have the right equipment to measure it properly (yet). |
Hi,
I wish to know when can i expect the low power modes in ble? would this feature be added in the next release v3.0?
currently i observe that with single core and 80 Mhz, the device consumes around 80-90 mA.[minimum i was able to achieve]
is it the best we can achieve ? or is there any way to improve the power consumption with current idf version?
The text was updated successfully, but these errors were encountered: