Bangle.js 2 button stuck

Posted on
of 3
First Prev
/ 3
  • sadly, nope.
    I tried cleaning with alcohol and using a hot air rework station to try to re-solder the microcontroller; but the problem persists...

    in the next few days I'll try the hot air again, I'll dare a little more with the heat, until it holds up.

  • The interesting thing is, that it sometimes stops the bootloop, when I unattach the button. but it will restart the instance I reattach it. i'll keep it sitting on the heating for a few more days and then i will probably give it a blast with the heatgun aswell.

  • sometimes stops the bootloop, when I unattach the button

    Someone had this issue as well - I forget who it was.

    Do you have a way of measuring the resistance across the contacts on the button PCB? I'd imagine there was some water ingress and the button got corroded so the resistance decreased to the point where it thinks it is always pressed.

    If that's the case (the resistance is non-open) then we could get you a new button PCB

  • @Gordon I just got this bootloop problem today. My button feels clicky even though it is registering as pressed and I saw it start happening in front of me as it was right when I got a notification. I've worn it while riding my bike in the rain a couple times, but it's been weeks since the last time, and I don't get it wet any other way. I got the watch for Christmas '23.

    The screen backlight is also flickering a bit. It definitely wasn't doing that before this started.

  • Sorry to hear that - so it's actually only a few months old? I'll drop you an email.

    It's odd about the screen flickering too - that and the button pressed in sounds very much like a water ingress issue, but I wouldn't expect any issues from riding a bike in heavy rain a few times.

  • @Gordon Is there an official channel for submitting these warranty claims?

    I've also got a <1yr old Bangle.JS 2 that has had the button stuck boot loop issue for a while now (since 2-3 months ago), but I'd given up on it until stumbling on a few of these threads. The button is still clicky and feels normal. I only ever used it for getting message alerts while at my desk working with headphones on, so I'm struggling to think of a way the watch might've gotten wet.

    I'd love to have a working Bangle.JS 2 again though, if there's any way to get it repaired/replaced under warranty.

  • Is there an official channel for submitting these warranty claims?

    Just before that - have you tried 'massaging' the button? so run your finger in a circle around the button, pushing it in different directions, both pressing lightly and hard enough to depress the button. It might fix it - it's worth a try.

    The best bet is if you could send an email to and provide a link to this post.

    Generally for warranty it's 6 months on any failure unless it's due to abuse, 12 months if it's not related to wear and tear, and outside that we can do you a new one for half price. In this case it sounds like even though you're outside 6 months the watch has had a pretty easy life and would definitely be covered.

  • I have a similar problem with a JS2 I bought early last year. The button appears to be stuck and sends the watch into a continious reboot loop.
    I implemented the instructions here: (­n+Reset) , specifcally putting these lines at the beginning of my (custom) clock:

    Bangle.setOptions({btnLoadTimeout:0}); // disable app reload
    setInterval(()=>E.kickWatchdog(), 2000); // disable watchdog

    I also tried using Bangle.setUI to set swiping to replace the use of the button. But I couldn't get that to work for some reason.
    Obviously I've had to use settings to add a different wake condition. Afer various experiments I went for double tap, but this still causes my watch to accidentally wake up quite regularly and run the battery down or trigger the launcher which is irritating.
    Currently experimenting with Bangle.on('lock', lockHandler()), where the lockHandler function re-locks the watch unless there's a swipe within 2 seconds!
    It's a bit Heath Robinson but I think very much in the spirit of what this watch is for! ;-)

  • Sorry this happened to you, but I'm glad you're finding some ways around it!

    For the swipe->click idea, if overloading Bangle.setUI wasn't working for some reason, you could try adding this:

    Bangle.on('swipe',(x,y) => {
      if (x!=1) return;
      global["\xff"].watches.forEach(w => { if ( w.callback(); })

    It's very hacky, but it basically piggy-backs on the the existing setWatch to just call whatever functions were set to be called when BTN changes.

    I'd also be interested in whether if you run the following code:

    setInterval(function() { "jit"
    }, 100);

    the button itself changes what's printed from false to true or if it's still always stuck on true? The code is basically just forcing the button pin to be off and then reading the value again after. If that's something that actually helps, I could add it inside the firmware where it checks the button for reboots and it might really help you.

  • Sorry, just getting back to this. The code below when pasted in the IDE returns 'false' normally but then does detect a button press and issue 'true'.
    Repeats as long as I hold the button down.
    Interesting as the button still does nothing else with the hack I have in place.
    And the watch can still relock with the button pressed.
    Haven't tried the other method yet, but my hack seems to work OK provided I'm in the clock (

  • Ok, thanks for the update. If you update with a cutting edge build now, you should now be able to do:


    This will do the fix I posted above automatically - so long-pressing the button to go back to apps (and even reboot) should work, and it even overrides the IRQ so the button should work in apps (although it works by polling so won't be as snappy/reliable as before).

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview

Bangle.js 2 button stuck

Posted by Avatar for rigrig @rigrig