-
• #52
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.
-
• #53
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
-
• #54
@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.
-
• #55
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.
-
• #56
@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.
-
• #57
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 contact@espruino.com 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.
-
• #58
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: (https://www.espruino.com/Bangle.js+Button+Reset) , specifcally putting these lines at the beginning of my (custom) clock:Bangle.setOptions({btnLoadTimeout:0}); // disable app reload
setInterval(()=>E.kickWatchdog(), 2000); // disable watchdogI 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! ;-) -
• #59
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.pin==BTN) 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" pinMode(BTN,"output"); BTN.reset(); pinMode(BTN,"input_pulldown"); print(BTN.read()); }, 100);
the button itself changes what's printed from
false
totrue
or if it's still always stuck ontrue
? 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. -
• #60
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 ( -
• #61
Ok, thanks for the update. If you update with a cutting edge build now, you should now be able to do:
Bangle.setOptions({lowResistanceFix:1})
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).
-
• #62
w.callback();
Just for information. I had to call
w.cb()
and then it was working.
-
• #63
I managed to get my button working again by cleaning the PCB in an ultrasonic cleaner. Then I bathed it in IPA, then in Contact Cleaner and finally I dried it with a hot-air gun. But I'm not sure how long lasting that will be, so I'm gonna write to support to see, if there's any spare PCB left over.
-
• #64
Ugh, mine just did this. It's interesting though, I had a LOT of issues with apps right before this, it would disconnect from bluetooth and a bunch of stuff, and it showed a lot of garbage in the settings but I didn't do anything. Suddenly like an hour later, it's boot looping as if the button is being pressed. Makes me think it's something other than the button. This makes me sad because now I have to figure out what to do to get my bangle fun. I'll try the wiggle.
I tried to replace my pebble again with the bangle for the last week and it was starting to get to a place to be a replacement but alas, I hope I can figure it out.
If I need to get a replacement, is there a rugged clone that we can flash the software on? Do we have one with 4 buttons we could try to rig something up? I'm interested in the clones, and I think @Gordon should too, it would be cool even if all he did was drop ship 'known goods', so we can at least give him some dollars for the pass through?
-
• #65
Funny thing, I had just updated the nightly...I wonder if that's something
-
• #66
The boot looping could just be a failed firmware update? Maybe see if you can hold the button to get it into the bootloader mode, and then update via the DFU Android/iOS app (not the App Loader).
Info at https://www.espruino.com/Firmware+Update#nrf52
But if you're still having trouble, maybe take a video and post it up so we can see?
-
• #67
Sounds good, I'll charge it back up and see if I can flash it in dfu. I seem to remember the bootloader saying release the button to boot but I'll have to video it.
-
• #68
Looks like the button is stuck down, but I'm down for trying something. I tried what other people posted here.
1 Attachment
-
• #69
Thanks for the video - Yes, you're right, looks like it's stuck down. There's a small period of time before it reboots, so maybe you could try and connect with the Web IDE at and paste in this code in the left-hand side of the Web IDE before it disconnects:
setInterval(E.kickWatchdog,100);Bangle.setOptions({btnLoadTimeout:0})
It might take a few tries before you manage it, but once it's done, that will stop the reboots (but it'll also stop you changing apps).
You could then try running:
Bangle.setOptions({lowResistanceFix:1});
And then try
clearInterval()
which will remove the earlier fix and cause it to reboot if the lowResistanceFix didn't work... But if it does work you can connect with the App Loader, paste that one line above into theCustom Boot Code
and it should all be usable again.... but there is the question of why it happens. I'm afraid usually it's because of water ingress around the switch area causing the switch to get corroded and its resistance to get lower.
-
• #70
Yeah it's barely been worn and never wet. Pretty sensitive. :/
-
• #71
Wow, really sorry about that. It's kind of surprising - how long have you had it?
Did the fixes work at all?
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.