“This Arduino-compatible watch uses an ESP32 microcontroller and an e-ink display
Like many of you, for the past year I’ve led a pretty static existence living and working in my apartment. But with the rollout of COVID-19 vaccinations, I can actually think of returning to a more ambulatory way of life. Which also means that I’m thinking about mobile devices for the first time in a long time, making it just the right moment to spot the recent release of the Watchy, an open-source, programmable, wireless-enabled wristwatch with a low-power display. Could I use it to create some personalized electronics for when I go back out and about?
With its gray-tinted screen, Squarofumi’s Watchy inevitably conjures echoes of the Pebble smartwatch, which made a huge splash in 2012 when it raised over US $10 million on Kickstarter. Pebble ultimately had its lunch eaten by Apple and others, but Watchy is different in a few key respects: It is not trying to be a mass-market device. It is unashamedly for those willing to tangle with code. It’s also inexpensive—just $50 versus the Pebble’s $150, let alone the Apple Watch’s $400 price tag.
Watchy is based around an ESP32 microcontroller, a popular alternative to AVR- or Arm-based microcontroller because of its built-in Wi-Fi and Bluetooth capabilities that can be programmed via the Arduino IDE. Surrounding hardware includes a 1.5-inch e-paper display, a real-time clock module, a vibration motor, a three-axis accelerometer, and four control buttons.
Assembling the Watchy takes little time. It comes in just four components: a fully populated printed circuit board, a 200 milliampere-hour lithium polymer battery, the display, and a fabric wristband. Adhesive tape keeps the screen and battery in place. A microUSB socket charges the battery and provides the link for uploading programs for new watch faces.
Once I had everything put together, I followed Sqaurofumi’s instructions to install compiler support for the ESP32 along with the Watchy library and example face code. I soon ran into my first problem—none of the sample code would compile. A little poking around online revealed that the macOS version of the Arduino IDE currently has a compatibility problem with the ESP board. However, I was able grab the latest release candidate for the next version of the ESP library, and all was well.
At least until I tried to upload a face to the Watchy. Despite much fiddling, I could not get a response when I tried storing code in the Watchy’s flash memory. Wondering if this was another macOS problem, I fired up Windows 10 on my iMac, but no joy. Querying the official support forum on GitHub got a suggestion from Squarofumi that I test the connection using the “esptools” Python library by erasing the flash directly, but this also produced a negative result.
As I sagged, frustrated in my chair, my eye fell on one of the Raspberry Pi’s floating around my overcrowded desk, and on a hunch, I plugged my Watchy into it. I installed esptools on my Pi—and it recognized and wiped the Watchy’s memory! With that done, I plugged the Pi into my iMac and—miracles—uploaded a program without problem from the Arduino IDE. So now, every time I want to upload new code I have to run it through my Pi first, in a manner reminiscent of an old school EPROM ultraviolet eraser. As of this writing, Sqaurofumi is still working out why I have to perform this ritual of obliteration, but fingers crossed, there should be a better solution soon.
From there, I put my hand to creating my own watch face. Unfortunately, there are quite a few “coming soon” pages under the Docs section of the Watchy website, but between what is available and the cleanly written code samples, it didn’t take me too long to get the hang of how to code a new face. Arduino programs are automatically structured to call first a setup function, and then a main loop function, and typically the bulk of the work is done in the latter. Watchy programs are unusual in that the loop function is left empty, and the setup function is where the action happens. This structure allows the Watchy to conserve power by sleeping most of the time, typically waking up only to refresh once per minute to trigger functions and update the display, although faster updates are possible.
The Watchy can display gray-scale fonts and bitmaps up to 200 by 200 pixels. I decided to display the time in a way that no conventional numerical display could—using ogham, a centuries-old alphabet used to inscribe the Irish language vertically on the edges of stone monuments. Rambling in the southwest of Ireland in younger days, I would often come across these monoliths with their enigmatic markings, so I associate them with the feel of a good long walk. As ogham doesn’t have numerals, I used an online ogham transliterator, to make images of the words “zero” through “nine,” and converted them to Arduino arrays using another online tool recommended in the Watchy docs. Each array represents a narrow bitmap 50 pixels wide, so I could tile them four across to represent hours and minutes. The result was surprisingly effective (and has had the side effect that I can now sight-read a lot of ogham letters for the first time!).
Watchy faces can be expanded beyond simply telling the time: The wireless connection and a JSON parser library allow you to extract information from online services about things such as the weather or subway arrival times, and the accelerometer allows for gesture controls. So once I do finally get vaccinated, I will have my personalized mobile tech to remind me it’s nice to go outdoors.”