Skip to content

SP105E (MixUp Pixel v1): protocol

  • the BLE name usually contains SP105;
  • service: FFE0;
  • characteristic: FFE1;
  • protocol: binary;
  • command size: 5 bytes;
  • no terminator.
Bytes Purpose
38 RR GG BB 1E static RGB
38 CA CA CA 10 status query
38 CA CA CA AA toggle power
38 CA CA CA 03 speed +1
38 CA CA CA 09 speed -1
38 CA CA CA 2A brightness +1
38 CA CA CA 06 scene 0
38 SS CA CA 2C scene SS, when SS > 0

Examples:

RGB(255,128,0): 38 FF 80 00 1E
Scene 3: 38 03 CA CA 2C
Status: 38 CA CA CA 10
Power toggle: 38 CA CA CA AA

The reply may contain extra firmware-specific bytes. The first four bytes:

Offset Field
0 power: 00 off, non-zero on
1 scene ID
2 speed step
3 brightness step
4..N firmware-specific, keep for diagnostics

Clear stale notifications before a status query. If no notification arrives, a GATT read of the same characteristic is acceptable.

The correct algorithm:

actualPower = queryStatus().power
if actualPower != desiredPower:
send 38 CA CA CA AA
wait
verify queryStatus().power == desiredPower

Repeating the toggle without reading the status can put the device back into its original state.

RGB:

  1. read the status;
  2. for a non-zero RGB, power on via the conditional toggle;
  3. send 38 RR GG BB 1E;
  4. check the status if the firmware reports the applied mode.

Scene:

  1. ensure power is on;
  2. for scene 0 send 38 CA CA CA 06;
  3. for the rest send 38 SS CA CA 2C;
  4. re-read the status.

Speed is set relative to the current value:

steps = abs(targetSpeed - currentSpeed)

Send 03 or 09 the required number of times, then check the status. Recommended target speed range: 0..6.