Watchy - Arduino IDE
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