Inkplate 6 power consumption optimization and battery management

Customer:

Where can I find details about Inkplate 6 regarding:

– what is the difference between full display / partial update

– the display consumes power only when refreshing, but the microcontroller consumes power constantly if it’s running constantly… is there an article somewhere discussing these details and how to optimize power consumption (in my case, battery usage) with some example calculations showing how long a battery of certain capacity can support a combination of controller and Inkplate?

– what is the recommended way to refresh the display if it needs to refresh every minute to show accurate time while minimizing power consumption (are we talking about “deep sleep” i.e. “wake up / refresh / go to sleep”?)

– does it make sense to add a CR2032 battery to the RTC if the Inkplate already comes with a housing and battery (LiIon if I’m not mistaken)?

– is there a ready-made example for retrieving battery status information (temperature + total capacity + remaining capacity)?

Original message (Croatian)

Gdje mogu procitati sljedece detalje vezane uz Inkplate:

– koja je razlika izmedju full display / partial update

– display trosi samo kada se osvjezava medjutim mikrokontroler trosi stalno ako stalno i radi … postoji li negdje nekakav clanak gdje se govori o tim detaljima na koji nacin optimizirati potrosnju energije (u mojem slucaju baterije) te neki primjer izracuna koliko neki kapacitet baterije moze podrzati neku kombinaciju kontrolera i inkplate-a?

– koji je preporucen nacin osvjezavanja displaya ako ce se osvjezavati svake minute zbog prikaza tocnog vremena a da se pri tome potrosnja smanji na minimum (govorimo li tu o “deep sleep” tj. “wake up / refresh / go to sleep”?)

– Ima li smisla stavljati bateriju (CR2022) uz RTC ako je uz inkplate dosla u kucistu i baterija (LiIon ako se ne varam)?

– Postoji li neki gotov primjer za dohvat informacije o stanju baterije (temperatura + ukupni kapacitet + preostali kapacitet)?

Originally submitted via email support on 4 December 2023. Migrated to the forum for community visibility.

Soldered Support:

For some of these answers you can check the documentation at https://inkplate.readthedocs.io/ but I’ll answer your questions here as well.

Full display (or full refresh) is called with display.display(), and partial update with display.partialUpdate() - check the example in basic->partial Update for this. In short, partial update is faster because it only changes the pixels on the ePaper that have changed. Full refresh refreshes all pixels. You have Inkplate6 and it can do partial update. First call display.display() to make one normal update, then the following ones can be partial, they will be significantly faster. Just a note, this only works in 1bit mode and you can do partial update approximately 20 to 30 times before you start noticing the ‘ghosting’ effect on the image. We usually put some counter that tracks how many updates there have been and then if it’s the 30th update, do a full refresh, otherwise partial.

If you know how many mAh your battery has, you can calculate battery life in hours as the ratio of battery capacity (mAh) to average device consumption in mA.

Check the deep sleep examples (Inkplate6/Advanced/DeepSleep). There is no example that can exactly calculate how many hours a battery can last because it depends on the program code and implementation in general, but roughly, the whole time while it’s in sleep it will consume current on the order of microamperes, and while it’s updating, on the order of milliamperes, which lasts very briefly.

Updating every minute is OK but consider making it maybe every two or every 5 minutes if your project allows, because that way you’ll save significantly on the battery and it will last longer.

Also, we use reading the voltage on the battery to determine how full it is, and then if when waking up from sleep you read that your battery is near the end, you can notify the user to put the device on charge - just a tip.

When you wake up from deep sleep, it’s like the device’s memory has been reset (except things saved with RTC_DATA_ATTR) so you should use a normal update (because the display doesn’t have in memory what was shown before, and it needs that for partial update).

RTC battery, when full, will keep the time stored in the RTC - this only makes sense to do if you use the RTC, check the example Advanced/RTC/Inkplate6_RTC_Simple for that.

There are examples in the advanced folder for Inkplate6 (read temperature and read_battery_voltage).

Original message (Croatian)

za neke od ovih odgovora možeš pogledati dokumentaciju na https://inkplate.readthedocs.io/ ali odgovoriti ću na tvoja pitanja i ovdje
Full display (ili full refresh) se poziva sa display.display(), a partial update sa display.partialUpdate(), za ovo pogledaj example u basic->partial Update. Ukratko, partial update je brži jer on mijenja samo piksele na ePaperu koji se promijene. Full refresh osvježi sve piksele. Imaš Inkplate6 i on može raditi partial update. Prvo pozovi display.display() kako bi napravio jedan običan update, i onda sljedeći ti mogu biti partial, biti će znatno brži. Samo napomena, ovo može raditi samo u 1bit mode-u i partial update možeš napraviti otprilike 20 do 30 puta prije nego što se počne primjećivati ‘ghosting’ efekt na slici. Mi obično stavimo neki counter koji prati koliko je bilo update-ova i onda ako je 30ti update neka se napravi full refresh, inače partial. Ako znaš koliko mAh ti ima baterija možeš izračunati trajanje baterije u satima kao omjer kapaciteta baterija (mAh) i prosječne potrošnje uređaja u mA. Pogledaj example-ove sa deep sleep (Inkplate6/Advanced/DeepSleep). Ne postoji primjer koji može točno izračunati koliko h može izdržati baterija jer to ovisi o programskom kodu i općenito o implementaciji ali okvirno, cijelo vrijeme dok je u sleepu on će trošiti struju reda veličine mikroampera, a dok se updatea, u redu veličine miliAmpera, što traje jako kratko. Update svake minute je OK ali razmisli o tome da bude možda svake dvije ili svakih 5 ako tvoj projekt to dozvoljava, zato što ćeš tako znatno uštedjeti na bateriji, trajati će duže. Također, mi koristimo čitanje napona na bateriji da očitamo stanje koliko je puna i onda ako pri wake-up iz sleepa očitaš da ti je baterija pri kraju, možeš obavijestiti korisnika da stavi uređaj puniti, samo jedan savjet. Ako se budiš iz deep sleep-a, to ti je kao da se memorija uređaja resetirala (osim stvari koje su spremljene sa RTC_DATA_ATTR) pa bi trebao koristiti običan update (jer display nema u memoriji spremljeno ono što je bilo prije prikazano, a to mu treba za partial update). RTC baterija, dok je puna, će ti u RTC-u zadržati vrijeme koje je spremljeno u RTC, ovo ima smisla raditi samo ako koristiš RTC, za to pogledaj example Advanced/RTC/Inkplate6_RTC_Simple Postoji, primjeri su u advanced folderu za Inkplate6 (read temperature i read_battery_voltage)
Nadam se su ti informacije korisne za projekt :slight_smile: