Way to make bangle js waterproof (e.g. epoxy) #6989
Replies: 1 comment
-
Posted at 2024-05-08 by @gfwilliams 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. Posted at 2024-05-08 by Chriz Hello @gfwilliams, 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. Posted at 2024-05-09 by @gfwilliams 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. Posted at 2024-05-09 by @fanoush
The button is also used for watchdog to reboot the watch when things get stuck. 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. Posted at 2024-05-09 by @gfwilliams
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 So for instance you could say Something like that I could even add to the main firmware as a flag that you could turn on from JS Posted at 2024-05-09 by @halemmerich 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. Posted at 2024-05-10 by Chriz 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! Posted at 2024-05-10 by Chriz 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? Posted at 2024-05-10 by @gfwilliams
Yes, both
Yes, it's just as easy as checking the button - and you could make that change for off/softOff I guess
No, just the button. But you could add code (although you may struggle to then fit the bootloader in the allowed space)
Yes - it's mentioned already on the forum - I think in some of those threads about the button. You can execute any functions in Posted at 2024-05-10 by @fanoush
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. Posted at 2024-06-07 by Chriz 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. @gfwilliams is there a 3D print file of the current bangle js 2 case where I could remove the button hole? Attachments: Posted at 2024-06-07 by @gfwilliams 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 Posted at 2024-06-07 by @halemmerich 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). Posted at 2024-06-07 by @halemmerich
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. Posted at 2024-06-10 by @gfwilliams Here you go - this is the original with all the inside stuff Attachments: Posted at 2024-06-16 by user158360 Has the button on the newer Bangle JS 2s changed? Mine is rounded, but that one is flat? Posted at 2024-06-16 by user156811 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. Posted at 2024-06-16 by @halemmerich 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. Posted at 2024-06-17 by Chriz 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. Attachments: Posted at 2024-06-17 by Chriz 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. Posted at 2024-06-20 by Chriz 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? Posted at 2024-06-21 by @gfwilliams Looks like you already posted a GitHub issue on this? I think it's discussed there, but basically yes, you can: espruino/BangleApps#3466 Posted at 2024-06-21 by @fanoush
Are you using the KX023 hardware doubletap detection? There is also some sensitivity tuning. Posted at 2024-06-21 by Chriz
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 :-) Posted at 2024-06-21 by Chriz
Yes, I am using the detection in the poll handler in jswrap_bangle.c to pass button io events to the queue. For regular use this was working great but for the sports mode I will try changing the sensitivity. However the real button might be a problem, too. So let's see how my final solution will look like and if it is hopefully usefull for others, too. Posted at 2024-06-21 by Chriz 48 hours until I can check if it is watertight. Attachments: Posted at 2024-06-26 by Chriz The first kite boarding sessions with the glued watch were a success. It survived many hours, massive impacts, bodydragging, etc. with the watch under water and heavy water pressure. Here a photo with the watch and my wetsuit. Handling the watch in everyday life without the button using tabs works well for me. So now I am thinking if this can be useful for anyone else? I could give the 3D printed watchcase a try, because the glue looks bad and won't last forever. The result could be a tutorial explaining how to make the 3D printed backcover waterproof, reassemble the watch. Supplying the print model and the code for the buttonless mode. It would be some work to make my prototype code ready for a PR and I guess we would have to discuss how to handle some details. So I would only do that if there is a real demand otherwise I am happy that I have a waterproof watch now and learned a lot about programming for an embedded device. Attachments: Posted at 2024-06-26 by @gfwilliams That's great! What does everyone think about whether there's interest? I guess a frame that went over the top of the watch that was epoxied on could make quite a tidy fix, and also would help to protect the screen from scratches. I'm not sure we have to really worry about water ingress around the screen itself, but I guess it doesn't hurt!
Bangle.js 2 is definitely still being produced and sold, I've got thousands of them in stock here :) The issue with something like a Bangle.js 3 and having two flavours is it's a lot of extra expense (and stock to keep). Unfortunately I don't think I'm selling high enough volumes that it would ever really pay off having two SKUs (unless maybe Bangle.js 3 could be opened, and then maybe I could offer a separate case to swap the innards into). Posted at 2024-09-01 by @devsnd To answer the question of Gordon whether there is more demand for watertight watches: there surely is! Everytime I go swimming I almost forget to remove my bjs2 from my wrist. But I don't know if I could go buttonless. I need to test it to find out. @Chriz is there a variant of your firmware that could be installed as app? And if not, can you point me to your source so that I can strip out the essentials and make it an app myself? I would not want to switch from the official firmware for my daily driver right now, but I would like to find out if I could live without the button before going further with this...! Posted at 2024-09-02 by Chriz Hello @devsnd, my sources can be found at https://github.com/Chriz76/Espruino/tree/masterOld . I used github for building the firmware so a lot of little commits where I tried different things But the changes itself affect only a few files. I modified the firmware and did not create an app. But with my long term experiences I don't think that this is necesarry: Even after several weeks the watch is still watertight. The baramoter hole seems to be the most important. The glue on the button already partly vanished. And even if glued the button could be used to do a hard reset. Double tapping twice (4 taps with a short delay after the first two taps) to simulate a button press worked well in regular use. It should be possbile to implement this as an app. But using double tapping on the other side of the watch to simulate a long press often lead to false detected presses and returns to the clock. So I changed it to 5 double taps while my watersports app is running. I also used the charging state for a hard reset. For you it might just be ok to start with a global hook as app for 2x double and 5x double tap. Then glue the barometer hole and the button. If you really need a hard reset then push the glued button hard and it will work. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2024-05-07 by Chriz
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!
Beta Was this translation helpful? Give feedback.
All reactions