I’m building a screen that fetches an image from a Python API and displays it every 1 minute during office hours. My current code works, but battery life is poor—only about 1500 updates total, roughly 3 working days. Can you suggest tips for improving battery life or point out anything I might be doing wrong in my code?
Attachment omitted in migration: display.ino
Originally submitted via the contact form on soldered.com on 13 August 2025. Migrated to the forum for community visibility.
Your code is already very well optimized. I would suggest using a longer sleep interval outside office hours—perhaps 3 to 4 hours if feasible. When the Inkplate is in deep sleep, the main source of power consumption is actually the onboard power LED. You can switch it off using the small switch on the back of the PCB.
Additionally, refreshing the display every minute is quite frequent; extending this to every 2 minutes can significantly improve battery life. Try disabling the power LED and let us know your results.
Apart from using a 2032 battery, what else can improve battery life? What is the 2032 battery for? I’m using BMP to download images from my server (generated in Python). Is that the correct format? Is there a better way? What’s the expected battery life on the standard 1200 mAh battery?
The 2032 battery is designed to power the RTC while Inkplate sleeps. The RTC will draw very little power so it can be powered via this small battery which will last quite a while, essentially offloading the main battery and increasing total sleep time possible.
You can use BMP, PNG, or JPG formats. They will all be decoded on Inkplate and look approximately 90% the same. JPG as a smaller file can save power due to quicker download.
In your code, you don’t need to call eInkOn and eInkOff. These are technically in the library and in user code, but calling them is not necessary and is considered an advanced function. The e-paper panel will be asleep when nothing is displaying, leaving no power on. Removing them would be safer because we handle all the calls to eInkOn and eInkOff in the display functions.
Refreshing each minute during office hours is very frequent. The ESP has to power back on, use WiFi (which is very power hungry on ESP32), refresh the display, and go back to sleep. For projects which last months, refreshes happen once an hour or so. This reduction would increase your battery life by many-fold. In your script which generates the image, you can handle this by changing what’s on the image to make the information relevant for the next hour.
You can verify how much power your Inkplate is using during deep sleep with a multimeter connected in series as an ampermeter on the + wire of the battery. It should read something in microamps. Make sure to turn off the power LED—that’s a big power draw.
You can also use this simpler implementation; you can just remove the first two calls which display .bmp’s, as you can see drawImage will automatically figure out the format: