The new version of the Bangle.js watch caught my eye on Kickstarter as the price seemed very reasonable. It’s a hackable smartwatch with lots of features: accelerometer, magnetometer, barometer, thermometer, colour LCD display, Bluetooth, heart rate sensor and GPS plus a pretty long battery life.
It arrived yesterday, and I’ve been having a play.
First impressions were good, the packaging is lovely and the set-up card had enough to get me going. I found the UI a bit confusing but it makes sense as soon as you’ve actually read the instructions. You scroll up and down menus by moving your finger up and down the screen, then select with a button press. It also took me a while to figure out that the same length button press unlocks the phone and also then takes you to the main menu when you press it again.
It’s no Apple Watch, but it’s a fraction of the price – and readily hackable! The display looks amazing in direct light or sunlight. In dimmer lighting conditions, the backlight is slightly uneven with a faint shadow across the lower third of the screen, but it’s only noticeable in ‘light’ mode with black text on a white background. Put the display into ‘dark mode’ (which I prefer) or view in direct light and it’s not a problem at all.
Everything is loaded onto the phone via Bluetooth from a compliant web-browser like Chrome. There are already a few apps available here https://banglejs.com/apps/ and of course you can open the source code for each app in GitHub and tinker with it.
What really impressed me straight away was how quickly you can put code on the watch and test run it. The card in the box has a demo altitude program. I typed it into the IDE, clicked the ‘Send to Espruino’ icon, paired the watch via Bluetooth, selected RAM to flash it to, and my demo code was running on the real watch in seconds. Very cool.
Here’s a quick demo I knocked up to show the temperature in a different font:
Bangle.setBarometerPower(1, "app"); require("FontTeletext10x18Ascii").add(Graphics); Bangle.on('pressure',data => { g.reset().clearRect(Bangle.appRect); g.setFont("Teletext10x18Ascii").setFontAlign(0,0); g.drawString("Temp (c)", 88, 70); g.setFont("Teletext10x18Ascii",3).setFontAlign(0,0); g.drawString(data.temperature.toFixed(1), 88, 105); }); Bangle.loadWidgets(); Bangle.drawWidgets();
The watch charges with a magnetic USB cable, but that’s all USB is used for – charging. There’s a sensible warning not to leave the USB cable plugged in but unattached to the watch, as it’s liable to attract a metal object and short!
A few niggles or wrinkles:
- The altimeter needs calibrating in code, I really don’t think my lounge is 70m below sea level!
- There’s no audible alarm, only a vibrate motor which is way too subtle to wake me up. I’ll still be using my phone to make sure I wake up in time for work!
- The GPS receiver takes a very, very long time to get any data, at least on first use. In fact I’ve not managed to get it to work at all yet. 15 mins on a windowsill and a 40 minute outdoors walk were not enough. I think I’d have traded the GPS feature for a piezo speaker, but future firmware updates might improve this.
Overall I’m pleased with my purchase. The developer is very responsive on the forum and I look forward to modding existing apps, adding new ones as they appear as well as writing my own. Now, I really must get my classic Mac Chicago font working on this…