Minimizing energy consumption in advertising BLE
Posted: Thu Aug 14, 2025 3:07 pm
Hello forum. This is my first post.
I'm designing a device that should run on AAA batteries (though AA replacements are acceptable). I'm looking for a solution that will allow my device to consume minimal current during advertising mode. Here’s a bit about the device: it sleeps for 4 seconds, then wakes up, broadcasts advertisements while waiting for a connection, and goes back to sleep.
**First question:** Is it possible to implement such a cycle so that the device can run for a year on 1000 mAh (2000 mAh with AA batteries, though this is less desirable)?
**Second question:** If the answer to the first question is yes, how can this cycle be implemented?
I tried the following cycle on an ESP32-C3 chip:
- 4 seconds of deep sleep
- 100 ms of advertising
- back to deep sleep
The problem with this cycle is the long initialization after waking up (about 200 ms), during which high currents are consumed. With this approach, I only managed to achieve 2.5 mA per cycle (60 mA per day), which is a very poor result.
As an experiment, I also tried a cycle that avoided frequent reinitialization—using light sleep without reinitializing the BLE stack. The device stayed in light sleep for 20 seconds, woke up briefly on a timer (0.001 seconds), and went back to light sleep. Even with these modest settings, the device consumed 278 μA per cycle, which translates to 6.67 mA per day—only about 150 days of operation on AAA batteries.
Any suggestions for improvement?
I'm designing a device that should run on AAA batteries (though AA replacements are acceptable). I'm looking for a solution that will allow my device to consume minimal current during advertising mode. Here’s a bit about the device: it sleeps for 4 seconds, then wakes up, broadcasts advertisements while waiting for a connection, and goes back to sleep.
**First question:** Is it possible to implement such a cycle so that the device can run for a year on 1000 mAh (2000 mAh with AA batteries, though this is less desirable)?
**Second question:** If the answer to the first question is yes, how can this cycle be implemented?
I tried the following cycle on an ESP32-C3 chip:
- 4 seconds of deep sleep
- 100 ms of advertising
- back to deep sleep
The problem with this cycle is the long initialization after waking up (about 200 ms), during which high currents are consumed. With this approach, I only managed to achieve 2.5 mA per cycle (60 mA per day), which is a very poor result.
As an experiment, I also tried a cycle that avoided frequent reinitialization—using light sleep without reinitializing the BLE stack. The device stayed in light sleep for 20 seconds, woke up briefly on a timer (0.001 seconds), and went back to light sleep. Even with these modest settings, the device consumed 278 μA per cycle, which translates to 6.67 mA per day—only about 150 days of operation on AAA batteries.
Any suggestions for improvement?