Inkplate 10 froze and stopped refreshing at 3.92V battery

Customer:

I’ve bought Inkplate 10 with e-paper and enclosure to evaluate it for a potential project where battery longevity is critical. I started with a simple script showing the current battery level every 60s (https://gist.github.com/morkai/fe47e35a16690b8b61) but the device froze before 24 hours passed. At 21 hours it showed 3.92V and remained at 3.92V 7 hours later with the screen stopped refreshing. Pressing the power switch twice restored function.

Battery voltage reference: 3.3V=0% to 4.2V=100%

25.06.2025 13:03 94% 4.15V plugged in
25.06.2025 13:04 87% 4.10V
25.06.2025 13:10 85% 4.08V
25.06.2025 13:37 83% 4.06V
25.06.2025 14:12 83% 4.05V
25.06.2025 19:41 81% 4.03V
26.06.2025 00:05 75% 3.98V
26.06.2025 10:31 68% 3.92V
26.06.2025 17:40 68% 3.92V not refreshing
26.06.2025 17:50 54% 3.80V after restart

What caused the freeze? How can I prevent it or diagnose the cause?

Originally submitted via email support on 26 June 2025. Migrated to the forum for community visibility.

Soldered Support:

The display has problems refreshing after the battery drops to a certain voltage. The excessive battery drainage is caused by not putting the display into deep sleep when not in use. This dramatically changes battery longevity. You can read more about deep sleep in the documentation and test with examples: Inkplate 10 – Deep sleep | Soldered Documentation

Customer:

I’m not using deep sleep because I’m testing WiFi capability—specifically whether it can run a web server with WiFi in deep sleep. My requirement is to update the screen remotely up to a few times per day at random times.

During the first test, the device froze at 70% battery. After manual restart it froze again within hours. After another restart it turned off when battery reached 2.83V. On a second run after full charge, the battery is now at 3.48V (18%) and hasn’t frozen.

I noticed that during the first test with the screen visible and nearby, refreshing was distracting, so I covered it with the case. During the second test I placed it where I couldn’t see it without covering the screen. Does Inkplate have a light sensor that automatically triggers deep sleep?

Soldered Support:

You can combine WiFi with periodic updates using this pattern:

Wake → Receive data over WiFi → Compare with last data → Update display if different

Use RTC_DATA_ATTR to save variables in RTC memory, as shown in this example: Inkplate-Arduino-library/examples/Inkplate10/Advanced/DeepSleep/Inkplate10_Simple_Deep_Sleep/Inkplate10_Simple_Deep_Sleep.ino at ba4a93ace138e434ea1b4ee796da667d897eba83 · SolderedElectronics/Inkplate-Arduino-library · GitHub

If it froze unexpectedly, it could be a software issue.

For deep sleep with partial updates (less distracting screen flashing), use this example: Inkplate-Arduino-library/examples/Inkplate10/Advanced/DeepSleep/Inkplate10_Partial_Update_With_Deep_Sleep/Inkplate10_Partial_Update_With_Deep_Sleep.ino at master · SolderedElectronics/Inkplate-Arduino-library · GitHub

Inkplate does not have a built-in light sensor. You can add one using an external component over Qwiic: Motion & Proximity | Distance and Movement Sensors – Soldered Electronics