We see a large number of ESP32-based projects over here at Hackster, and it's of little surprise — the ESP32 is an absolute beast of a processor, sporting dual 240MHz Xtensa CPU cores, WiFI and BLE. What's not to love about this one-stop shop for computing and connectivity?
However, despite that fully featured shopping list, we don't often see too many projects with a focus on trying to coax as much battery life out of this part as possible.
The ESP32 is a solid choice when working with a product that has the option of being tethered to a power supply, but 9/10 of the projects we see making use of this processor wouldn't last too long living off a lithium polymer cell!
Max K is out to show us that this doesn't have to be the case, and has enlisted the lesser-seen, low-power operation modes of the ESP32, in order to allow him to create thisslick handheld device, based around the ESP32-WROOM module and a very nifty Memory LCD from Sharp.
Let's do a little digging to see what this project is all about!
The most striking feature that faces you when you first encounter this board is the huge LCD panel on the front of the device. Not only for its generous size however, the more observant would notice that the display is sat showing its frame buffer, even when the handheld is sat inactive.
You could be forgiven for thinking that there is already a disconnect between the design ethos, and the device implementation — surely an "always on" display doesn't adhere to the ideas embodied by ultra-low-power operation?
Normally, you would be spot on! Though, this display is not what it first seems.
Sitting somewhere in between conventional LCD technology and E Ink display tech, Sharp's Memory LCD is a compelling option for those who prefer the faster update rates of LCD, but who also long for the low power operation of E Ink.
The display works using transflective technology, meaning that the pixels are themselves responsible for reflecting light, as they are in an EPD. There's no backlight to worry about draining the battery, and there's not much need — this type of screen is incredibly readable in even the lowest light conditions — readability in full darkness is obviously going to take a little bit of external light of course!
Even more impressive is that while these displays do indeed require a small amount of current in order to hold a static image — where as an EPD requires none — the draw is miniscule. Max K is quoting 180 uW(!) as the total power consumption figure for the device while asleep, yet holding an image on it's display.
Normally, these modules can be found in places like some of the Garmin Fenix smartwatches, which feature color versions of the display panels, or on the development boards from companies such as Silicon Labs, where they nicely complement the ULP design of the microcontrollers they are showcasing.
Max K has pulled out all the stops here though, in sourcing one of the larger panels on the market, the Sharp LS027B7DH01A — packing 400x240 pixels into a generous 2.7" screen size — meaning that there is a huge amount of real estate available for graphics, menu systems and more!
There is one very neat feature to this design that has caught my eye, more so than the massive LCD panel front and center, and that is the input method available to the user.
Until it's mentioned, you can be forgiven for overlooking the rather simplistic HMI afforded by the four-way joystick and action buttons mounted beneath the display. Instead, the GIF below appears to suggest that there is some extra magic going on when it comes to the HMI of this device...
Clicking through menus can become a bit of a repetitive task, so it looks like Max K has sought to spice things up a bit when it comes to the HMI of this device — choosing to enlist a lesser seen input method; a gyroscopic mouse implementation, based upon the MPU6050 from TDK (If that manufacturer label seems odd to you, the MPU range was formerly InvenSense, before being acquired by TDK some years back!).
While I wouldn't have been the first to suggest such an input method for a mobile device, I have to really hand it to Max K, he's done an incredible job at implementing this. It looks to be responsive pretty quick to use, and all in all, a well-rounded way of navigating his implemented UI!
If you were left with any question of how well tuned the filtering on this setup is, just check out the paint demo below!
We recently featured a project from @martinfassini, which shares a number of design goals — ESP32-based, low-power operation being common goals of note between the two projects. Marin clued us in to the less-than-accurate operation of the internal RTC of the ESP32, noting that it can easily drift a number of minutes over the course of a day.
While one of the easy ways to deal with this is an external, dedicated RTC device, this is another line on the bill of materials — so what other options are there for a network connected device?
Utilizing the NTP (network time protocol) to synchronize the RTC of the ESP32 makes a great deal of sense — it is after all, how many of our devices keep tabs on time, and when you're working with a networked device with web connectivity, why wouldn't you take advantage of this atomic clock backed option?
With the display having grabbed a fair amount of our attention so far, let's flip this board over and see what makes it tick!
Looking absolutely fabulous — having been fabbed in the instantly recognizable OSHPark "After Dark" service — one of the first things we notice about this board is the choice of USB connector employed.
Just before people start suggesting that it isn't, notice I said USB-C is easy, not so much USB 3! After all, USB-C is only a connector standard, including the use of a few extra signalling lines designed to facilitate the reversible operation of the connector.
Super high-speed signaling and dual differential pairs are the realm of USB 3 — you are free to run USB 2.0 over the lines of a USB-C connector, as can be seen from the rock solid FTDI serial converter implementation shown below.
Get your projects looking like they are ready for the modern day, and leave those old fashioned micro USB connectors in the parts bin! There are even specific, USB 2.0, C-type connectors on the market, designed for this very task — as Max K has used here.
These are a really neat trick to keep in your design book — offering compatibility with the emerging generation of USB-C connectors and cables, while keeping the footprint in the realms of sanity. If you've ever had to track out a USB-C connection, complete with the full load-out of pins, you'll likely appreciate these parts for future designs.
In order to tease out the most "bang for your buck" when it comes to getting the system power consumption down to as low a figure as possible, every little bit of design optimization helps!
With consideration extending as far as the choice of LDO, we're happy to see the Torex XC6220 put to good use, providing a peak supply current of 1A on it's output, yet a mere 8uA of quiescent current consumption. Able to be dropped in, in place of the AP2112K, this hand-solderable SOT-23-5 (or SOT-89-5, if you're feeling brave, or even USP-6C if you're feeling in the mood for some reflow...) packaged part is well worth a look when you next find yourself tasked with squeezing as much life as possible out of your battery powered designs.
Another design feature that's quite interesting to see in this project, is the use of the ESP32's ultra-low-power coprocessor. One of the quirks of the memory LCD panel technology is that while the display buffer can be treated as static, and forgo the need to be refreshed, the interface does require something in the region of a 1Hz signal to be applied to the EXTCOMM pin of the module to keep things fresh, in order to avoid issues such as display burn in.
Keeping the ESP32 main cores online just to toggle a pin at the right timing is a huge waste of energy, and would run down the devices 320mAh battery in the space of a few hours!
By offloading this task to the ULP coprocessor, the main cores can sit in standby, instead only spooling up once a minute to update the system time, and the display screen buffer itself! The downside? Programming the ULP "third core" must be done in assembler, but thankfully for Max K, Espressif has an example program that demonstrates the exact functionality needed — toggling a LED is done by toggling a pin, and that's exactly what the EXTCOMM input of the display needs!
I wasn't expecting to see this on a device that hasn't been Apple certified, but thanks to a feature on iOS known as ANCS (Apple Notification Center Service), this device is able to mirror notifications as they appear on a paired iOS device — and I've got to say, it looks very slick in operation.
Made possible through use of a handy Arduino library (ESP32-ANCS-Notifications), this looks like something I'd be certain to use in my own projects. (That is, if I were ever to own an Apple device!) There seem to be a few low-level bugs noted by Max K with regard to the ESP32 not being able to resume WiFi after switching to BLE operation without a reboot — something necessitated by the fact that the two wireless interfaces share the same antenna.
(We're sure there are people working on that already though — coexistence on the two radio interfaces is a very attractive feature of the ESP32!)
There's a whole wealth of interesting parts to this project, from the clever use of the ULP core of the ESP32 silicon, to the low-power focused component selection, all the way to the fully-featured firmware, packed with goodies, we highly recommend checking out the project repository over on GitHub, and taking a look to see what you might like to leverage for your next low power project — of any flavor, but especially if you want to feature the ESP32!