I have had a ball this month programming the PineTime I got around christmas time. Micropython in a memory constrained controller is a fascinating puzzle.
As a result my watch looks like this now:
Monolith Watch Face
It has the day and date written across the top and the large numbers showing the time in a funky font, a step-counter and progress bar plus a heart-rate logger.
It also has a emoji face showing recent mood!
The funky font can be changed, there’s a set of four I’ve built from royalty-free fonts included on the watch.
Double-Tapping the corners of the watch-face bring up many different options.
The top-right gives us buttons to start the timer, set a countdown or an alarm.
If there is a counter or an alarm or a timer running then they are displayed on the watch-face.
There’s only room for two so if you have a countdown and a count-up timer and also an alarm set then you may not notice the alarm-time. What happens when the countdown gets to zero or the alarm goes off?
Of course the watch vibrates strongly for a few seconds flashing up the reason why in the top-bar.
You’ll have noticed that the heart-rate-monitor on the right has the most recent measurement, plus an indication of how long since that measurement was made. Double-tapping that corner lets us set the frequency of the schedule at which the samples are taken. The little blocks show which mode it’s currently on.
Either just a one-off when you ask, every minute, every five minutes or every fifteen. The results are saved to a .csv file on the watch’s memory for upload to a computer, without ever going anywhere near the corporate cloud of the surveillance capitalists.
Double-tapping the bottom left corner allows us the step-counter menu.
Every 15 minutes the number of steps done since the last time is saved to the step-logger csv file for upload to my own computer in my own spreadsheets with no surveillance capitalist allowed anywhere near it. The resolution of the step-logger’s sampling can be changed with the steplog button: Every 5m, 15m, 1h, or off.
Wonder how many steps it is to get to the shops? Want to do a run around the park for exactly 2000 steps? Start the lap-counter at any time.
The lap-counter shows in a darker green just above the daily step-counter. That same menu also allows us to reset the main step-counter at any time. It also has the menu to hide or view the face in the middle of the watch, more on that shortly.
Double tapping the top-left gives us buttons to change the font or the colour, and also to view the stats screen or open the file menu.
Doesn’t it look funky in Sci-Fi font Purple?
The file menu lets us save or load the default settings. The button to set the current date/time or change the screen brightness are there too. That set-date screen lets us increment or decrement by a day or a month, similarly with the set-hours/minutes screen.
The stats page tells us how much space is left in RAM (not shown here in the simulator which has infinite ram), percent full on the disk where the csvs are stored, battery power, and the time at which the logs are rotated and the step-counter reset. I prefer 4am to midnight. Resetting the step-counter at midnight means I wake up with hundreds of steps from last night before bed still on the clock.
Mood log app
So what is that emoji face in the middle all about anyway? Swipe left on the watch-face to see the mood-log.
Tapping the face controls how it looks. Here I’ve touched below the mouth-line around the middle, so the face is slightly frowny and the eyes are a normal amount of open. If you’re very excited you can tap further right to open the eyes more, or if sleepy further left to close them. If you’re happy try touching higher in the face.
We can select under that the category of activity you are doing. Here we can see why I’m slightly frowny: I’m doing work. I have been doing that since 9am.
Pressing the save button logs that new activity: From 9am to 5pm frowning at work.
Now we can see what that emoji on the watch-face is. It’s the most recent one recorded in the mood-log.
The mood log is of course a csv file dropped onto the watch’s flash-drive for upload to a computer without any surveillance capitalists getting their creepy little eyes anywhere near it.
Swiping up from the moodlog-entry screen shows you previous entries.
A button to undo the most recent entry is shown. This is to allow us to easily correct mistakes, sadly not a function to undo the sad hours at work.
You can swipe left to view prior days in the log and up and down to move between activities on those days. We even have an edit function.
Wasp-OS
These are both apps for Wasp-OS, a Micropython project for smart-watches, including the Pine Time. The Wasp functions mean that when paired to my phone, notifications come in and make the watch buzz and show the notification content too.
It also means there’s a snake-game in my build too.
Install
Sounds amazing, right, you totally want this firmware on your watch!
You can order a PineTime from Pine if you don’t already have one.
An Android app called NRFConnect is used to copy the firmware to the watch. Sadly the very latest version of nrfConnect will not successfully work with the PineTime so you need to use this specific known-good version of that Android app to install the software to your watch.
Download the latest version of my Wasp-OS distribution from github.
First select the “reloader-mcuboot” zip and upload that to the watch. That will change the boot-loader to a Wasp-OS one. Then reboot the watch and pair again, this time select the “micropython” to upload the actual wasp-os distribution with my mood and monolith apps.
You can revert back to the original infinitime boot-loader with the “factory” zip.
Here’s a video of someone installing WaspOS and then going back to Infinitime
The Wasp-OS github page has a python command line tool you can use to connect to the watch and run an actual python repl, or copy files to and from it. It’s really cool having a command-line interface to your watch!
No comments on the blog, too spam-ridden, but feel free to follow me on fedi or ask questions on the project bugtracker.