The ESP8266 and display are running off a small battery to keep the assembly slim. To keep the power draw low, I implemented the following:
+ Make as few calls to Firebase as possible. I ended up with 3: 1 call for density log, 1 call for temperature log, 1 call for settings. The Wifi on-time is below 7 seconds per wake-cycle, of which around 4s is for AP association. The logs are stored and retrieved as byte Blobs, the settings are retrieved by retrieving the whole tree in one call.
+ Between 2300 and 0500, the ESP8266 doesn't turn on the Wifi nor updates the display. Before going to sleep the last time for the night, a variable is written to RTC stating the number of hours it is going to be night-napping. Then it goes to to sleep with WAKE_RF_DISABLE option for 1 hour. Everytime it wakes up, 1 hour is subtracted from the RTC variable, then the ESP8266 goes to sleep again without doing anything else. When it reaches 1, it goes to sleep without the WAKE_RF_DISABLE option. After the last hour elapsed, it wakes up with Wifi-on as usual.
+ A small modification has been done to prevent the USB to UART bridge from consuming power when the ESP8266 Adafruit Huzzah is in Deep Sleep: A trace on the board has been cut. Power consumption is now 0.5mA in deep sleep.
+ To keep the logs for temperature and density under 1kB, the ESP32 (Which is polling the Tilt Hydrometer and runs on mains power) uses a simple compression on the data if the log runs bigger than 1kB. Then it uploads the logs to Firebase for the display to retrieve.
I didn't want the display to have gadgety appearance so I implemented the following:
+ Everything white.
+ I made a really big custom font by creating bitmaps for every character. Then I wrote a simple function to print the text out. The function includes a custom kerning (Space between fonts) which was painstakingly hand crafted character by character.
+ Minimum technical indicators (No traditional battery indicator, but estimated run time written as text and a slider, very small wifi-indicator)
E paper displays are sensitive to power outs mid-update (Notice the dead lines on one of the displays in the pictures? Yup) :
+ The display will do a one last update when battery is below a certain threshold, displaying that the battery is out.
+ Following ESP8266 wake-ups will not update the display until battery is above threshold again.