IoT Battery Life Calculator: Sleep, Wake, Transmit & Self-Discharge

Estimate sensor node battery life from sleep, wake, sensing, connection and transmit states. Include board leakage, regulator current, capacity derating and annual self-discharge.

#battery life #coin cells #duty cycle #ESP32 #IoT #regulator quiescent current #self-discharge #sensor nodes

This IoT battery life calculator estimates the autonomy of a sensor node that sleeps, wakes, reads a sensor, connects a radio and transmits a report. It is intended for engineers, students and makers comparing firmware schedules, power circuits and batteries before a prototype is fully characterized. ESP32 deep sleep battery life is a useful example, but the same state budget can describe an nRF or STM32 node with an external radio.

Start with the reporting interval, measured from the beginning of one report to the beginning of the next. Enter the duration and total current of each active state. The calculator fills the remainder with sleep and integrates current over the complete cycle. Include sensor warm-up, processing, network association, receive windows, security handshakes and typical retries in the appropriate states. The defaults are an illustrative ESP32-like workload on a purpose-built board, rather than a guaranteed profile for any particular product.

Next, choose a battery starting point or enable custom capacity and average voltage. The named choices cover a CR2032 coin cell, two alkaline AA cells in series, a Li-SOCl2 cell and a Li-ion cell. Series cells add voltage while retaining the single-cell mAh capacity. Adjust the fractions of capacity retained at your operating temperature, above the system cut-off voltage and under pulse loading. These factors are design inputs: read them from the exact manufacturer's discharge curves or determine them experimentally. Avoid applying the same loss twice.

Choose the current measurement domain carefully. Battery-terminal measurements can include the complete board and regulator. In that case, enter zero for separately added overhead that is already measured. When starting from regulated-rail currents through a switching converter, enter its rail voltage and effective efficiency. Always-on board leakage and regulator quiescent current are battery-side additions. A development board can keep drawing milliamps while its processor sleeps at microamps.

Read the estimated life alongside the contribution shares. The dominance check compares integrated charge: a tall transmit pulse can still contribute less than a long sleep interval. The reporting-interval curve shows diminishing gains as sleep current, board overhead and self-discharge take over. Press play on elapsed discharge time to see available charge split into charge delivered to the node, remaining charge and internal self-discharge.

Check the estimated reporting-cycle count as well. The tool blocks a budget that cannot sustain a full cycle and warns below ten cycles, where the starting state can strongly affect depletion time. Use a state-by-state discharge analysis in that range.

Use this sensor node battery life estimate to prioritize measurements and design changes. A coin cell battery life calculator cannot establish pulse compatibility from capacity alone. Voltage sag, Li-SOCl2 passivation, regulator dropout, temperature history, calendar aging and changing radio conditions can end service earlier. Measure the real device at the battery terminals over many complete cycles, including startup and weak-link conditions, and validate the chosen cell at low charge and the expected temperature extremes.

How it is calculated

The load model integrates five sequential states over one start-to-start reporting interval. Every state current is the total node current in the selected measurement domain. The unoccupied time is sleep.

ts=T−(tw+tr+tc+tx),Iavg=gIsts+Iwtw+Irtr+Ictc+IxtxT+Iboard+Iq.t_s=T-(t_w+t_r+t_c+t_x),\qquad I_{avg}=g\frac{I_st_s+I_wt_w+I_rt_r+I_ct_c+I_xt_x}{T}+I_{board}+I_q.

For battery-terminal or direct/LDO currents, g=1g=1. For regulated-rail currents through a switching converter, g=Vrail/(Vbatη)g=V_{rail}/(V_{bat}\eta). The separate board and regulator currents are always battery-side additions. Power conversion losses are allocated to the state that causes them. The daily-energy chart excludes internal self-discharge.

Available charge starts at Q0=QnomfTfcutfpulseQ_0=Q_{nom}f_Tf_{cut}f_{pulse}. These three factors come from the user's cell data and are not universal temperature or pulse correlations.

The annual self-discharge fraction dd is the selected starting fraction times the multiplier. We adopt a first-order remaining-charge approximation: k=−ln⁡(1−d)/8766k=-\ln(1-d)/8766 per hour, using a Julian year. At a constant mean load, dQ/dt=−Iavg−kQdQ/dt=-I_{avg}-kQ. Its solution is

Q(t)=Q0e−kt−Iavgk(1−e−kt),L=ln⁡(1+kQ0/Iavg)k.Q(t)=Q_0e^{-kt}-\frac{I_{avg}}{k}(1-e^{-kt}),\qquad L=\frac{\ln(1+kQ_0/I_{avg})}{k}.

At zero self-discharge, Q(t)=Q0−IavgtQ(t)=Q_0-I_{avg}t and L=Q0/IavgL=Q_0/I_{avg}. Numerically stable log1p and expm1 functions preserve this limit. The animation stops at LL and clamps remaining charge to zero.

Charge accounting is derived here from conservation, following the mode-weighted budgeting approach in Silicon Labs, section 3, and Callebaut et al., pp. 4–5 and 17–18. Published reference checks use JLCPCB's custom/development-board examples and Callebaut Table 7, p.30. The waveform diagram uses schematic state widths and heights; numerical durations and currents are labeled.

Repeated-cycle applicability. The lifetime is a continuous average-current approximation. The estimated cycle count is N=L/TN=L/T, and Q0/qcycleQ_0/q_{cycle} compares available charge with one cycle's load demand. Lifetime results are withheld if the battery cannot fund a full cycle or the averaged lifetime is shorter than one interval. Below ten estimated cycles a warning calls for state-by-state analysis; ten is a practical averaging threshold, not a cell qualification rule.

The interval sweep recomputes nonnegative sleep time at every point. A zero-load point has unbounded depletion time in this model and is plotted as an intentional gap in both lifetime curves. This also applies with first-order self-discharge alone, which approaches zero charge asymptotically. Every strictly positive-load sweep point uses the documented lifetime equation.

Assumptions

  • The defaults combine ESP32-like currents with illustrative timing and low board leakage. Espressif's ESP32 Series Datasheet v5.3 identifies a 10 µA chip deep-sleep configuration. The other default active-state values and the 3 µA board / 2 µA regulator additions are design scenarios; replace them with measurements.
  • Battery capacity and nominal voltage starting points come from the named manufacturer documents. CR2032: 235 mAh to 2.0 V at 21 °C and a 15 kΩ load. Saft LS 14500 September 2023: 2.6 Ah at 14 mA, 20 °C, 2.0 V cut-off. VARTA 4906 June 2018: 2970 mAh under high-resistance discharge; the two-cell series pack is 3 V, 2970 mAh. Panasonic NCR-18650BF: minimum nominal capacity 3250 mAh, 3.6 V.
  • Retained-capacity defaults 0.90, 0.90 and 0.95 are independent design allowances. They are not fitted to those datasheets. If capacity already reflects the same temperature, cut-off or pulse test, set the corresponding factor to 1.
  • Annual-loss starting fractions are 0.01 for primary lithium, 0.025 for alkaline and 0.12 for Li-ion. Energizer and Saft support approximately 1% or less at reference storage conditions; alkaline and Li-ion values are generic starting values from Callebaut Table 3, p.17. Verify the actual cell. With a custom battery, the selected row still supplies the annual starting fraction; adjust its multiplier.
  • A single mean battery voltage and switching efficiency apply across all states. Direct/LDO current transfer assumes adequate voltage headroom throughout the usable charge window.
  • Currents are constant within each state, cycles repeat continuously, and self-discharge acts on remaining available charge. Published storage losses quoted relative to nominal capacity are approximated by this first-order model. Cell aging, protection-circuit current and environmental leakage require separate allowances or board-current entries.
  • The largest modeled state current is an average within that state; it can be lower than the real instantaneous peak. Coin-cell and Li-SOCl2 pulse conditions are reminders based on limited datasheet examples, not battery qualification tests.
  • Averaging assumes many repeats of the same cycle. Fewer than ten predicted cycles triggers a warning; less than one supported cycle blocks lifetime results. Starting phase is unspecified, so this tool does not resolve within-cycle depletion.

Where it applies

Treat the output as an estimate and measure the real device at its battery terminals. Capture enough full cycles to include startup, retries and variable network attachment. Development-board current can be orders of magnitude above the chip's sleep specification; SparkFun measured approximately 2.5 mA total deep sleep on its ESP32 Thing Plus USB-C board in one configuration.

Use positive available capacity and mean current, an annual self-discharge fraction below 1, and a reporting interval at least as long as the active states. Zero-duration states are omitted from the budget. The annual fraction is used without clipping throughout 0 ≤ d < 1; invalid fractions block results. A current measured for the whole board should not be counted again as separate regulator or board overhead.

The model estimates charge depletion, without predicting terminal voltage, brownout, regulator dropout, voltage recovery, cold-start behavior, Li-SOCl2 passivation, pulse-buffer sizing, a Peukert effect, recharge cycles or harvesting. A capacity derating factor cannot make an unsupported pulse feasible. Check the exact manufacturer's curves at your cut-off voltage, temperature, load and storage history. Switching-converter efficiency at microamp sleep loads may differ substantially from its active-load efficiency.

