HackSpace magazine

Bangle.js review

By Ben Everard. Posted

We’re fans of hackable smartwatches here at HackSpace towers. They offer a tantalising chance to build a future of IoT that works for us, not some global mega corp that wants to harvest our data or lock us into an ecosystem of ever increasingly expensive devices. We’ve previously looked at the LILYGO T-Watch-2020, and now we’ve had a chance to play with a Bangle.js.

As you may have guessed from the name, the Bangle.js is programmed in JavaScript. It also features something of a kitchen sink approach to hardware and is unbelievably packed with features for a wrist-borne device. There’s a GPS receiver, a heart rate monitor, a three-axis accelerometer, a three-axis magnetometer, a vibration sensor, a 64MHz ARM Cortex M4 with 64Kb of RAM, 4MB of external flash, and a 350 mAh battery. On top of all this, it’s waterproof for ten metres. It will come as no surprise that with all this on board, it’s a bit of a whopper. It comes in a 5×5×1.7 cm case. This is significantly larger than any watch this author has worn before, and it’s a visible statement piece on your wrist. If you wear shirts, you may find that it interferes with your cuffs. That said, we didn’t find it uncomfortable to wear and it felt quite unobtrusive despite its size.

The Espruino firmware is open-source, so you can code for it at almost any level you like, but for most users, programming the Bangle.js will mean writing apps or widgets. These are very similar, other than the fact that widgets run in the background and apps in the foreground (apps can include widgets, if you need both functions).

You can develop these on the online Espruino IDE at espruino.com/ide. From there, you can upload your code over Bluetooth (there’s no data-in on the watch, and the USB charge cable is power only). This reviewer has done some JavaScript development over the years, but only a little, and he found it straightforward to get started. Perhaps the main thing to get your head around is the event-driven nature of the language. Lots of things are driven by callbacks to functions passed as parameters. This sounds more complex than it is. Really, it just means that you create functions that you want to run when particular events happen, and then tell the watch which event you want to trigger your function. An advantage of this is that it means that the firmware can take care of power management. In your code, you just link in what you want to happen when – and when nothing’s running, it can make sure that power isn’t wasted.

The IDE provides the ability to grab data files off the watch, which is a great way of working with anything that tracks data. However, it’s worth bearing in mind that Bluetooth is the only way of getting data on or off the watch. You can download the files manually like this, or you could write a companion app (or website) that gets the data you want. It’s possible to connect to the device with another Bluetooth-compatible device using Puck.js to stream data to a web service if you want, but this isn’t entirely straightforward.

There’s an app store of existing applications at banglejs.com/apps. This is driven by GitHub as the data store, so if you want to see how an app works, just click on the GitHub icon and you can see the source code. What’s more, this is a static page driven by GitHub Pages, so you can fork this, enable GitHub Pages, and create your own app store to which you can add your apps (see this reviewer’s at benevpi.github.io/BangleApps). We’ve been working on a sleep quality tracker, which you can see in this store. Once you’re happy with your code, if you want, you can submit a pull request back to the original repository and your app will be listed on the global app store.

GPS reception is OK. Indoors, it can struggle, but outdoors, we found it worked better. This is probably because antennae don’t like being crammed in a small space with lots of other electronics, especially when they’re trying to pick up weak signals from spacecraft thousands of miles away.

We also found the heart rate monitor prone to suspect readings. We found we could get accurate data by taking five readings, then selecting the middle one, but obviously this limits the speed at which you can get data.

The Espruino IDE lets you upload code, interact with the serial console, and pull data off the watch

These minor gripes aside, we found the Bangle.js worked excellently. We were able to play with other people’s apps, poke around their internals, and code our own – exactly what you’d expect to be able to do with an open-source watch. For the price, this is an excellent development platform for personalised electronics, with more features than we know what to do with. We’ve already got some plans for this watch – keep an eye on the mag for future articles. However, it is a big watch and right on the limit of what we’d consider an acceptable size for a wrist-based device.  

From: espruino 

Price: £69.96   



A fun and versatile wrist-based computer.



From HackSpace magazine store