1. Build the hardware¶
A Lightnet installation has two kinds of boards: one controller and one or more panels. They are designed and flashed independently, then connected with a small cable that carries power and a single discovery wire.
graph LR
C["🎛️ Controller<br/>ESP8266 / ESP32"] -->|edge cable| P1["💡 Panel<br/>ATmega328P/PB"]
P1 -->|edge cable| P2["💡 Panel"]
P1 -->|edge cable| P3["💡 Panel"]
P3 -->|edge cable| P4["💡 Panel"]
Each edge cable carries:
- Power (V+ / GND) to the next panel
- I²C (SDA / SCL) — the shared bus used for all commands after discovery
- A single-wire ping line — used once at boot so the controller can map the topology
Panels expose up to 5 edges (configurable via NUMBER_OF_EDGES in panel.config.hpp). One edge is the "parent" connection (back toward the controller); the others fan out to children. Topology is a tree — no cycles.
What you need¶
DIY status
Schematics, PCB layouts, and a full bill of materials are not yet published. This section will fill in once boards are released. For now, the firmware repository is the authoritative reference for pin assignments and target MCUs.
Controller — pick one¶
| MCU | PlatformIO env | Notes |
|---|---|---|
| ESP8266 (e.g. ESP-12E) | controller_esp8266 |
Lowest cost; single-core; works for typical installs |
| ESP8266 (Wemos D1 Mini Pro) | controller_wemos |
Same chip, larger antenna option |
| ESP32 DevKit | controller_esp32 |
More headroom for large installs; preferred if you can pick |
Pin assignments are documented in the Firmware → Hardware reference.
Panels — one ATmega per panel¶
| MCU | PlatformIO env | Notes |
|---|---|---|
| ATmega328PB | panel_atmega328pb |
Recommended — extra peripherals, identical footprint to 328P |
| ATmega328P | panel_atmega328p |
Drop-in alternative; same flash, same firmware |
| ATmega328P (via controller serial) | panel_atmega328p_via_controller |
Upload a .bin over the controller's 57600-baud USB serial — useful for breadboard prototyping |
Each panel drives one WS2812 LED on PD5. The bootloader, fuses, and firmware are flashed once over a programmer (USBasp), then panels receive future updates wirelessly via the controller. See Firmware → OTA & Updates.
Other parts¶
- A USBasp (or compatible AVR programmer) to put the bootloader + fuses on each panel for the first time
- A USB-to-serial cable to flash the controller initially (over-the-air takes over once Wi-Fi is configured)
- A regulated 5 V supply sized for your panel count
Topology rules¶
- Panels form a tree rooted at the controller — no rings or cross-links
- A panel always has exactly one parent edge; the remaining 0–4 edges can fan out
- Panels are identified by an index assigned during discovery (tree-traversal order)
- The firmware caps panel count at 32 on ESP8266 and 100 on ESP32 (
LIGHTNET_MAX_PANELSinCore/Common/LightnetConfig.hpp)
Keep cable runs short enough that the I²C bus stays clean — long runs and high panel counts will eventually start dropping frames. The architecture details in Firmware → Architecture cover the bus characteristics.