Skip to content

About

Libraries for a Liberated smart ring with sensors and Display (SR08)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

 
 

Latest commit

 

History

79 Commits

Folders and files

Repository files navigation

LibRing - Liberated Smart Rings for arts and research

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

Demo

Gesture Recognition Demo

Firmware (custom, flashed over the air)

Identify the ring variant

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.

Build and flash

cd Firmware_src/projects/target_apps/ble_examples/prox_reporter
make                  # or: make PRODUCT_ID=17

Flash 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 scan and are skipped if it doesn't match the build. Flashed rings advertise as LibRing.
  • 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.

Acknowledgements

This is based on atc1441/ATC_SR08_Ring, sources in Firmware_src/projects/target_apps/ble_examples/prox_reporter/.

About

Libraries for a Liberated smart ring with sensors and Display (SR08)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages