TL;DR — An IP address encoded into concentric circles instead of a QR code.
As an user running PiCube device with a local IP, I want to point my phone camera at the screen and instantly read the address, so that I can connect without typing anything — no QR code, no printed label, no config file.
Why not just use a QR code?
QR codes work. But they're visually ugh. I wanted to explore whether an IP address could be encoded into a shape that's readable by both eye and camera. And writing your own decoder is part of the point.
How it encodes
Four concentric rings, each representing one octet/number (0–255). Each ring is divided into 8 segments — one bit each. Green = 1, dark = 0. A dot at 12 o'clock acts as the rotation anchor.
Example: 192.168.0.200
Ring 1 — octet 192 = 11000000 → ██ ██ ░░ ░░ ░░ ░░ ░░ ░░
Ring 2 — octet 168 = 10101000 → ██ ░░ ██ ░░ ██ ░░ ░░ ░░
Ring 3 — octet 0 = 00000000 → ░░ ░░ ░░ ░░ ░░ ░░ ░░ ░░
Ring 4 — octet 120 = 11001000 → ░░ ██ ██ ██ ██ ░░ ░░ ░░
└─ MSB at 12 o'clock, clockwise
Why binary segments
Binary contrast (on/off) is far more robust against camera perspective and rotation. And octet 0, an empty ring, still works without any ambiguity.
What's next
The generator is done. The decoder (iOS / Python + OpenCV) is the next step — detect the marker, find the anchor, read 32 bits, assemble the address.