A repo to allow reprogramming the firmware of an affordable ring with:
- accelerometer
- touch sensor
- seven segment display
- PPG for SPO2
- heart rate BPM sensor
Functions:
- Streams accelerometer and touch sensor data via Bluetooth from an SR08 ring (down to $10 USD in Alibaba)
- Demos:
- gesture recognition on accelerometer data for media volume control (see below)
- sleep stage monitoring
- webMidi interface for music control
- artistic visualization in browser and on the ring screen
- remote camera controller
The stock OTA receiver rejects an image ("invalid image header") unless the product ID in its header matches the ring's own. To find it, scan with a BLE app (e.g. nRF Connect): the ring's manufacturer data ends with 000100XX, where XX is the product ID.
| Manufacturer data ends with | MCU marking (DA14585 00000...) |
Build |
|---|---|---|
0001004C (rings bought in 2026) |
...2512NCAA, ...2503NCAA |
make (default) |
00010017 (older SR08 rings) |
...2451NCAA, ...1919NCAA, ...2503NCAA |
make PRODUCT_ID=17 |
Both variants use the same DA14585 MCU and pinout, so the MCU marking can't tell them apart (lot 2503NCAA appears in both). Use the manufacturer data.
cd Firmware_src/projects/target_apps/ble_examples/prox_reporter
make # or: make PRODUCT_ID=17Flash it from the computer over BLE (Linux only for now, needs pip install bleak):
make scan # list nearby rings, strongest signal first
make flash # build, then flash the nearest ring (~50 s)
make flash FLASH_ARGS="--address 48:23:35:F4:00:10"
make flash FLASH_ARGS="--all --min-rssi -60" # every ring close to the computer, one by one- Stock rings show their product ID in
make scanand are skipped if it doesn't match the build. Flashed rings advertise asLibRing. - A ring connected to another app (e.g. a web demo) stops advertising: disconnect it first.
- If the connection keeps dropping, raise Linux's BLE supervision timeout from 420 ms to 4 s (once):
sudo sed -i 's/^#ConnectionSupervisionTimeout=$/ConnectionSupervisionTimeout=400/' /etc/bluetooth/main.conf sudo systemctl restart bluetooth - More options (
--name,--product-id,--retries,--chunk...):python3 Eclipse/suota_flash.py --help.
Or upload output.bin with the Dialog SUOTA app, using the settings in docs/OTA_Settings_for_apk.jpg.
Other keeprapid ring/band models use other product IDs, mostly on a different MCU (DA14531/DA14535). Before flashing a ring with an unknown ID, check that its MCU is a DA14585.
This is based on atc1441/ATC_SR08_Ring, sources in Firmware_src/projects/target_apps/ble_examples/prox_reporter/.
