Jaime Ortega

Halo

Talks to a lamp one pixel at a time.

Year
2026
Made for
Python, Bluetooth LE
State
shipped

The Moonside Halo accepts per-pixel colour over Bluetooth. Its own app will not give you that.

Eighty LEDs in forty slots around a ring, index zero at six o’clock, twenty at twelve. The command is PIXEL,<index>,<RRRGGGBBB> with every channel padded to three digits. The obvious guess is the brightness form, which connects, returns nothing, and quietly ignores the colour you asked for. Telling those two apart was most of the work.

The repo is the note I wanted to find when I started.

How to use it

The repo is private, but the part worth having is one line.

  1. The lamp takes per-pixel colour over BLE in this form, every channel padded to three digits.

    Terminal
    PIXEL,<index>,<RRRGGGBBB>
  2. So the pixel at six o'clock, in red:

    Terminal
    PIXEL,0,255000000

Eighty LEDs in forty slots: index 0 is six o'clock, 20 is twelve. The brightness form PIXEL,<index>,<brightness> also connects and quietly ignores the colour you asked for, which is the trap. Close the Moonside app before scanning or the lamp stops advertising.