Write down every part and its current, then add them up. Run time is battery capacity divided by average current.
What the message means
Small draws add up, and radios and motors have large peaks. A battery rated in milliamp-hours gives less than its label under heavy or cold use.
Fix it in this order
- List each part with its idle and active current from its datasheet or a meter reading.
- Add the currents, and estimate how long each part is active.
- Divide the usable battery capacity by the average current.
- Use about 70 to 80 percent of the rated capacity as a safe figure.
- Measure the real current with a meter in series and compare.
- Turn off or sleep parts you do not need.
Why it happens
Battery run time is capacity divided by average current, and the average has to include the peaks. A short radio burst at a high current for a few percent of the time can matter more than a steady low draw. The rated capacity is also measured under gentle conditions; heavy loads, cold and age all reduce what you get, hence the 70 to 80 percent rule.
Here is an illustrative example, not a measurement. A 2000 mAh cell at 75 percent usable gives 1500 mAh. An average draw of 150 mA then gives about 10 hours. If sleep modes cut the average to 15 mA, the same cell lasts about 100 hours.
If you see this, do this
| You see | Do this |
|---|---|
| Runs for half the planned time | Peaks and capacity derating. |
| Idle current is high | Check LEDs, regulators and modules. |
Related
robot battery guide, ESP32 deep sleep.
Last reviewed: November 2026. These are the usual causes and the order that finds them fastest. Test on your own board; clones and cables differ.