Skip to main content

Kiiroo Onyx/Pearl 1

The Kiiroo Onyx 1 and Pearl 1 were a set of toys made to control each other via Kiiroo's remote servers. The Onyx 1 was a tube with constricting elements and a touch sensor slider, while the Pearl 1 was a vibrator with 4 capacitive touch elements used to track insertion depth.

Bluetooth Details

Bluetooth 2.0 Connections

When pairing using Bluetooth 2.0, serial ports on OS X and linux machines will register for the Pearl toy as:

/dev/tty.PEARL-DevB 

and for the Onyx toy as:

/dev/tty.ONYX-DevB

Bluetooth LE Connections

When using Bluetooth LE to talk to Kiiroo toys, the following UUIDs are used.

Service UUID:

49535343-fe7d-4ae5-8fa9-9fafd205e455

RX Characteristic UUID:

49535343-1e4d-4bd9-ba61-23c647249616

TX Characteristic UUID:

49535343-8841-43f4-a8d4-ecbe34729bb3

Kiiroo Protocol

The Kiiroo communications protocol consists of strings send to either the Pearl or Onyx. These strings are formatted like so:

x,\n

Where x is an integer from 0-4. When sent to the Onyx, this command sets the pressure ring position. When sent to the Pearl, this command sets vibration levels.

These commands are sent from the Pearl whenever a corresponding touch sensor is hit. There is no way to send commands from the Oynx.

That is it. That is the whole protocol. The end.

Stupid Kiiroo Tricks

The simplicity of the protocol means that two toys can interact locally on POSIX-compliant platforms (linux, OSX/macOS, etc) using nothing but a 'cat' command. If both toys are paired using Bluetooth 2.0, so that the Pearl is at

/dev/tty.PEARL-DevB 

and the Onyx is at

/dev/tty.ONYX-DevB

Then the following command can be run

cat /dev/tty.PEARL-DevB > /dev/tty.ONYX-DevB

This will cause the output from the Pearl's touch sensors to be read directly into the Onyx, controlling its pressure rings.