LEFTEROS / PERSONAL ARCHIVE
eucWatch — your electric unicycle on a cheap smartwatch
16 October 2026 / Lefteris Iliadis / SomniusX
eucWatch is a dash for electric unicycles (EUCs) that runs on cheap smartwatches, by enaon. The watch talks to the wheel over Bluetooth and shows speed, battery, temperature and the rest on your wrist. Everything is written in JavaScript on Espruino, and it's installed from a web page. I contribute to it; the project and every decision about it are enaon's.

The web loader starts by asking which watch you have.
What it does
- A dash on your wrist: speed, battery, temperature, current and PWM, with dashboards and alerts you set yourself, and a vibration when one goes off.
- Every big wheel brand: Kingsong, Inmotion, Ninebot, Begode (Gotway) and Leaperkim (Veteran), each in its own module.
- Cheap watches: the nRF52-based P8, P22 (A, B, C, D, B1, C1), PineTime, Magic3, Rock, Bangle.js 2, and the older DSD6 and DK08.
- Installed from the browser: the web loader puts Espruino's app loader in front of the project, so you pick the apps for your watch and send them over Bluetooth.
The P8 and P22 watches first need Espruino flashed on them over the air, with ATC1441's DaFlasher and fanoush's Espruino builds. The how-to walks through it.
Two lines of work
- enaon/eucWatch is the project itself, since October 2020.
- kvazimoda24/eucWatch is Igor Vasilkov's fork, with fixes and features from 2024 that never made it back, and a loader of its own at kvazimoda.pro/eucWatch.
In October 2026 I compared the two. The fork merges into the project with no conflicts, and it holds clear fixes for real bugs. So I took those to enaon as small pull requests, with Igor kept as the author of those commits. Reading the fork, I also found a few bugs in it, and sent the fixes to Igor.
What I've contributed
| Change | Where | Sent | State |
|---|---|---|---|
| Inmotion V11/V12/V13: haptic alerts never fired, and the first escaped packet crashed | enaon #30 | 2 October | merged on 2 October |
| App installs from a phone froze halfway | enaon #31 | 2 October | merged on 2 October |
| Veteran stuck on "ble already connected" after a dropped connection | enaon #32 | 2 October | merged on 2 October |
| TPMS: the low-pressure alarm crashed, and the dash ignored your pressure limits | kvazimoda24 #1, #2 | 2 October | open |
| Inmotion: packets with more than one escape byte came out shifted | kvazimoda24 #3, #4 | 2 October | open |
The first three are Igor's fixes; #30 also carries my fix for packets with more than one escape, the same one I sent to Igor's fork. None of it was tested on a wheel or a watch: the Inmotion changes were checked in Node with stubbed packets. The phone-install fix (#31) still needs a try on a real phone.
Last checked on 16 October 2026.
How it started
Electric unicycles are one of my hobbies. In 2020 I wrote EucWorldPebble, which puts EUC World's figures on a Pebble, and in 2021 I asked enaon about eucWatch's eucWorld.js, an early idea for the watch to act as a bridge to phone apps. In October 2026 I went back to my old EUC projects, and eucWatch was where help was most useful.
Posts
- Three fixes for eucWatch, from Igor's fork to the project, 2 October 2026
Links
- eucWatch: source, web loader, Espruino how-to
- Igor's fork: source, loader
- Espruino
Thanks a lot: enaon for eucWatch and for merging so quickly, and Igor Vasilkov for the fixes.