Skip to content

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.

Triki front
Front — Triki logo
Triki board
Board — Żabka "Z" logo, nRF52810
Live demo — streaming motion over BLE

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-controller library (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)