A custom WS2812 LED badge powered by a [Seeed XIAO (BLE/RP2040/ESP32C3/...)](https://wiki.seeedstudio.com/SeeedStudio_XIAO_Series_Introduction/) and written in [TinyGo](https://tinygo.org).
The PCB hosts 20 RGB LEDs arranged in a **4 rows × 5 columns** grid behind a frosted 3D-printed diffuser. A single button cycles through lighting effects.

---
## Hardware
| Component | Note |
|-----------|-----|
| Hikari PCB | in hardware/pcb folder |
| 3D printed files | in hardware/STL folder |
| Flathead screw 2.1x10 | 4x |
| 20 × WS2812 LEDs (4 rows × 5 cols) | D6 |
| Tactile button | D3 |
| Qwiic / StemmaQT connector | D4 & D5 (I²C) |
| Passive buffer | D7 |
---
## Effects
Each press of the button advances to the next effect. The sequence cycles endlessly.
| # | Name | Description |
|---|------|-------------|
| 1 | **Rainbow** | All 20 LEDs show the same colour; the hue cycles slowly through the full spectrum (~20 s per revolution) |
| 2 | **Row sweep** | One row lights up at a time and sweeps downward; the hue drifts continuously |
| 3 | **Column sweep** | One column lights up at a time and sweeps rightward |
| 4 | **Stars** | 8 LEDs at random positions fade in with a random colour then fade out; when a star dies a new one appears elsewhere |
| 5 | **Breathing** | All LEDs pulse with a triangular brightness envelope (~5 s per breath); the hue shifts slowly between cycles |
| 6 | **Rainbow rows** | Each row shows a different hue (90° apart on the colour wheel); all hues advance together |
| 7 | **Wave** | A bright column chases across the grid with a two-column fading trail |
Requires TinyGo ≥ 0.41 and [`tinygo.org/x/drivers`](https://github.com/tinygo-org/drivers) v0.35.
---
## Build
### Step 1 — Bare PCB
The back side of the custom PCB. Footprints for the 20 WS2812 LEDs are arranged in the 4 × 5 grid.

---
### Step 2 — Qwiic / StemmaQT connector
We'll start with the SMD Qwiic / StemmaQT connector since it's the trickiest to solder. It is not really needed, but a cool way to extend the board with sensors. Use the help of some flux if needed.

---
### Step 3 — Soldering the button
The tactile switch is soldered to its footprint on top of the board. Easier than the stemmaQT.

---
### Step 4 — PCB fully populated
All 20 LEDs and the button in place. The XIAO BLE/RP2040/ESP32C3/... plugs in on the left edge. It's the easier one to do, and the last one to be done since it goes over one LED.

**NOTE**: Make sure all the LEDs are correctly soldered since once we solder the board there's no way to fix the LED behind it.
---
### Step 5 — PCB seated in the frame
The board drops into the back shell. The silkscreen on the rear shows the Go gopher pattern.

---
### Step 6 — 3D-printed back cover
The black back shell printed in PLA. The XIAO slides into the slot on the side for USB access. Use 4 screws on the holes.

---
### Step 7 — Frosted diffuser panel
A white PLA diffuser snaps onto the front of the frame to spread the light evenly across the grid. You could print different models of the diffuser!

---
### Step 8 — Finished
Fully assembled and running. The diffuser softens each LED point into a smooth glow.