Sport Your Hacker Status on Your Wrist with Watchy — an ESP32-Powered Smartwatch!
The age old wisdom is that you can tell a lot about a person from the watch they wear.
From the CEO sporting his Cartier-encrusted chrono dial to the more commonly copped CR2032-powered Casio that has stood the test of time, there is a huge range and variety of watch styles and formats for you to make your statement with.
As is the usual case with hardware hackers and coders alike. We tend to look for ways to reflect our passions in the things we wear. While some of us choose to go the tried and tested route of picking up a smartwatch to go along with the rest of our tech, some of us aren't content untill we have a complete, ground-up understanding of what makes our timepeice tick!
For those so inclined, the SQFMI team would like you to meet their latest low-powered offering: Watchy.
What Is Watchy?
SQFMI are the same people who designed and released Badgy, a digital name badge that uses an ESP-12 module to drive an E Ink display, not unlike the ones commonly found in eReader units in most homes.
Watchy is a fresh take on that hardware, with some adjustments made to reimagine the idea as a smartwatch that you can soon buy as a pre-built unit, or, in true hacker style, build yourself!
Hardware Review
At its core, SQFMI has placed an ESP32-S module. The ESP32 is a popular choice for projects that require communications. Offering both WiFi and BLE interfaces, and oodles of processing power to boot, the ESP32-S module takes the ESP32 chip, along with the requisite support components and PCB trace antenna, and packages them up into an easy-to-solder format, perfect for the DIY approach.
No matter how much processing power you've got, a watch is useless unless it can actually communicate the time to you! A display is the obvious choice for such an application, but with limited space for batteries, designers are looking to alternative display technologies, compared to TFT displays, and their associated high-current drain LED backlights.
The real trick of squeezing as much battery life from the unit as possible is to use a display technology that is easy on the power requirements. To this end, Watchy is designed to use an ePaper display.
The circuit above will be familliar to anyone who has looked at EPD panels before, and we recently featured a very similar implementation when we took a look at the OpenBook project by Joey Castillo.
An EPD is great for battery life, as it only consumes power when the contents of the display are being updated. That means that unless you are counting seconds, you can have your entire design in deep sleep, waking up only once a minute to redraw the current time.
Even assuming the worst case scenario of having to be awake for up to a full second to update the EPD, we can already see that being asleep for the other 59 seconds is going to vastly extend the battery life of the watch!
Keeping Tabs on the Time...
We touched on the relatively high-power consumption of the ESP32 earlier. That much power doesn't come cheap — in terms of current consumption, anyway!
With the ESP32 spending as much time as possible in deep sleep, some thought needs to be given as to how to accurately keep track of the seconds as they tick by. This is a watch after all and above all else, so it should do a good job of telling the time!
A real-time clock (RTC) is a great solution for this task. An RTC is a dedicated device, which is optimized to do one thing, and one thing only: keep track of the time, while taking minuscule sips of power to keep itself ticking over.
Once initially programmed, the part will keep track of the time for as long as there is power applied to the VBAT input. Almost every RTC also possesses some GPIO interrupt functionality, with the ability to toggle a pin based on some time association, be it the tick of the units internal 32kHz oscillator, or a fractional divisor output that toggles every second, for example.
When paired to a GPIO interrupt on the ESP32, we now have a way to kick the ESP out of sleep, where it can then read the current time from the RTC, update the display, and drop right back off to sleep until the next time it needs to do something.
This is a great way to save power in a lot of applications, especially when looking at problems like battery powered sensors, et al. Not every project needs to be awake and looping all the time!
Power and Battery Management
Good power design can be tricky to get right. It's one thing to have a USB-powered device, but when you start mixing in rechargeable batteries — especially with all the associated "quirks" of lithium-ion chemistry — it's a good idea to ensure your power circuitry considers how power will flow when operating standalone, or while being charged.
Failure to properly consider these things might result in an oversight that, for instance, sees the USB voltage on the same rail that would normally be powered directly from your battery. That's not going to be much fun, so let's look how SQFMI make sure that current only flows where it should do.
The main point of notice is the power priority selection, enacted by the CJ2301 P-Chanel FET, located at Q3.
When the device is being powered by soley the battery, there is no voltage at the gate of the P-FET. In this condition, current is able to flow between the drain and source terminals. D4 prevents the gate being driven from the Q3's own output.
When the USB supply is connected, 5V is present at the gate of the P-FET. In this condition, a high-impedance path blocks current flow between the drain and source terminals.
There is still voltage present at the battery terminal, but it is isolated from the input to the RT9080 3.3V regulator.
This allows the cell to be charged by the ubiquitous TP4054 charger IC during this time. The TP4054 is commonplace on most of the simple Li-Ion charger modules we see from places like AliExpress, etc. It's a wonderful gadget that takes care of all the smarts needed to safely charge a 3.7V Li-Ion cell from 5V. Available in a tiny SOIC-8 package, this part is a breeze to integrate!
User Interface
Despite being fairly self-contained in operation, there are a few additional circuit elements to ease interaction with Watchy. We see some tactile switches for input, a vibration motor for output, but one final thing to note is the Bosch BMA423 accelerometer, again with interrupt pins bought out to the main ESP32 processor.
The BMA423 is a tiny MEMS accelerometer, optimized for wearable applications. With built-in support for things like step counting and gesture recognition, it is able to keep track of movement, and autonomously signal to the ESP32 on the detection of certain gestures, for example, the flick of a wrist as you move to read the time.
The BMA423 can detect that movement, signaling the ESP to kick itself out of sleep, and update the display withe the curent time from the RTC. A very handy trick to save even more power, only updating the display when absolutely needed!
Arduino Compatibility
We've taken a look at what makes Watchy tick on a hardware level, but all of these neat components are strangers to each other without some firmware to get them acquaninted and talking.
SQFMI has provided a whole suite of Arduino sketches to serve as watch applications. Changing between the different apps is as easy as connecting the watch to your computer over USB and uploading a new sketch, as you would with any other Arduino project. Very cool!
Wrapping It Up
SQFMI has put a lot of effort into packing as much as they can into this form factor, and providing the code to make the most of the components used.
Watchy is available to purchase for $55, or you can pick up the manufacturing pack here and make your own.
Don't forget to check out the source repo for the applications.
The intrepid can even pull the Gerber set into KiCAD, through the export function contained with in Gerbv and have a go at tweaking the provided layout, though frankly it's already gorgeous, so why would you?
Catch up with the latest from SQFMI on their website, or keep tabs on them on Twitter.