-
-
-
Idea: Implement loading tiles along a GPX track into
openstmap
. So essentially set a scale, move along the track and upload as many tiles as are needed to cover the track in every direction. That would be great for using it as a background forgpstrek
or similar apps. I have a implemented a prototype of usingopenstmap
as background for my overview map, but getting good coverage for longer tracks is slow (as in upload time) and needs lots of storage. -
The overall shape is done (for now) and brushed over once just to see how it can look and before doing more I will have to wait on ordered M2 screws and a matching tap to hold it together.
I still need to find a solution for getting the button PCB attached and try out if my chosen method of getting a button in there will work at all. I think this will need one more build anyway, so this one is dedicated to experiments :) -
-
Not yet, but wrapping it in aluminium foil showed that it could work. Otherwise no way to tell how it will pan out with this dark magic RF stuff before I can actually close the case and screw it down 😉
If there are problems I can always cut some slots into the case and fill them with epoxy to try to get it to work. -
Not really, since the uploaded data only contains these 24 hours of data. If you can find another file containing more data for the GPS chip you could use that. If you use Android/Gadgetbridge you could use https://banglejs.com/apps/?id=agpsdata to automatically update the AGPS data in the background.
-
-
-
You need to use the Bangle.js variant of GadgetBridge. Have a look at https://www.espruino.com/Gadgetbridge#http-requests .
You can also have a look at https://github.com/espruino/BangleApps/tree/master/apps/owmweather since that does something similar to what you probably want to do. -
I wanted to have a go at FreeCAD and thought designing a case for the bangle would be nice to try out modeling something to actually build for the first time :)
Wishlist:
- USB-C for charging
- Buildable by me
- Not a lot thicker than the original case
- Rugged (primarily better screen protection)
- Screw on back.
- Maybe even waterproof? (Found waterproof USB-C ports on ebay)
- Keep HRM
TODO:
- Try making space for a bigger battery (36x25x4 330mAh might fit with about a millimeter more thickness)
- Simplify band mounting (just loops for textile straps maybe)
- Solution for mounting internal components without to much glue
- Find out if I can actually build the thing
- Find out if the HRM can be removed from the original case without being destroyed
- Refine the hardware mockups for better internal space representation
Has somebody attempted something like this? I am sure this will take some iterations and probably fail in the end but no way of knowing without trying, eh?
I have an old manual proxxon desktop mill that can do about 0.1mm precision and some other tools and want to do this in aluminium.
I'll attach the FreeCAD file but be assured that it probably is not well done as I do not have experience with it or CAD at all.
- USB-C for charging
-
-
-
I have tried it with
PCAS02
, the command to change the update rate and without the$
included in the checksum it changes nothing while including it works.print(require("pcas").checksum("$GPGLL,5300.97914,N,00259.98174,E,125926,A"));
creates a checksum of28
which matches your example. Doing the same without$
calculates6F
as checksum.require("pcas").checksum
is as follows:function checksum(cmd) { var cs = 0; for (var i = 1; i < cmd.length; i++) cs = cs ^ cmd.charCodeAt(i); return cmd + "*" + cs.toString(16).toUpperCase().padStart(2, '0'); }
-
I expect it to be a bit slow but copying current screen content into buffer, showing that as static overlay and then just waiting until the load is done before sliding the overlay buffer away like the hidden widgets do could work. Of course that would only work for fastloaded apps since there is no easy way for keeping display contents over a normal load. This would mean only one full screen extra buffer and no switching buffers around without the app knowing.
-
-
-
-
I currently use a protector made with the method described here: https://forum.espruino.com/comments/16421375/
It is now a matte one. The matte smartphone protector (for S22, so at least 6, maybe 8 Bangle size protectors) I used as base actually had two layers, a thicker clear one, too inflexible to be used on the bangle and a super thin matte one. I applied only the matte to my bangle and it has stood up to a lot of abuse. Some climbing and demolishing a brick wall included. It is obviously due for replacement in it's current state but it just got destroyed with no peeling at the edges. Initially applied 10.2022.
-
I have tried to make the PCAS-commands a bit more usable in a library, but some seem to do nothing at all (e.g. setting Standby mode) while other work fine (update interval). Is there a way to dump the current config to check?
Does your command miss the checksum or did you omit that on purpose?
https://github.com/halemmerich/BangleApps/blob/pcas/modules/pcas.js
-
To give some indications for speed/RAM:
Allocation of one full screen 4 bit buffer on Bangle.js 2 would be about 10% of the RAM. On Bangle.js 1 probably more like about a quarter.
1000 iterations of an empty for loop take nearly 230ms
Assigning a variable on each iteration costs 136ms extra
Commenting out that assignment still costs 24ms over the base loop
As for javascript as the language of choice I'm with @fanoush. You could use C/C++ like on other micros, but that will cost a lot of convenience and simplicity. Nevertheless you can even include native/compiled code in the JS if you need every last bit of speed the processor can muster.
-
-
There are functions in the GPS context that would do well and be useful in a module, for example compass noise filtering, handling access to track data more encapsulated, "sensor fusion" between compass and GPS and lots more of smaller things that could be useful outside of their apps. Some refactorings in this spirit I would like to do to
GPS Trekking
.
When developing for the Bangle, there are some tradeoffs to make. One big part of the execution time is actually parsing the javascript text. So the "form" of your code directly influences execution speed. I have writtenImageclock
and learned the hard way how expensive function calls and verbose code are. In there I started with recursively parsing JSON and rendering that as a watchface. That was so slow that watchfaces with seconds just weren't possible. "Flattening" that tree of watchface components in the browser and generating the rendering code for the Bangle got that several times faster for some watchfaces. It was calling exactly the same rendering code for the elements, just no longer recursively traversing the JSON saved that much execution time.
Another example would be the Layout module. It's great for easy creation of layouts, but if you need to refresh often or are doing memory intensive stuff otherwise you will probably run into problems with either speed or RAM usage. That's not to say Layout is not a great module, I try to use it whenever possible. But it shows that on a platform this constrained there won't be a way to make every code nice and tidy, sometimes getting to the edges of available resources means ugly code or hacks to even get it to work at all. -
Besides the performance and RAM reasons for keeping the code "flat" there should also be taken into consideration that there are users who are technical novices just starting out to code using the espruino environment. Too much rules and focus on "best practice" could maybe deter those from even trying. There are however some apps already using typescript, so I do not see a problem in trying to get better code quality for some apps while keeping in mind the resources (especially in Bangle.js 1) and the beginners just starting out.
I just installed the
android
app andowmweather
on a factory reset bangle and forcing a refresh in the OWM weather settings creates the expected output:Can you check in the IDE if there are errors when you try to manually refresh in the settings? The "http method not found" error hints to a problem with or in the
android
app. It should be available on the watch independent of GadgetBridge settings. Maybe your boot code somehow got corrupted, in that case going to "Settings->Utils->Rewrite Settings" could help.