An Ultra-Portable ESP32 Handheld with a Large Always-On Display
Max.K has taken advantage of power-saving features to build an ultra-portable ESP32 handheld with an always-on display.
Espressif’s ESP8266 WiFi microcontroller module, and its Bluetooth-equipped big brother ESP32, were both developed with IoT applications in mind. For that reason, they were designed to be low-power. But that term is relative, and the wireless radios and comparatively fast processors in the ESP32 result in a much higher power consumption than less well-equipped microcontrollers. Fortunately it does have built-in features to limit that power consumption, and Max.K has taken advantage of them to build an ultra-portable ESP32 handheld with an always-on display that was inspired by Panic’s Playdate console.
Panic is a software company that has gained a lot of attention recently thanks to Firewatch and Untitled Goose Game. They also made headlines in the hardware world with their unique Playdate handheld console. It’s a very basic console with simple controls and a monochrome screen, but its innovative crank handle and always-on display helped it stand out. Max.K’s ESP32 handheld purposefully omits the crank handle to avoid the need for mechanical components, but it does have an always-on display. Unlike E Ink displays, this Sharp Memory LCD is suitable for games and can also be left on continuously without drawing much power.
That display is 2.7”, and Max.K wanted to avoid making the overall size of the handheld any bigger than it needed to be. For that reason, he chose a small LiPo battery with a mere 350mAh capacity. At full tilt, that would only be enough to keep the handheld going for a few hours at most. But Max.K was able to dramatically improve that by utilizing the Espressif ESP32’s built-in power saving features. Until the device is woken up, it will draw very little power but still keep the clock or calendar updated.
Max.K relied heavily on the ESP32’s sleep mode to achieve that. While it’s asleep, the ESP32’s RTC (Real-Time Clock) and ULP (Ultra Low Power) coprocessor can still be used. The ULP coprocessor is used to keep the display refreshed at 1Hz — a requirement to avoid burn-in. Every 60 seconds, the RTC will briefly wake up the main processors in order to update the time. Pushing a button will also wake up the ESP32 through a hardware interrupt, and allow the user to access the full functionality, including simple games.