The July 2022 issue of IEEE Spectrum is here!

Close bar

Watchy: The Hackable $50 Smartwatch

This Arduino-compatible watch uses an ESP32 microcontroller and an e-ink display

5 min read
Illustration of a arm wearing a smartwatch.

Watchy: The Hackable $50 Smartwatch

Illustration: James Provost

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.

Illustration of the components.  Time Pieces: The Watchy is quickly assembled, and held together with some squares of adhesive tape. Slots on the central PCB are provided to thread a fabric watch strap through, but you may wish to 3D-print a case that allows standard watch straps to be used; if so, I recommend not taping the battery down to make it easier to position in the case.Illustration: James Provost

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.

Illustration of differnet screens.  Face Forward: These are some of the sample watch faces included with the Watchy Library. Time can be displayed using either complete fonts or bitmaps for the numerals, as in the Tetris-like face on the lower right. The ogham-based face in the upper left reads 12:33Illustration: James Provost

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.

This article appears in the March 2021 print issue as “Hack This $50 Watch."

The Conversation (0)

From WinZips to Cat GIFs, Jacob Ziv’s Algorithms Have Powered Decades of Compression

The lossless-compression pioneer received the 2021 IEEE Medal of Honor

11 min read
Horizontal
Photo of Jacob Ziv
Photo: Rami Shlush
Yellow

Lossless data compression seems a bit like a magic trick. Its cousin, lossy compression, is easier to comprehend. Lossy algorithms are used to get music into the popular MP3 format and turn a digital image into a standard JPEG file. They do this by selectively removing bits, taking what scientists know about the way we see and hear to determine which bits we'd least miss. But no one can make the case that the resulting file is a perfect replica of the original.

Not so with lossless data compression. Bits do disappear, making the data file dramatically smaller and thus easier to store and transmit. The important difference is that the bits reappear on command. It's as if the bits are rabbits in a magician's act, disappearing and then reappearing from inside a hat at the wave of a wand.

Keep Reading ↓Show less