Aaron Watts Dev Watchy
Back to home
RSS feed

Watchy - Arduino IDE

A Watchy with gun metal case displaying the time, date,
        weather and a steps count in a custom monospace font.

I didn't intend to write an article about Watchy, as I only bought it to satisfy my nerd fetish. But after the trouble I had getting it to work, I thought I might write a short guide to assist anyone who might run into some of the same issues I did.

Watchy, by SQFMI, is an awesome gadget. In short it's a programmable watch, that you assemble yourself, with added wifi and accelerometer. It doesn't necessarily connect to your phone, so it's not a smart watch per se, but it is a clever watch. But, and it's a big but, the documentation is somewhat lacking. Unless you end up with the V3 watchy, the little documentation there is, is utterly useless.

I bought mine from the The Pi Hut, which, according to the description on their site is a V2. If you end up with anything less than a V3, don't even bother with the documentation beyond the initial assembly, because it won't work.

First Signs Something Is Wrong

So after assembly, and following the documentation to a tee, I tried the first seemingly obvious and easy thing to customise my watchy; I tried to change the watch face using one of the provided examples in the Arduino IDE. First I got an error that told me that my device was ESP32 and not ESP32-S3. The error killed the operation. So, perhaps foolishly, seeing there wasn't really a solution offered within the docs, I did what that error told me, and switched boards in the IDE from ESP32S3-dev to ESP32-dev. The code compiled (very slowly!), and it flashed - common sense and a good error message had saved the day, or so it seemed.

Once the code had written to the flash storage, it went to reset the device. It seemed to hang on that message. No bother, things sometimes take a while, I'll go make a cup of tea while it finishes up. After I had finished staining my teeth with delicious taurine, I came back to check on Watchy, but it still hadn't reset. I waited a bit longer but nothing happened. E-Ink displays aren't particularly helpful here as they maintain their last image, so I wasn't sure if it had worked but the buttons had stopped working, or if it hadn't worked, until enough time had passed for me to be sure the time wasn't updating.

Even in the preloaded demo, the buttons seemed somewhat unresponsive when trying to operate the Watchy. In particular, I couldn't seem to get the thing to reset or go into boot select mode. After searching online I was worried that it would require soldering to fix a button or the reset - I am not very exeperienced with soldering, and on such small components I am sure it would look as though something has sneezed metal across the board once I was done with it.

Figuring Out Which Model You Have

So, as I mentioned, the docs are useless now. There is a Discord server where you can find some help, but personally, I'm not the biggest fan of chat rooms - they have their place of course, and that is on dial up back in the early 2000's. Anyway, I did it, so you don't have to, but if you enjoy trawling through messages upon messages that aren't necessarily the same conversation as you are partaking in, then be my guest.

One issue with working with Watchy in Arduino IDE, is that it's slow, really slow. Luckily, there's a python package and a couple of binaries we can use to quickly figure out if which version of Watchy we have. Szybet's InkWatchy firmware has a couple of binary demo's we can quickly flash to Watchy, and see which one works. To do so, we will need a Python package called ESPTool.

I have mentioned quite a few times before, in previous articles, that nowadays I compute exclusively on a Raspberry Pi. Unfortunately there wasn't an esptool package in apt, and from what I have read elsewhere, what you can get in apt on other distro's is pretty outdated. To install esptool, first create a directory where you can work on your Watchy stuff, maybe call it watchy/ or something like that. Then, inside that directory, create a virtual environment where you can install esptool.

# create virtual environment
python -m venv esptoolenv

# activate virtual environment
source esptoolenv/bin/activate

# install package
pip3 install esptool==4.5.dev2

# deactivate virtual environment
deactivate

Now we have the virtual environment set up, copy those two firmware binaries over to the parent directory of the vitrual environment, and we can try to flash each one using the following instructions.

source esptoolenv/bin/activate
esptool.py write_flash 0x00000 <demo-name>.bin

If Watchy_3-demo.bin works, you have a V3 Watchy, and you probably just need to make sure you are using up to date versions of the esprissif ESP Board and Watchy libraries. If Watchy_2-demo.bin then you have a V2 or lower, and will need to change a few things in your Arduino IDE to get the Watchy to flash, so read on.

Setting Up The Arduino IDE

If you are also using a Raspberry Pi 5 like me, you might have noticed that the Arduino IDE has gone missing from the reccomended software app. We still have a few options for installation though. There is an apt package, but it's ugly as hell and the menu's don't pick up on the theming. There is also a version in Pi-Apps, but to be safe, I am using the legacy version from the official website, and everything works with it. You will still want to follow the instructions in the Watchy Docs with regards to setting up Arduino, except instead of installing v2.0.17+ of the esp32 platform, install v2.0.11. And, instead of the latest version of the Watchy library, install 1.4.7.

Instead of choosing the ESP32S3-Dev Module board, scroll down in the ESP Arduino boards list until you find Watchy, and select that. Under Board Revision, Watchy v1.0 seems to work well - the buttons seemed far more responsive after flashing with this option than when in the preinstalled demo firmware, so I haven't actually tried the other versions as of yet. Your next attempt to flash Watchy using the Arduino IDE should now work, so don't throw it in the parts bin!

Customising Watchy

I'm not going to go into detail here, after all this is the fun of having a Watchy. Go hack and learn some stuff about programming. However, as a hint, the Watchy firmware library is in ~/Arduino/libraries/Watchy/src/, just in case you might want to try and figure out a better alternative to Watchy displaying it's own internal temperature when it doesn't have a wifi connection to retreive weather data. And if you want to try another firmware on top of the two we've seen here, Watchy_GSR is worth a look and has much better documentation than Watchy does itself!

Fonts

The online font converter was down when I went to use it. It seems to be back online now. But just in case there is an issue with it when you go to use it yourself, you can get the tool itself from an Arduino library within the Arduino IDE. Just cd into the following directory and make the binary yourself, then you can convert your fonts for Watchy yourself.

cd ~/Arduino/libraries/Adafruit_GFX_Library/fontconvert
make
./fontconvert <path-to-font> <size> >> my_font.h
Back to Top

Comments Section