Long projections can exceed practical calendar life even when the algebra is valid. Independently validate any service-life commitment. The interval chart is a sensitivity study, including long projections; it is not a promise of field life. The animation is an averaged charge inventory rather than a voltage discharge curve.

Source limitations: Adafruit's profiling guide is useful for measurement practice, but its nine-second/ten-minute worked duty cycle is arithmetically inconsistent (the duty cycle is 1.5%). Those calculated lifetime figures are not calibration targets. Only the consistent SF7 power values in Callebaut Table 7 are used; several other technology columns appear to contain scale errors.

Averaging can fail for small batteries or long reports. One 180 mA transmission lasting one hour consumes 180 mAh. A battery with only 100 mAh available cannot finish that transmission, even if the daily average suggests 13.33 hours of life. The calculator blocks that configuration. The actual depletion time depends on whether discharge begins in sleep, wake, sensing, connection or transmit. For lifetimes covering fewer than ten reporting cycles, resolve discharge through the actual sequence of states and include self-discharge during each state. The plotted discharge and animation remain cycle averages, so they cannot predict the first brownout within a report. The ten-cycle warning threshold is a modeling heuristic; demands for tighter accuracy can require many more cycles.

The interval chart leaves intentional gaps at exactly zero load, where this charge-depletion model has no finite lifetime. Loaded points are finite, while calendar life and voltage cut-off still limit practical service.

References

  • Silicon Labs, Battery Life in Connected Wireless IoT Devices, especially §3–4: https://www.silabs.com/whitepapers/battery-life-in-connected-wireless-iot-devices
  • Callebaut et al., The Art of Designing Remote IoT Devices—Technologies and Strategies for a Long Battery Life, Sensors 21(3), 913 (2021), pp.17–18,30. DOI:10.3390/s21030913. https://pmc.ncbi.nlm.nih.gov/articles/PMC7866251/
  • JLCPCB, ESP32 Power Consumption Explained, battery-life worked example, accessed 2026-10-27: https://jlcpcb.com/blog/esp32-power-consumption-explained
  • Adafruit / John Park, Espresso Water Tank Meter: Power Profiling (2025): https://learn.adafruit.com/espresso-water-tank-meter/power-profiling
  • Energizer CR2032 Product Datasheet, CR2032EU0118, p.1: https://data.energizer.com/pdfs/cr2032_eu.pdf
  • Saft LS 14500 Technical Datasheet, Document 31064-2-0923, September 2023, pp.1–2. Manufacturer PDF hosted by Sentinum: https://raw.githack.com/bellaminemo81172/sentinum_documentation/2aac65e9113ce4f842ba6e6f81367a27bc037438/Battery%20safety/LS14500/LS_14500_DB-EN.pdf
  • VARTA 4906 LONGLIFE Power Data Sheet, 2018-06-05, p.1, manufacturer document hosted by IC Intracom: https://www.icintracom.biz/amfilerating/file/download/file_id/14909/
  • Panasonic NCR-18650BF Product Specifications, minimum nominal capacity and voltage: https://industry.panasonic.eu/pd-35779/batteries/secondary-batteries/lithium-ion-batteries-for-europe/cylindrical-type/ncr-18650bf
  • SparkFun ESP32 Thing Plus USB-C Hookup Guide, Hardware Overview, measured board currents: https://learn.sparkfun.com/tutorials/esp32-thing-plus-usb-c-hookup-guide/hardware-overview
  • Espressif, ESP32 Series Datasheet v5.3, Product Overview and §5.4: https://documentation.espressif.com/esp32_datasheet_en.html

Inputs

