martes, 25 de octubre de 2022
(My) Best espruino apps (for bangle.js 1)
xx
miércoles, 5 de enero de 2022
Commands and developing for Espruino
IDE commands
reset(); //most common command when you find problems
after any freeze
require("Storage").eraseAll();
Removes all files, including apps that can't be removed from apps loader
E.setTimeZone(2);
peek16(0x300c).toString(16); //TO see the espruino SDK
//0x8C or 0x91 is SDK12
//0x81 or 0x88 is SDK11
Memory usage per app
print(require("Storage").list().map(f=>require("Storage").read(f).length.toString().padStart(7)+" - "+f).sort());It'll list all files sorted by size and you can see what's taking up the space
Status
process.env;
process.memory();
require("Storage").getStats();
(total, free,...storage bytes)
E.getBattery() ;
print(require("Storage").list().map(f=>require("Storage").read(f).length.toString().padStart(7)+" - "+f).sort());
Device name (useful for Gadgetbridge)
bangle.js , puck.js , espruino, espruino-dev
NRF.setAdvertising({},{name:"espruino"});
Testing notifications
GB({t:"notify", id:5, src:"gadget",title:"Test",body:"message for testing notifications "});
Basics of developing
Logging:
console.log("Debug mode enabled");
Creating the icon
Compatibility and Dynamic code
Bangle.js1 =240x240
Bangle.js2= 176x176
var v_model=process.env.BOARD;
//EMSCRIPTEN,EMSCRIPTEN2
if (v_model=='BANGLEJS'||v_model=='EMSCRIPTEN') {
Multidevice developing (BJS1, BJS2, P8, C16....
Code for bangle App Loader (store)
martes, 1 de junio de 2021
OTA Flashing for Hackable smartwatches
sábado, 9 de enero de 2021
outdoor/sport apps, smatwatches and openSource
A quick revision of opensource outdoor options
(as 202304, more info and pictures are coming soon)
Index:
bangle.js smartwatch
bangle.js2 smartwatch
Bluetooth Heart Rate Monitor (bangle.js2)
Bluetooth Heart Rate Monitor (Lite)(bthrmlite)
BLE GATT HRM Service (bangle.js, 2)
GPS recorder (bangle.js, 2)
Bangle run (bangle.js, 2)
Route viewer (bangle.js)
Fitotrack (android)
Opentracks (android)
OSMand (android)
Runnerup (android)
AAT(android)
Strava(android/web - commercial)
Wikiloc (android/web - commercial)
OruxMaps (android/web - commercial)
bangle.js (smartwatch)
Unfortunately there are not many smartwatches focused in opensource apps, and less having GPS functions.
So if you want to use opensource in your watch during your activities you have to assume some limitations and wait or help for community improvements.
- Heat rate function, is really unreliable, and it seems a problem of the sensor hardware, so even if software can reject weird measures there is not much hope.
- GPS, seems reliable enough, and battery last long with it tracking
- Apps, there are couple of good apps that are receiving support, see below.
- Support, besides other you can be part of the community and the solution.
bangle.js2 (smartwatch)
- GPS and a Heat
rate sensor more acqurate than bangle.js1 one.
Bluetooth Heart Rate Monitor (bangle.js2)
App id: bthrm
Overrides the usage of the internal HR sensor with an external Bluetooth
Settings:
1) Mode=Default - Replaces internal HRM with BT HRM and falls back to internal HRM if no valid measurements received.
2) Search for sensor
3) Open app?
4) see values on widget (widhrm,...
Not compatible with "Heart Rate Monitor(hrm)"
Bluetooth Heart Rate Monitor (Lite)(bthrmlite)
Old version, and lightweight without configuration and the recommended for Bangle.js1
BLE GATT HRM Service (bootgatthrm)
A GATT HRM Service to advertise the measured HRM over BLE. Compatible with Opentracks and Fitotrack. Detected but not working with Runnerup and AAT
GPS recorder (bangle.js, 2)
Opinion: It is a very reliable app+widget that can work in background, so you can use other functions during the activity, and when completed the track can be exported in a standard format to other apps.
The look and feel is very old school, just text without icons, and the menus can be managed only through buttons.
Tips:
Using OpenStreetMap from web apploader you can upload a map/tiles and this map can be displayed in the background of the track.
As getting a valid GPS signal takes quite long, and you require it to start tracking, from web apploader use the app "Assisted GPS Update (AGPS)" to download satellite info for a day (8kB) or a week (46kB).
Missing functions:
- Follow a track. I mean functions to import a track, display the track in screen and track a new one over it (in a different color)
- Use of touch screen, i.e change of screen by sliding movement
- A Graphical dashboard, showing summary and enabling pause in friendly and quickly way.
Import/export:
internal file format:timestamp,latitude,longitude,altitude (but more attributes can be added to be logged , such as HR, HR(bluetooth) ,HR int or steps.
Export format: (from apps loader page): .KML , .GPX
Tip: exporting from Android's Chrome, then the downloaded track file can be open with some apps.
RUN (bangle.js) RUN+
Opinion: the user interface is based in a single screen managed only by buttons, and it can track your activity including lot of precision and heart rate
But the worst (hopefully it will be corrected soon)is that the apps is not available as widget so can't work on background and the tracking has too much precision (and not necessary) so the output file grows too much.
As curiosity this app is not written in basic Javascript but TypeScript that after "compiled" generates a obfuscated Javascript, for developers maybe it is not important but for other can be an additional step.
Missing functions:
- Run in background
- A parameter to define the time between tracking points
- Display a track or statistics
- Use of touch screen, i.e change of screen by sliding movement
Import/export:
internal file format:
timestamp,latitude,longitude,altitude,duration,distance,heartrate,steps
1602954919045,38.418089,-0.x09480,36.88,0,0.65,104,1
Export format (from apps loader page): .KML , .GPX
Route viewer (bangle.js)
Opinion: it allows to display map and/or a track in the screen and your current GPS position over it. Also it shows distance an a direction arrow.
Is not a standard Javascript app, but a realtime generated app+map track. From the apps loader web you load a .KML and the result is uploaded as bangle.js app
Missing functions:
- zoom function is missing
- a single a app able to open different tracks/maps
- Direct access to track files in memory from banglerun or GPSrecorder
Import/export: import .KML
Fitotrack (android, FOSS)
Opinion: A good app for sports and well supported, has voice notifications to inform about pace, etc...
Supports external heart rate sensor(fails with decathlon BLE and not paired devices?) and can display sections/intervals, elevation/speed graphs
Missing functions:- Text notifications that other apps can process and send to smartbands/watches
Import/export:
Export: GPX
Opentracks (android, FOSS)
"+OSM Dashboard por Opentracks"
Opinion: a good tracking app with a easy an intuitive and complete dashboard.
To be able display the activity in a map it requires to install "OSM Dashboard por Opentracks" (another small opensource app) and from opentracks "show on map" and select "OpenTracks Dashboard API", and button "Always".
Advanced functions, as voice notifications, Interoperability with BLE devices: Heart rate (chest strap or watch), cadence, power, speed, and wheel size
It shows intervals, elevation/speed graphs and has voice
The Dashboard with the default layout shows many information fields, and can be customized.
Missing/Concerns:
-Permission: "Location always", is not being used, so it can stop tracking with saving mode or lossing the foreground
Import/export:
OSMand (android, FOSS)
Opinion: though focused in navigation, it has tracking function and many options and features, such as following a previous track.
Require more learning and adaptation than other tracking apps, but the potential is incredible.
Import/export: .GPX
@fdroid
Runnerup (android, FOSS)
Functions: Workouts and intervals, audio notifications, Laps, Map(using version from Play), sensors (ANT+, BLE), upload activity to some social networks
There are versions that can run in old in Android4(usually lighter and smaller)
Missing functions:
- Display the map during the exercise tracking.
- Text notifications that other apps can process and send to smartbands/watches
Import/export:
Export to: database, .GPX .TCX
Import: only from database
@fdroid
AAT (android)
An activity tracker, with a good UI but that can require more time to get used, for example the dashboard is called "Cockpit"
Activity: preconfiguration (autopause, recording filter, backlight,..)
cockpitA: fullscreen stats (HR in a smaller font size),map, graph
cockpitB: splited screen stats/map, stats are in a smaller font size)
Advanced functions, through touch on topleft/bottom (cockpitB screen) or bottom(cockpitA map screen)
Support/Functions: online Maps(several ones)/offline maps, BLE sensors,...
Import/export: .GPX
@fdroid
Missing functions:
- HR limits and warning notifications
Strava(android/web - commercial)
It is not opensource but if you want share your activities with friends probably they use it.
Fortunately you can use other apps during the activity and just upload to share with others.Import/export:
Import/Export: .TCX, .FIT or .GPX
Import from http://www.strava.com/upload/select
Wikiloc (android/web - commercial)
An app/web especially useful to find and share tracks for different sports (like mountain paths), sometimes well described, classified and with pictures
The app can be used to track or follow a previously downloaded track, supports offline maps and has basic statistics for the activity.
Negative points, besides being commercial it has some dependencies on Google services, that is specially bad for devices without Play services (such as BlackBerry10 android runtime)
OruxMaps (android/web - commercial)
Powerful GPS app with plenty of functions, requires time to learn and get the best of it. Supports loading a track and tracking/following over it.
Import/export: import .KML and .GPX
Export to .GPX, .KML, .KMZ, .FIT, TCX, .CSV
Upload to: Strava and other services ...
miércoles, 30 de septiembre de 2020
Smartwatch research (Opensource, P8, BLE, bangle.js, Pinetime, espruino, .
(entry in contruction, check other Smartwatch entries)
Tools and software
From a mobile Phone
From Windows computer
or BluetoothLE Explorer or Bluetooth LE Lab(Windows):
or nRFConnect
Configure
Windows10. Other Devices (privacy)
Checking Model (i.e P8a)
or BluetoothLE Explorer or Bluetooth LE Lab(Windows):
Identify Device Information:
Hardware Revision (UTF8-String) : A130PW2.0
Software Revision (UTF8-String) :MOY-TFK5-1.7.7
Heart Rate Measurement (it readable, so activate from watch)
(HEX) : A130PW2.0
67
16
Avoid BLE issues
Error reading the file
when using NrfToolbox you can select the app to pick the file (a file manager)
ES explorer has 2 modes, so if one fails the other can work.
"DFU File ...not found"
turn off other bluetooth devices (specially if they were pair before)
use a different phone that you have never pair
companion apps like d6notification or gadgetbridge can try to connect even if they seem closed
Error GATT ERROR a
turn off phone or
try "nRF Connect" app as an alternative to Daflasher, as it also can flash a DFU
jueves, 17 de septiembre de 2020
bangle.js 1 -opensource smartwatch
- Nordic 64MHz nRF52832 ARM Cortex-M4 processor with Bluetooth LE
- 64kB RAM 512kB on-chip flash, 4MB external flash
- 1.3 inch 240x240 16 bit LCD display with 2 zone touch (1+2=3rd zone)
Configuration:
Connection
Web BLE Admin apps
Gadgetbridge
Android, Settings, Sounds and notifications,Notification access: Gadgetbridge (enabled)
Android, Settings, Sounds and notifications,App notifications: whatsapp (allowed),....
Upgrade firmware
Installing basic apps
![]() |
| default apps |
jueves, 3 de septiembre de 2020
flashing espruino+ninebot/eucWatch to a P8 smartwatch
Flashing espruino+eucWatch (formerly ninebot-one)
Steps:
- DaFitBootloader23Hacked.bin (A custom Bootloader using the preInstalled SoftDevice5.0.1)
- FitbootloaderDFU2 zip (Soft Device 2)
- espruino_2v0x.xxx_p8_SDK11_SD20.zip (from fanoush github page for p8)
If you start from p8 default status/Dafit stock then you have to install before the first 2 files.
1) Flash bootloader
1.1) if you have Dafit/stock ROM
Click button "Do DFU Update"
Selectfile: FitbootloaderDFU2 zip [check Use Nordic Bootloader]
1.2) if you have ATCwatch installed on the P8
2) Daflasher step
At BLE devices list
Select: ATCdfu
Click button "Do DFU Update"
[Checked box: Nordic bootloader]
[Unchecked box: Toggle Bluetooth]
Select DFU file: espruino_2v0x.xx_p8_SDK11_SD20.zip
3) Espruino step (PC and Chrome)
- from Chrome (tested in v84): https://www.espruino.com/ide/#
- how to Flash /Upload "init" file
Drag an drop "init" file to left side (
Click on Send to espruino arrow down icon, choose Upload destination, "Storage" , choose name ".bootrst"
Click on ".bootrst"
- (optional) Edit "handler" file before upload
- Upload files
- Click on Storage/HD icon (Access files in device's storage), "Upload a file": handler, main, settings, calc,...
- Verify/execute
Click on Storage/HD icon (Access files in device's storage), verify existence of files and .bootrst
short tap on the button, and it will boot to working mode
On left side terminal, execute command "reset()" or "E.reboot()" (last one reset the hardware and loose the time)
DEV mode: (required for future files upload)
Do a reset() while holding the p8 button
Configuring/coding nb espruino:
Using nb/ninebot UI
viernes, 24 de julio de 2020
P8 usage + Phone companion/sync apps (dafit,d6...)
P8 smartwatch and companion apps
(draft/post undercontruction)D6 Notification (for atchwatch)
Install D6 notification
![]() |
| d6 notification |
Select Device
Add device +
Allow location
Select Apps
Clock
Calendar
Phone
Messages
![]() |
| Dafit app |
Da fit(for default/stock ROM)
Da fit 2.0.0 (From MoFit (CRREPA) , Privative)
Tracking map based in Google Maps
![]() |
| dafit storage |
(can be stopped by firewall,
gmaps : mad01s24-in
weather:media-router-fp-prod1
firm upgrade:
)
| dafit database |
- It lacks of a export function, so you need backup.
- Data can be backup with Titanium backup or oandbackup.
- Data is associated to the phone/user and not to an specific watch, so you can add a new device, keeping the previous data.
watchfaces
Main and editable watchface accepts 240x240 png files
Downloaded watchfaces
are stored as .bin files
root://data/data/com.crrepa.band.dafit/files/crrepa/band/wf
each has a preview image (png or bmp)
root://data/data/com.crrepa.band.dafit/files/crrepa/band/wf/preview
Main/custom photo watchface:
image:
root://data/data/com.crrepa.band.dafit/files/crrepa/band/customize/P8a/0.png
databases
root://data/data/com.crrepa.band.dafit/databases/crrepa-db
table: SUPPORT_WATCH_FACE
Field: WATCH_FACE_ID (i.e 181)
Field: WATCH_FACE_URL (i.e .....71e35.bin) analogic
Field: PREVIEW_URL (i.e .....55808.png)
Field: WATCH_FACE_ID (i.e 28)
Field: WATCH_FACE_URL (i.e .....0215e.bin) digital
Field: PREVIEW_URL (i.e .....cdaec.png)
Configuration
root://data/data/com.crrepa.band.dafit/shared_prefs/config.xml
band_ui_style=1 (customizable image + customizable digital info)
band_ui_style=4 (last downloaded WF)
set_watch_face_layout =false (image + digital customizable)
Gadgetbridge (opensource, available at F-droid)
not compatible yet :(martes, 21 de julio de 2020
Flashing atcwatch and Stock(dafit) to P8 smartWatch
![]() |
| atcwatch menu |
Flashing P8 - Daflasher (atcwatch and Stock)
Index- flashing atcwatch
- flashing/restore the original P8 - stock dafit
- flashing SD5
- flashing the stock application (for dafit)
- Common problems and solutions
- Additional info/links
- Glossary
Intro:
OTA flashing process require to install and execute daflasher or nRFConnect app (available at Play)
[if you want to preserve you personal data from Dafit app, you can do a backup with android "oandbackup")
Note that:
Obvious, mobile requires to have BT enabled
If Dafit or other app to sync with smartbands are installed, they will
be using the BLE connection so device will not be found, uninstall
Dafit, and others such as D6notifications
flashing atcwatch
From a browser download following apps from github- DaFitBootloader23Hacked.bin (A custom Bootloader using the preInstalled SoftDevice5.0.1)
- FitbootloaderDFU2 zip (Soft Device 2)
- ATCwatchP8.ino.zip
![]() | ||
| Daflasher app |
Selectfile: DaFitBootloader23Hacked.bin
go back
Select: ATCdfu
Click button "Do DFU Update"
Selectfile: FitbootloaderDFU2 zip
P8 screen [red square and ATCnetz.de]
go twice back
Select: ATCdfu
Click button "Do DFU Update"
![]() |
| Atcwatch about |
[Unchecked box: Toggle Bluetooth]
Select DFU file: ATCwatchP8.ino.zip
flashing/restore the original P8 - stock dafit
Intro:
Note that going back to Stock-Dafit disables the possibility of later OTA/BLE flashing. So no more easy way to flash experimental OS/ROM. You can still do it but it will require to open the back lid and connect a cable to pins)
You need to download
- SoftDevice: ATCdfuFromSD2toSD5.zip (from atc1441 github page)
- The stock "firmware" application, you can try get the package from dafit upgrade function, and it will be .bin file of 1xxKB
Then you need to create DFU package containing the bin with nrfutil, a private key will be applied to the package. Though the previously downloaded SD5 will accept any possible key.
>nrfutil version (nrfutil version 6.1.0 )
>nrfutil keys generate myprivate.key
>nrfutil.exe pkg generate --hw-version 52 --application-version 1 --application MOY-TFK5-1.7.7.bin --sd-req 0x9D --key-file myprivate.key p8stock_tfk5.zip
--sd-req softdevice FWIDs
--sd-req 0x9D = S132 v5.0.0S132 v5.0.0 (SD5 for stock TFK5-1.7.7)
flashing SD5
Select: ATCWatchStartBootLoader
P8 screen [red square and ATCnetz.de]
Click button "Do DFU Update"
[Checked box: Nordic bootloader]
[Unchecked box: Toggle Bluetooth]Select DFU file:ATCdfuFromSD2toSD5.zip
P8 screen [3 color squares and ATCnetz.de]
flashing the stock application (for dafit)
Select: ATCWatchDo DFU Update
[Checked box: Nordic bootloader]
[Unchecked box: Toggle Bluetooth]
Select DFU file: p8stock_tfk5.zip (3 files, inc .bin)
Common problems and solutions
- Device is not found in BLE list
stop or remove other apps that are using BLE connections
- Progress percentage stop a some point, or it is is increasing in each attempt
- Error GATT ERROR until success
turn off phone or
try "nRF Connect" app as an alternative to Daflasher, as it also can flash a DFU
- Daflasher DFU FILE NOT FOUND
- try with different file explorers
- ES explorer (has 2 pick file 2modes), CXexplorer and Amaze
- Reset the watch. requires to open the back lid, and create a Short in the battery, (during decs of a second) connect with metal both pins (+ and -)
- Turn off the watch. It requires to open the back lid and unsolder the the red cable(+)
Additional info/links:
nrfConnectGlossary:
OTA On The AirRSSI Received Signal Strength Indicator
DFU Device Firmware Update
SD Soft device
precompiled and linked binary software implementing a wireless protocol developed by Nordic Semiconductor.
.ino.??
jueves, 18 de junio de 2020
Smartwatches, hack and opensource
P8 Smartwatch (based in RF52)
Rebranding:Colmi, Makibes, utelite...
nRF52832
ARM Cortex-M4, CPU with floating point unit running at 64 MHz
64KB de RAM, 512KB de RAM
Flash 4MB SPI (Serial Peripheral Interface) ¿NOR?
240x240 color display.
170 mAh lithium polymer
Normal/non rotated display
Manufactured by: MoYoung/CRREPA
strap:20mm
Stock firmware/ROM: MOY-XXXN-1.7.N
MOY=Moyoung (company)
XXX model can be normal or rotated display
| Model | ID | Touch | Accel | Notes |
|---|---|---|---|---|
| P8, Pinetime | TEH,TBH... | Hynitron 00B40001 CST816S | BMA421 | best touch, S=200hz |
| P8a, Pinetime | TFK,... | Hynitron 00B40002 CST716S | BMA421 | worse touch, S=200hz |
| P8b | TIN,... | Hynitron 00B40002 CST716S | SC7A20 (no step counter) | worse touch, worse accel,S=200hz |
Alternative ROM
ATCWatch (Arduino C++ firmware)https://github.com/atc1441/ATCwatch
(to flash with DaFlasher, Companion app: D6 notifications)
Espruino for DS-D6 and P8
https://github.com/fanoush/ds-d6/tree/master/espruino/DFU/P8
Recommend notification apps
Other Opensource "smart"watches
PineTime
nRF52832 ARM Cortex-M4 processor with Bluetooth LERAM: 64KB Flash: 512KB with additional 4MB SPI NOR
Underdevelopment, many options in the future
By default has a fully operative P8 stock firmware/ROM: MOY-XXXN-1.7.N
Companion App(underdevelopment): https://github.com/lupyuen/pinetime-companion
banglejs
- nRF52832 ARM Cortex-M4 processor with Bluetooth LE
- 64kB RAM 512kB on-chip flash, 4MB external flash
- 1.3 inch 240x240 16 bit LCD display with 2 zone touch
- GPS/Glonass receiver (UBlox)
- Many javascript apps
- strap: 30mm
https://shop.espruino.com/banglejs
Apps: https://banglejs.com/apps/
Companion app: compatible with Gadgetbridge
Developer emulator: https://www.espruino.com/ide/emulator.html
Forum http://forum.espruino.com/microcosms/1424/
Based in watch. No.1 F18
Companion app: Hplus Watch
164 KB RAM
ROM de 512 KB
DK08
- nRF52832 ARM Cortex-M4 processor with Bluetooth LE
- LCD 1,28" 176x176 64 colors (RGB222) ST7301
- HR sensor EM7028
- Accelerometer Bosch BMA222E
- 2MB SPI flash / fontchip GT24L24A2Y
SMA-Q2
Another NRF52832smartwatch to run open source firmware on ithttps://hackaday.io/project/85463-color-open-source-smartwatch
https://github.com/Emeryth/sma-q2-oss
Tools and Utilities
lightBLUE. Bluetooth Low Energy Tool and Explorer
nRF Connect (apk). technical tests




























