-
• #2
Hi - you can glue the little hole for the barometer (behind the top strap). That does have a membrane behind it but that won't put up with much water pressure.
The button is a problem - there is a rubber o-ring in there but I have seen cases where people have gone swimming with the watch and water has got through.
I guess one option might be to get a syringe of silicone grease and use it to force grease into the button assembly from the outside of the watch, which would hopefully fill up any potential holes. If you were willing to open the watch I guess you could do it on the inside too.
-
• #3
Hello @Gordon, thank you for your help.
Would it be possible to fully glue the button and use the charging cable for turning on the watch. That's how manufacturers like xiaomi do it with their buttonless devices.
Switching off would be done via software.
The latter should be no big thing to code even for me. The buttonless switching on might be harder. At least for me because I mainly do high level programming and only have little assembler experiences from university.
-
• #4
Yes, it's definitely possible to do that - but you'd have to ensure you change the bootloader so it doesn't automatically sleep when power is applied... You can set the accelerometer to wake the watch up, but obviously many apps expect the button to be there so that it can be long-pressed to return to the clock face.
It's all possible to work around though - apart from changing the bootloader by commenting out these lines I think you can do the rest in JS.
Worst case if you 'brick' it you can reflash via the SWD connector on the back.
-
• #5
You can set the accelerometer to wake the watch up, but obviously many apps expect the button to be there so that it can be long-pressed to return to the clock face.
The button is also used for watchdog to reboot the watch when things get stuck.
What about gluing some plastic foil or rubber over the button and surroundings so that it will still work?
Also I wonder if there are reed switches or light sensors small enough to fit instead of the button.And BTW the KX023 accelerometer can be set to detect and report single and double tap events (even from various directions) so that could be used to simulate button.
-
• #6
Also I wonder if there are reed switches or light sensors small enough to fit instead of the button.
That's a very cool idea!
If there were a reed switch (or would hall effect work?) that would be neat.
The reading of the button for watchdog (and even the long-press app reload) is done in
peripheralPollHandler
where we read from the accelerometer.So for instance you could say
if the watch is facing screen down, treat as a button press
. And that would work ok - the chances of the watch being entirely level and facing straight down for over a second when you're wearing it are pretty small I guess.Something like that I could even add to the main firmware as a flag that you could turn on from JS
-
• #7
It might be possible to fill the button board cavity with silicone and have it malleable enough to still press the button and get a reaction. Would probably be a total loss if it does not work or the button needs to be replaced.
-
• #8
There is also some logic during reboot. With long pressing the button and then releasing it. In this phase the watch face down might be the best to simulate it.
Is there any state when the watch is fully off or deep sleeping where we only have the button but not the accelerator?
I am not familar with the boot order sequence of the bangle js 2. But as far as I understand there is no code before the bootloader that checks the button. And when the bootloader is running I have the button state and the accelerometer?
That would make it possible to use the watch down logic during reboot.
When the watch is fully bootet I would prefer some other method to simulate the button press like double tapping from the side. Any chance to make other apps think it was a button press without modifying them? I guess this would mean to change the firmware to feed the button state from the accelorator? But for my usecase I don't need many other apps so it might be ok without the button.
Force reboot while the watch is running could be done by something like turning the watch face down plus three taps.
In the first step I won't glue the button unless everything is working with the accelorator. So let's buy a bangle js 2!
-
• #9
Even though my idea with the waterproof watch might sound crazy, I believe that many people would like it. There are some comments here in the forum where people brigged their bangles. So I could even think there would be people willing to buy a button less waterproof bangle if it's natively integrated.
Other buttonless smartbands use the detection of the charging state to wake up a deep sleeping band. Would it also possible with espruino to use the charging state during boot instead of the button press?
-
• #10
Is there any state when the watch is fully off or deep sleeping where we only have the button but not the accelerator?
Yes, both
off
andsoftOff
check the button only - but you could comment those out.Would it also possible with espruino to use the charging state during boot instead of the button press?
Yes, it's just as easy as checking the button - and you could make that change for off/softOff I guess
And when the bootloader is running I have the button state and the accelerometer?
No, just the button. But you could add code (although you may struggle to then fit the bootloader in the allowed space)
Any chance to make other apps think it was a button press without modifying them?
Yes - it's mentioned already on the forum - I think in some of those threads about the button. You can execute any functions in
global["\xff"].watches
wherepin==BTN
-
• #11
Would it also possible with espruino to use the charging state during boot instead of the button press?
Yes, attached charger is same gpio input as button, you just need to think what makes sense (including situation when you have completely empty battery and put it on charger to power on and charge). I have used this e.g. to allow entering DFU in bootloader only if charger is attached.
-
• #12
Before dissassembling the bangle js 2 I tested it with a Magic3 running espruino. Thanks to @fanoush
I will glue the button and also check if water enters at the charging pins or the hr sensor.
Maybe I don't even have to open the bangle js 2 but can glue the barometer hole and the button from the outside.
But before I can do that I will have to adjust the bootloader to buttonless mode. Then I can test if the bangle js 2 is waterproof. And afterwards adjust the rest of the OS to buttonless. Currently double tapping on the side seems a good way.
If everything works I am planning to publish the code and a modding video. @Gordon is there a 3D print file of the current bangle js 2 case where I could remove the button hole?
2 Attachments
-
• #13
I do have a 3D file for the body, but I'm afraid it won't be any use to you - the shell contains the bluetooth aerial, so you couldn't use a 3D printed one easily I'm afraid.
Personally, yes, I'd just glue everything from the outside - the second you remove the screen you're going to find it very hard to waterproof the join between the screen and the body nicely.
As I said at the start though, I think it might be worth just trying to fill the sensor hole, then inject a bunch of silicone grease in the button hole from the outside. That's likely to provide pretty good protection while still allowing button usage
-
• #14
I had glued a Bangle with unsuitable glue and the first contact with water forced me to order a replacement screen since it killed the touchscreen and very nearly the board as well (had to remove surprising amounts of corrosion for the mere minutes the water was in there).
Usually I used B-7000 glue for phones etc. which worked well enough (stays somewhat flexible) but that had dried out in the tube and I decided to use some generic Uhu glue. Bad idea.
The new display is glued with B-7010 1mm double sided tape. It is sticky as hell, slightly foamy/thick and allegedly waterproof. Let's hope it fares better :) At the very least it was nice to apply with tweezers and the protective film on the future display side of the tape. -
• #15
I do have a 3D file for the body, but I'm afraid it won't be any use to you - the shell contains the bluetooth aerial, so you couldn't use a 3D printed one easily I'm afraid.
Is that the file on github with display and HRM included or one of only the body? I would be interested in something that I can take as a reference for the cutout needed for the HRM.
-
• #16
Here you go - this is the original with all the inside stuff
1 Attachment
-
• #17
Has the button on the newer Bangle JS 2s changed? Mine is rounded, but that one is flat?
-
• #18
yes the buttons have changed. The original bangle watch had buttons on a flex cable. Also the Bangle JS 2 only has 1 button soldiered to the board.
-
• #19
Bangle 2 has the slightly rounded button soldered to a tiny flat flex cable plugged into the mainboard. The pictures in this thread are of a Magic3 watch.
-
• #20
Here is a little update on my project.
The body could be easily printed without the holes. But it is really hard to make 3D prints as watertight as regular plastic. The 3D prints need special treatment with dichtol or resin. Which is a lot of work and makes things much more expencieve. So it's probably better to glue the existing case.
I worked on the software side and use double tabs to trigger different events like the button: Double right tab is a simple click. Double left tab simulates the long press to return to the watch. And three double tabs on the top stop kicking the watchdog and reboot the watch.
All the apps should be working because I use the regular button IO-Events. The data state flag is used to circumvent the debounce for simulated input.
1 Attachment
-
• #21
Currently the button is still working so I have a fallback. The next step will be a long term test without using the button. And a live test in the water in a waterproof bag to see if the connection of my phone inside my wetsuit to the watch is relyable.
If everything is working I will glue the button, the hole and the edges with B7000 and hope the watch survives in the water. Finally I will change the bootloader code to fully buttonless mode and glue the watch from the inside.
-
• #22
Used the bangle js 2 a whole day only with the tabbing and it worked great an smooth. No ghost "clicks", etc.
Totally different experience when using it while kitesurfing. Lot's of unintended "clicks" and soft resets. I need to add logging to see if triggered by clicks on the real button or wrongly detected double tabs. In any case a special "heavy sports lock" mode could be necessarry where all button presses (real or tabs) are disabled and which can only be left with a complex unlock sequence.
Also even 10 cm of water killed the ble connection. This would not be a big issue if I could easily detect an undelivered gadgetbridge command and resend it. Or is this already possible?
-
• #23
Looks like you already posted a GitHub issue on this? I think it's discussed there, but basically yes, you can: https://github.com/espruino/BangleApps/issues/3466
-
• #24
I worked on the software side and use double tabs to trigger different events like the button
Totally different experience when using it while kitesurfing. Lot's of unintended "clicks" and soft resets.
Are you using the KX023 hardware doubletap detection? There is also some sensitivity tuning.
-
• #25
Looks like you already posted a GitHub issue on this?
Thank you Gordon. Yes, I opened an issue. Also because I thought it could be a way to give something back to the community if I addedd the ACK to Gadgetbridge, but now I am convinced by your and the other comments that handling it inside my app is the better solution.
Just today I did another test on the water (still in three layers of plastic) with my "hard lock" mode and it worked great without leaving my app. And I also experienced the disconnect problem again after a crash from a very high jump where the watch sent the jump height while I was under water and it did not reach the watch. So the next step will be a response intent, message ids and a retry logic :-)
Hello together,
Do you have experiences making the bangle js more waterproof? I would even be willing to open it and glue it with epoxy, but I fear the button might be a problem.
Thanks!