InputSymbolUnitDefault
Battery starting point
Representative named cells; no automatic voltage-sag prediction. Series AA capacity is the single-cell mAh value.
cellPanasonic NCR-18650BF · Li-ion
Use custom battery capacity and voltagecustom_cellfalse
Custom usable-rating capacity
Capacity before the three retained-capacity factors.
Q_usermAh2600
Custom average battery voltage
Average voltage over the usable discharge, not necessarily the fully charged voltage.
V_userV3.6
Capacity retained at operating temperature
Fraction: 0.90 means 90% remains. Read the cell curve at your temperature and current. Default 0.90 is a design allowance, not a cell correlation.
f_temp0.9
Capacity retained above system cut-off
Fraction of the temperature-adjusted capacity accessible before device or regulator cut-off. Default 0.90 is an allowance; derive it from the discharge curve.
f_cut0.9
Capacity retained under pulse loading
Additional fractional capacity allowance for your pulse regime. Does not prove the battery can deliver the peak current; measure voltage sag.
f_pulse0.95
Self-discharge multiplier
Multiplies the selected cell's annual fraction. Use 0 to turn off self-discharge. Default annual fractions: primary lithium 0.01, alkaline 0.025, Li-ion 0.12; validate at storage temperature.
sd_mult1
Start-to-start reporting interval
The complete cycle, including the active states. Increase this to see when sleep and overhead stop further gains.
T_reports900
Wake and boot duration
Sequential state duration; include initialization here.
t_wakes0.1
Sensor read and processing duration
Include warm-up and processing in this duration or their measured equivalent charge.
t_reads0.05
Radio connection and listening duration
Include association, security handshake, receive windows and typical retries; use an average over many cycles.
t_connects1.2
Transmit duration
Total transmit time per report, including repeated packets.
t_txs0.2
Sleep state current
Total selected-domain current while sleeping. ESP32 Series Datasheet quotes 10 µA for one chip deep-sleep configuration; the board can draw far more.
I_sleepuA10
Wake state current
Total MCU and peripheral current during this state; do not add the sleep current again.
I_wakemA30
Sensor read state current
Total node current, including the MCU and sensor, during this state.
I_readmA35
Connection state current
Total state current; protocol overhead is often more costly than the payload.
I_connectmA100
Transmit state current
Average within the transmit state, not an instantaneous RF spike. Use a measured representative value.
I_txmA180
Where the state currents are defined
For measured whole-board battery currents, leave added board and quiescent currents at zero. Direct/LDO uses current transfer 1; ensure voltage headroom separately.
supplyBattery terminals or direct/LDO current
Regulated rail voltage
Used only for switching-converter power conversion.
V_railV3.3
Converter efficiency fraction
One effective efficiency for all states, excluding separately entered quiescent current. Real efficiency changes strongly at microamp loads.
eta_reg0.9
Additional always-on board current
Battery-side addition for LEDs, USB bridges, dividers and leakage. The 3 µA default is an illustrative low-power design allowance. Development boards can add milliamps.
I_boarduA3
Additional regulator quiescent current
Battery-side constant addition. Enter zero if already included in your measured state currents or efficiency model.
I_quietuA2
Expected dominant current contribution
Warns if another contribution is larger; this compares integrated charge, not peak current.
expect_modeIdentify it from the inputs
Elapsed discharge time · ▶
Play to advance the averaged discharge model. It ends at the calculated depletion time.
ageyear0.5

Results

With the default inputs above, the calc gives:

ResultValue
Estimated battery life1.35 year
Estimated battery life493 day
Mean battery current193.59 uA
Initial available capacity2,500.9 mAh
Largest current contributionConnect + transmit
Connect + transmit share (%)89.5
Sleep share (%)5.2
Board + regulator share (%)2.6
Capacity lost to self-discharge (%)8.38
Largest modeled state current180.01 mA
Estimated reporting cycles47,341.6

Checked against sources

Each case below was calculated by this calc and agrees with the value from its source (within the tolerance where one is shown).

JLCPCB: custom board, report every ten minutes

Source: JLCPCB, ESP32 Power Consumption Explained, worked battery-life example (s2). 120 mA for 3 s, 15 µA for 597 s; 1600 mAh usable. Published average 0.615 mA and about 108 days are rounded; self-discharge and extra overhead are disabled.

Inputs: Use custom battery capacity and voltage = yes; Custom usable-rating capacity = 1,600 mAh; Custom average battery voltage = 3.7 V; Capacity retained at operating temperature = 1; Capacity retained above system cut-off = 1; Capacity retained under pulse loading = 1; Self-discharge multiplier = 0; Start-to-start reporting interval = 600 s; Wake and boot duration = 0 s; Sensor read and processing duration = 0 s; Radio connection and listening duration = 0 s; Transmit duration = 3 s; Sleep state current = 15 uA; Wake state current = 0 mA; Sensor read state current = 0 mA; Connection state current = 0 mA; Transmit state current = 120 mA; Additional always-on board current = 0 uA; Additional regulator quiescent current = 0 uA; the others as above.

ResultSourceThis calc
Mean battery current0.615 ± 0.001 mA0.6149 mA
Estimated battery life108 ± 1 day108.4 day

JLCPCB: development board sleep current

Source: JLCPCB, ESP32 Power Consumption Explained (s2), development-board row: total deep-sleep current 6.5 mA, 120 mA awake for 3 s every 600 s, usable capacity 1600 mAh. Whole-board state currents already contain overhead, so additions are zero.

Inputs: Use custom battery capacity and voltage = yes; Custom usable-rating capacity = 1,600 mAh; Custom average battery voltage = 3.7 V; Capacity retained at operating temperature = 1; Capacity retained above system cut-off = 1; Capacity retained under pulse loading = 1; Self-discharge multiplier = 0; Start-to-start reporting interval = 600 s; Wake and boot duration = 0 s; Sensor read and processing duration = 0 s; Radio connection and listening duration = 0 s; Transmit duration = 3 s; Sleep state current = 6,500 uA; Wake state current = 0 mA; Sensor read state current = 0 mA; Connection state current = 0 mA; Transmit state current = 120 mA; Additional always-on board current = 0 uA; Additional regulator quiescent current = 0 uA; the others as above.

ResultSourceThis calc
Mean battery current7.07 ± 0.01 mA7.068 mA
Estimated battery life9.4 ± 0.1 day9.433 day

Callebaut Table 7: SF7 report every fifteen minutes

Source: Callebaut et al., Sensors 21 (2021) 913, p.30 Tables 6 and 7, doi:10.3390/s21030913. Independent published mean is 17.0 µW. Sleep is 5 µW; one SF7 event uses 10.8 mJ over 2.088 s. Equivalent currents at an arbitrary 3 V preserve those powers. Only these consistent LoRaWAN columns are used; the other technology columns have apparent scale errors.

Inputs: Use custom battery capacity and voltage = yes; Custom usable-rating capacity = 1,600 mAh; Custom average battery voltage = 3 V; Capacity retained at operating temperature = 1; Capacity retained above system cut-off = 1; Capacity retained under pulse loading = 1; Self-discharge multiplier = 0; Wake and boot duration = 0 s; Sensor read and processing duration = 0 s; Radio connection and listening duration = 0 s; Transmit duration = 2.088 s; Sleep state current = 1.667 uA; Wake state current = 0 mA; Sensor read state current = 0 mA; Connection state current = 0 mA; Transmit state current = 1.724 mA; Additional always-on board current = 0 uA; Additional regulator quiescent current = 0 uA; the others as above.

ResultSourceThis calc
Mean battery power in microwatts17 ± 0.03 uW16.988 uW

Callebaut Table 7: SF7 report every hour

Source: Callebaut et al., Sensors 21 (2021) 913, p.30 Table 7, doi:10.3390/s21030913. Independent published value is 8.0 µW at one event/hour; same 5 µW sleep and 10.8 mJ, 2.088 s event. Expected power is read from the paper rather than calculated by this tool.

Inputs: Use custom battery capacity and voltage = yes; Custom usable-rating capacity = 1,600 mAh; Custom average battery voltage = 3 V; Capacity retained at operating temperature = 1; Capacity retained above system cut-off = 1; Capacity retained under pulse loading = 1; Self-discharge multiplier = 0; Start-to-start reporting interval = 3,600 s; Wake and boot duration = 0 s; Sensor read and processing duration = 0 s; Radio connection and listening duration = 0 s; Transmit duration = 2.088 s; Sleep state current = 1.667 uA; Wake state current = 0 mA; Sensor read state current = 0 mA; Connection state current = 0 mA; Transmit state current = 1.724 mA; Additional always-on board current = 0 uA; Additional regulator quiescent current = 0 uA; the others as above.

ResultSourceThis calc
Mean battery power in microwatts8 ± 0.02 uW7.997 uW

Energizer CR2032: published low-drain runtime

Source: Energizer CR2032EU0118, p.1, simulated application: 15 kΩ continuous, typical drain 0.19 mA at 2.9 V, 1235 h to 2.0 V. Constant-current approximation with nominal 235 mAh; 10 h absolute tolerance covers the rounded typical drain and capacity and the actual resistive load's varying current. This is an approximate low-drain validation, not a pulse-life prediction.

Inputs: Use custom battery capacity and voltage = yes; Custom usable-rating capacity = 235 mAh; Custom average battery voltage = 2.9 V; Capacity retained at operating temperature = 1; Capacity retained above system cut-off = 1; Capacity retained under pulse loading = 1; Self-discharge multiplier = 0; Start-to-start reporting interval = 600 s; Wake and boot duration = 0 s; Sensor read and processing duration = 0 s; Radio connection and listening duration = 0 s; Transmit duration = 0 s; Sleep state current = 190 uA; Wake state current = 0 mA; Sensor read state current = 0 mA; Connection state current = 0 mA; Transmit state current = 0 mA; Additional always-on board current = 0 uA; Additional regulator quiescent current = 0 uA; the others as above.

ResultSourceThis calc
Life including self-discharge1,235 ± 10 h1,237 h

Related Resources

Responses

Your email address will not be published. Required fields are marked *

L ading...