Bangle.js Beta Feedback

Posted on
of 2
/ 2
  • Hi! We're getting close to the time that KickStarter watches will arrive and software will be flashed onto them, and I wondered if anyone had any feedback about the Bangle.js Beta and Nodeconf badges...

    While obviously stuff can be tweaked and added later, do you think there's anything specific which needs doing before the Bangles are sent out, since most users won't update their firmware initially?

    So far, I have:

    • Make the automatic screen backlight more flexible (add option to disable, detect wrist twisting rather than upright position) DONE - issue here
    • Create a useful set of default apps - DONE
    • Add a 'welcome' app that explains buttons, touch, and how to get apps - issue here
    • 'About' app with the KickStarter pixel screen, firmware version, etc - issue here
    • 'Reset to default' button in App Loader that wipes everything and also loads the apps exactly as they were flashed onto the device - DONE
    • Proper 'Getting Started' and 'Make your first app' docs

    Please make sure you're running up to date Espruino firmware and apps before mentioning a problem as a lot has changed recently, and issues you had with earlier firmwares may have been fixed!

  • I like the watch, i've already created a watch interface "Centerclock".

    I don't wear the watch currently, because of this­ues/1738
    I'm a person that wear a watch 24/7. And with the bangle, it's difficult to sleep because of the ever automatic display turn on when i move my hands.
    The watch display turn on way to often in not required scenarios.

    For me, i need to turn off the watch display per default and only turn it on with a press of a button.

    Also i have troubles with bluetooth connection while developing.
    It is a pretty weird behaviour

    • Sometimes i'm able to connect within seconds
    • Sometimes it doesn't connect at all, for minutes
    • Other bluetooth devices work flawlessly on the same PC
    • Sometimes i start an upload and it stops inbetween and abort

    I can't describe a way to reproduce, even i can't describe a proper fix. I always tried resetting the watch, settings, etc... until it finally connected again.

    So, my development of my watch face took a way longer because of the bluetooth issues, but with patience i managed to finalize it.

    Battery life is really good, when the display don't turn on automatically.
    Currently it's on my desk since 14 days, untouched. Still have battery.
    With normal auto turn on display this drops off to a few days of battery life.


  • Thanks! I'll definitely be getting the watch display stuff fixed soon - today hopefully.

    Very strange about your BLE issues - it sounds almost like low signal strength. When the upload fails and aborts, does the watch itself reboot? Do you see lower signal strength reported in your Bluetooth settings than you do for other devices?

  • Signal strength on the pc is typically fine when it is connected.
    That was also my first thought, a signal problem. For that reason i've tested different situtations: Really near the pc bluetooth dongle, more far away, disconnected all other devices.
    Nothing really have an impact on the signal strength.

    If the watch has restarted, i don't know.

    It feels like, once connected via web bluetooth and than reloading the page, which disconnects you and you have to reconnect, the problem start to begin.

    I will try to invest more time on that issue and summerize that for you in a post. This will take some days probably. Will also try another pc.

  • Oh and one tool what would be awesomely handy: Convert ttf/otf fonts (or better: specific chars of that font files) into the required espruino format. I've tried different converters but had no luck.
    Best scenario: Pick a font file, select chars, select font size, press convert, done :)

    But that's not an issue. Just something what i've required for my watch interface. I ended up taking a default existing bangle font.

    I like your campaign. That's how crowdfunding should always be.

  • What about settings for:
    12h / 24h clock display
    metric / imperial (GPS speed, distance)
    date format (for example year - month - day would be the date format I choose)

    Oh, non-english UI maybe? I'm ok with english UI, but others may not

    Is there a way to store "state"? For example the pedometer resets every time I long-press button 3 or go to settings. Is this a known issue?

    Regular alarm clock app (for example wake me up at 6:12 each weekday)

    Timer app (for example alarm in 23 minutes)

    BLE connectivity: feels like (didn't investigate too deeply) turning ON in the menu doesn't have an immediate effect. Turning BLE off in the menu, and going to "make connectable" seems to work mostly.

  • I would like to have a gesture-collection-generator
    Gestures for your project could be done in 3 steps:

    • first record gesture(s) and store in database (on Espruino ?)
    • select gestures you need in your project
    • train gestures. The more people sent their recorded gestures, the better.
      Once you got the result, it can be used in your project.
  • Thanks! To try and sum up...


    There is a bitmap font converter at­ts which works from bitmaps. It's an interesting thought - there's no reason you couldn't have an online font maker that generated bitmap fonts for you at the size you want - I just added­/issues/535

    There is also a (beta) tool to generate vector fonts from TTF at­b/vector_font_roboto/scripts/create_vect­or_font.js but right now they have to be compiled in... Allowing custom vector fonts is something I might add later, but for this release I think it's too much of a push. It might be interesting to have an online converter that generated a new g.drawVectorString command though - and that could be done now.


    12/24hr seems like a good plan. There's an issue for it at­ssues/76 - I'd be really interested if you have any ideas about how to do it such that clocks don't have a bunch of extra work to do. Maybe a date format string?

    Metric/imperial - good idea, but again is there a nice way to do this without putting too much stress on app developers? I notice out of the 80 beta watches there haven't been many apps submitted so I don't want to add extra hurdles!


    Yes - there's an event called E.kill now which is called in every case except the watchdog reset (2 button press). I need to modify the pedometer widget to make it handle that and save the state. Just filed an issue for that at­ssues/84


    Good point. I've added an issue at­ssues/83
    It should be fine to do with a widget as I'm hoping with the recent changes pretty much all apps except games will start to add the widgets

    BLE connectivity

    Yes, it doesn't change as soon as you modify the setting - you have to go 'back' first

    Gesture collector

    Yes, absolutely. There could be a website you go to, connect via Web Bluetooth, and it collects data for training. This is something I've wanted to do but as it's all server-side I'm going to wait until I have a bit more time! Issue filed at­ssues/85

  • Settings: IMO if there is a "global" option the app's developer can just use it (or ignore it), so they don't have to figure it out: "should I create another speedometer app with miles/hour? Or should I implement my own settings mechanism?"

    A date format string would be good. Of course depends on how many people would want to use a different one. And afaik, there is no built-in date formatting in javascript / Espruino, right?

    A minor issue: The delete confirmation doesn't fit on screen if the app's name is long. See the attached picture. (I deleted the pedometer, because it felt like in the last days battery drain was higher. And didn't use the pedometer earlier. Might be wrong tho...)

    1 Attachment

    • IMG_20200131_072034_crop_.jpg
  • Thanks - good point re settings. I don't want to bloat the menu too much so I reckon I'll add a 'locale' page or something like that which handles this kind of stuff. I also just added an issue for the app manager - adding a newline should be trivial.

    There is a date format function but it seems non-standard:­/Web/JavaScript/Reference/Global_Objects­/Date/toLocaleFormat

    We have an issue open for some kind of formatting at­ues/1703 - but maybe it's better to just do it as a module

  • Few things for me are:

    1. App Store uploads remain unreliable. Particularly the Settings app for some reason. I think it the uploads should be checksummed in some way and rejected if the checksum fails.

    2. I think there needs to be some sort of version compatibility check between the Apps and the Firmware. We've had a lot of issues with app changes (e.g. the appearance of Launcher) causing issues with older Firmwares. At this point we flash the firmware and the apps on exactly the same day just to be sure.

    3. You have to delete and re-install an App in the appstore to reliably update it. That should be a one-step process.

    4. We've had the same unreliable Bluetooth issue as reported above. We have to reset the watch multiple times a day if doing any sort of dev on it, as it just becomes invisible to the IDE. Far more than any previous Espruino device.

    5. HID remains very unstable. Watch will crash at least once an hour with it enabled.

    6. Grabbing the latest time off GPS on reboot is far preferable to leaving it on Jan 1 1970. As long as the GPS time isn't set to the year 2250 then it's likely to be reasonably correct. This should address the lack of an RTC for most people.

    7. Power-off still seems to drain the battery. We've had multiple internal people get dead watches in the post after they were sent fully-charged and powered off.

      1. Agree with all of your items in the top post :-D

    Still love it!

  • App Store uploads remain unreliable

    I did add CRC in the latest builds just in case - but could you check the dev console and see if anything is reported? Maybe make another post if there's anything. It's always been solid for me.

    version compatibility

    Just filed an issue for this:­ssues/90

    The lack of proper build numbers (because travis doesn't pull in the full Git history for some reason) screws this up a bit. Right now I'm still treating these as beta and trying to make sure I get things in a good state for release more than I care about making people update everything - realistically you'll only have to wait a few more weeks and it'll stabilise though.

    Also, there's now an Install default apps button in the app loader, which should help you out significantly with new watches.

    delete and re-install an App

    There's already an issue for this one :)­ssues/79

    We've had the same unreliable Bluetooth issue as reported above

    I think this was due to the way the settings app forcibly tried to change settings on boot even when there was nothing to change. I made some changes yesterday and I'm hopeful it'll be a bit better now.


    Just filed an issue for this:­ues/1752

    I haven't been using it on mine so far so hadn't come across it as a problem. If you can find a way to actually force a crash then it'd make life a lot easier debugging.


    Yes, sounds like a good plan. Issue filed at­ssues/91


    Yep, it's on my list...­ues/1748

  • App Store uploads remain unreliable

    I did add CRC in the latest builds just in case - but could you check
    the dev console and see if anything is reported? Maybe make another
    post if there's anything. It's always been solid for me.

    Awesome re CRC. I'm doing a few watches this week and will check. Several of us having the problem here. Usually when installing a bunch of apps in quick succession.

    The lack of proper build numbers (because travis doesn't pull in the
    full Git history for some reason) screws this up a bit. Right now I'm
    still treating these as beta and trying to make sure I get things in a
    good state for release more than I care about making people update
    everything - realistically you'll only have to wait a few more weeks
    and it'll stabilise though.

    Yeah figured it would make more sense when everything stabilised.

    Also, there's now an Install default apps button in the app loader,
    which should help you out significantly with new watches.

    Ooh I'll tell our intern! They'll be very happy to hear that.


    Just filed an issue for this:­ues/1752

    I haven't been using it on mine so far so hadn't come across it as a
    problem. If you can find a way to actually force a crash then it'd
    make life a lot easier debugging.

    For everyone it just randomly crashes the watch when HID enabled but doing nothing, and not connected, just walking around. They only know it has rebooted because clock has reset to 1970. So will be hard to replicate. Unless it's on a timer of some sort.

    Thanks again.

  • Usually when installing a bunch of apps in quick succession.

    Might be some issue with clicking upload on one app before the last has finished? If so it might be easy to reproduce - however I just tried and it worked ok.

    They'll be very happy to hear that.

    If you clone the repo you can modify defaultapps.json to include the apps that you want :)


    Hmm, really strange. I'll leave it enabled and see what happens

  • Hi! Recently started wearing my Bangle.js as my daily driver, and apart from the other issues already summarized at the top, I've found I bend my wrist up into the watch buttons a lot. I've reset the time, turned BT off/on, and launched apps this way. Some way to "lock" the watch buttons would be useful. Holding the buttons down won't help; it'd have to be something like tapping the screen multiple times in a row to unlock. Locking it by going through the menus would be fine, I think.

  • +1 :)
    Usually I notice at the "oops I entered menu" state, but still.
    Tapping the screen - not sure, I guess the watch may detect swimming or rain as a lot of taps. But probably fine, if doesn't do anything than unlocking the watch.

  • As you know, with a ff - fat finger - tapped in the center, both button 4 and 5 fire... so my suggestion for a lock / unlock is something like start/touch down on one side, swipe to the other side, stay there and then untouch... it is less than two seconds. If this is not unique enough, stay in the middle for a bit. That would be for sure a nice work. Even the emulation has the overlap for a while, so with the pointy finger - like the mouse - both buttons fire...

    // ulockpoc.js - unlock/ lock proof of concept
    function onInit() {

    Yu should see on touch down on the left (no buttons side), red LED1 comes on, moving/swiping slowly towards the right side (buttons side), green LED2 comes on, more moving/swiping red LED1 goes out, and on untouch, green LED2 goes out as well...

    ...OOOOPS.... the overlap - which I though have seen in an firmware update a bit ago - is not there...(anymore)...

    @Gordon, did I misread the release notes of the touch detection areas for the emulation?

  • "oops I entered menu"

    I found this too. I actually just pushed some firmware changes to stop the menu coming up yesterday - so if you update the Bangle.js firmware it should be better now.

    But the locking is a good idea. I'm adding some settings for when the LCD lights, so I'll make sure I add some stuff in there that'll make it possible to add a 'lock widget' to handle more interesting locking functionality.

    did I misread the release notes of the touch detection areas for the emulation?

    I fixed the emulator to allow 'swipe' to work, but it still doesn't do two touch areas at once if you press in the middle - the code would need redoing for that IMO (using a single DIV and working out which button press in code)

  • Just updated firmware, I'll report back.

    One other thought: could the bands be swapped, and the display output rotated so I could wear the watch "upside down"? With the buttons on the left I shouldn't be able to hit them accidentally...

  • Actually yes! I guess the robust way to do it would be to actually have your own firmware, but you could probably to something like this:


    Buttons would still be flipped, but for a lot of uses it'd be fine.

  • Two things: The battery level seems to be off / not representing the real remaining capacity: Didn't decrease much for a couple of days, but last day it depleted completely from ~20% in less than a day. Roughly the same "just as a watch" usage pattern, no BLE. Or the Improving Bangle.js E.showMenu code did left something running in the background that caused higher consumption.

    GPS does get a fix inside if you are patient enough: Battery died, put on charger inside, and turned on GPS time and left it there. Went out to do other things for a while, and did get GPS time. One window in the room, but no direct line-of-sight at all to the sky from the place I charged it and ~50cm stone walls. Didn't check position accuracy tho.

  • Menu cycle navigation would be nice. BTN1 when on top could move to the last item in the current menu.

  • Hi @Gordon,
    Apologies for not submitting an app, mine isn't 'complete' yet :-( but I guess I bit off more than I could chew. However, I have managed to form a wish-list:

    1. More options in Storage API. Currently I miss a sizeofFile and a erase("myfile*") option. First one more than the second :-)

    2. Some guidance on how to build multi feature apps. My app for example is a clock face that does, GPS and HR when asked to (button trigger). I plan to introduce step counter as well. Should I build each as a widget or bake it into a clock app? Currently the eventing system seems to work well in one app, but I haven't tested it fully.

    3. Lots more guidance on how to start with recording gestures so it can be fed back to the AI engine. A lot of it might be outside BangleJS eco-system (more to do with TensorFlow Lite) so some links on where to get started for a noob like me would be really nice

    4. Also is the minify on deploy feature being built or has it been made redundant with ability to load files off flash. Asking because I had to move my development work to a separate dev folder which then is gulp-ed and sent into the Apps folder as a minified file.

    Apologies for not updating the firmware yet. I promise to do it this week :-)

    I have managed to sync between the watch and laptop using Python and currently focused on building a dashboard that pulls in the GPS data and shows pretty maps. The Python script has lots of hard-coded values so at best a pre-alpha quality script, but it will not delete anything off your watch, so you are safe ;-)

    P.S. Let me know if I shouldn't use the name 'Bangle' in my repos, or happy to rename any if the official repo wants them.

  • @AkosLukacs I think you might be hitting the lipo discharge curve - currently we just convert the voltage linearly into batter percent, which works over most of the life of the battery. I guess I could tweak the battery marker at the low end so it registered as empty a little earlier?

    @opichals thanks - actually @MaBe just mentioned it in­343491/#comment15099214 and I'll fix that in an update soon :)

    @PiOfThings I should probably just cave in and do filesize. The reality is that is actually just as fast/efficient so I was just trying to keep things clean. For erase you mean you want wildcards?

    guidance on how to build multi feature apps

    Yes, totally. I'm in the process of adding a GPS recorder widget so I'm trying to build stuff out for getting it working nicely. We definitely need more docs about that kind of thing.

    Right now I'd say if possible, using widgets is the way forward as then you can use them in different apps

    how to start with recording gestures

    Yes - there's an issue open to create a site where users can upload gesture data so that we can get a decent amount of training, but right now the best source of info is­odeconfeu2019/blob/master/ and for training, the Google Colab that Andreas made for Nodeconf is a really good intro:­olab-from-workshop

    But that all needs documenting properly - unfortunately at the moment the docs are taking a bit of a back seat as I figure they can always be done after/as the watches are shipping...

    is the minify on deploy feature being built

    I'm still on the fence about this and how to do it. I'll push some IDE changes that make developing (and minifying if needed) nice and easy, but most folks will upload apps using the App Loader site, and that's nice because it can work statically. I could add 'pretokenised upload' to the app loader that would happen dynamically - but that won't constant fold or do anything fancy.

    I guess the other option is for me to have a script that will pre-minify everything from before it gets to

    currently focused on building a dashboard that pulls in the GPS data

    Using Python? As part of the GPS widget I'm building out the app loader a little so that you can click on an app and go right to a page that'll load data off the watch and let you do stuff with it.

    At the moment I'm more focused on getting a nice framework for that sorted, so the one I do probably won't be too nice. If you were able to get your dashboard working inside the bangle loader app it'd be amazing.

  • Hi @Gordon, thank you for the updates.

    Looks like my real wishlist is I rtfm :D :D :D. if'filname').length will give me size I am happy to use that :)
    Regarding the wildcard, it is a very low prio thing and a requirement that came up from me doing something wrong. I had ended up with loads of my log files with \xNN in the end even though the root file was deleted. I don't exactly know what triggered it, because StorageFile.erase() works reliably. So I tried to loop though these rouge files and delete them one at a time, but that didn't work. Eventually I ran out of space and did a eraseAll and reset everything. I was wondering if a wildcard delete would help in these cases.

    I will now go and read up on all the other pointers you have provided :-).

    I am building my dashboard using NodeJS, SQLite and Mapbox. Coincidentally I started with the BangleApps repo and wanted to add a tab myself :-) but then got into a tangle with WebBLE and https (maybe I'll revisit with ngrok), and since I do most of my hacking during my commute on train, being able to code and test without internet became the driver to look for a more offline solution.

    That said I will happily add a tab that shows maps and GPS data from the GPS widget. How are you storing the data NEMA sentences or JSON ?

    I understand the problems with minification. I have created a dev folder in my BangleApps fork (image attached) for my app only and I run a Gulp script to minify and move it to the actual apps folder. I guess to do this on commit you'll need some kind of pre-commit hook? I vaguely remember that kind of thing being possible, I can lookup details on this if this looks like an easy enough approach. (Of course the gulp script will need some refinement :-)... )

    Oh one more request, is there a way to introduce a user selectable GPS polling rate? I want to progressively dock down polling rate once I loose GPS signal so it saves battery. Currently I am very abrupt about it, if I loose GPS for 2/3 minutes, boom, power off GPS so I have to manually restart it. I guess I could build a timer functionality to wake up and test, if that's the only way from a h/w perspective I am fine, no need to build an API feature.

    1 Attachment

    • Screen Shot 2020-02-11 at 9.04.05 AM.png
  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview

Bangle.js Beta Feedback

Posted by Avatar for Gordon @Gordon