With the battery implemented it makes sense to use the deep sleep capabilities of the ESP32. This would make the battery last up to months with a single charge. This estimates are heavily dependent on how long the device is awake for. The workflow is as follows:
- Tickers view is shown
- Store necessary state
- Go into deep sleep for "ticker scroll frequency"
- Wake up
- Restore state
Some quick measurements about the device consumptions and other metrics:
Theoretical battery estimates:
|Updates per day||Hourly Consumption / mah||Daily consumption / mah||Battery last / days|
In order to maintain a state during deep sleep cycles the ESP32 has another CPU (ULP) and RAM (RTC)
that stay awake during deep sleep, all other peripheals are turned off (depending on the sleep mode).
These are ultra low power components that, as expected, are very limited.
An alternative to using RTC would be to use SPIFFS but its best to avoid constant writes to it since it has a limited number of write cycles.
With the current approach, the total boot time needs to be maintained during sleep cycles in order for the tickers
to function properly.
RTC is only able to store uint16's so two addresses have to be used in order to store a long (epoch time).
The device outperforms the theoretical charts by a lot, more tests are required but it lasted more than 16h on a single charge (~30% battery left) with 10sec scroll time and 60sec update rate.
One persistent issue is the speaker pop sound on power on/power off cycle. This seems to be caused by noise or unfiltered outputs on the chip NS4148 (3w amplifier). The chip has a sleep mode pin which should reduce the pop sound but its currently connected to 3V3 thus not being available to the ESP32. For now the N Speaker wire was soldered to pin IO27 in order to control when the speaker is on. A big downside is that this essentially renders the amplifier useless making the speaker around half as loud.