Puck Battery – How long will that CR2032 battery last?

While there are many factors that can affect how long an Espruino Puck battery will last, we are able to determine some basic limits with some simple math.

The Puck is designed to be a self contained IoT device running on its own power in the smallest space possible. The common CR2032 watch battery is the appropriate power supply choice as it’s physical size mimics the footprint of the Puck itself. With that choice brings with it some physical limits.

Batteries are rated on their capacity and their performance detail may be obtained from the manufacturer specification data sheet. [will open in a new tab]

From the upper right hand corner:

Nominal Voltage: 3.0 Volts
Typical Capacity: 240 mAh (to 2.0 volts)
(Rated at 15K ohms at 21°C)

We also can visually see this data laid out on a graph on the left hand side:

Continuous Discharge Characteristics
Load: 15K ohms – continuous 21°C (70°F)
Typical Drain @ 2.9V: 0.19 mA

What does this all mean? We have a 3.0 volt battery that has a capacity of 240 milli-Amp hours of charge. This battery will provide a continuous supply of 190 micro-Amps for 1263 hours at room temperature. ( 240mAh / 0.19mA = 1263h == 240,000 / 190 = 1263 Remember 1mA milli-Amp == 1000uA micro-Amp )
With that constant drain we can expect the battery to last seven weeks. ( 1263h / 168h/wk = 7.5 wk == 1263 / 24 = 53 dy )


We know that:

The number of hours in a
Dy      24
Wk   168
Mo   730 (30.41 days)
Yr   8760 (365 days)

1mA milli-Amp == 1000uA micro-Amp


Now that we have some baseline data, we can relate this to how an Espruino Puck will perform.

http://www.espruino.com/Puck.js#power-consumption [will open in a new tab]

Under the heading ‘Power Consumption’ is a nice table we may use to determine the battery life expectancy.

We’ll just use a couple of the listed limits:

At idle not doing anything – 3uA
Connected via BLE – 200uA
100% CPU usage running JavaScript – 4mA
All three LEDs lit, 100% CPU usage running JavaScript – 10mA

Simply divide the battery capacity by the current drain required of the circuit.

Lets convert these current drains to hours of operation:
Given:  240mAh == 240,000uAh

Time in hours:
Note that at idle battery internal resistance will drain before this limit is met
At idle:        240,000 / 3 = 80,000 / 8760 = 9 yr
Bluetooth:  240,000 / 200 = 1,200 / 24 = 50 dy
100% CPU: 240 / 4 = 60 = 2.5 dy
All LEDs:    240 / 10 = 24 hr


It can be seen that executing many continuous Javascript instructions will shorten the battery life considerably. This will be improved by using a polling effect or placing the unused chip sections into sleep mode.

See: http://forum.espruino.com/conversations/304791/#comment13631305   Puck using NRF.sleep() in ver 1v92+ [will open in a new tab]

http://forum.espruino.com/conversations/297334/   Battery lifetime and lifetime of other components? Posted on Tue 13th, December 2016 [will open in a new tab]


By knowing the draw or current drain and dividing that into the ampacity of the battery will provide the number of hours we will be able to run in that continuous mode. Remember to watch those units.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s