Overview
Notes and tooling for the Żabka Triki (a.k.a. Tiki) — a collectible BLE token shaped like a bottle cap (crown cap), built around an nRF52810 BLE SoC and an LSM6DSL accelerometer/gyroscope.
Goal: read the token's motion sensors over BLE and reuse it as a motion controller — recover orientation from gyro + accel fusion.


Repository layout
assets/ device photos (tracked)
docs/ this VitePress documentation site (tracked)
tools/ BLE tooling + scripts (tracked; .venv ignored)At a glance
- Hardware: nRF52810 (Cortex-M4 BLE SoC) + LSM6DSL IMU + Macronix MX25R8035F SPI NOR.
- BLE protocol: request/response over the Nordic UART Service — a 1-bit green-LED control register plus a command interface.
- IMU streaming: live accelerometer + gyroscope over BLE, decoded and verified at ~104 Hz.
- Web Bluetooth controller: an in-browser orientation visualizer.
Status
- [x] Captured the GATT map; the protocol is NUS request/response
- [x] Live accel + gyro streaming over BLE — 8-byte start command, 14-byte frames, decoded and verified (
tools/ble_imu_stream.py). See IMU streaming. - [x] In-browser Web Bluetooth controller with a live 3D orientation model
- [x] Extracted the IMU-parse + orientation core (selectable Madgwick or VQF fusion) into a reusable, dependency-free
triki-controllerlibrary (browser BLE client + framework-agnostic fusion math) - [ ] Build a native controller bridge (joystick / OSC / HID) — the parse + fusion half above is done and reusable; what's left is a native BLE transport and the OS-level output, since a browser can't emit a real joystick / HID (see Web Bluetooth controller)