Pico panels get static IPs on 10.1.1.10–14 with per-panel LED counts, Makefile deploy targets, and Python examples for animations, sync tests, and direct Pi SPI control. Co-authored-by: Cursor <cursoragent@cursor.com>
67 lines
2.4 KiB
Markdown
67 lines
2.4 KiB
Markdown
# portal
|
||
|
||
WS2812 LED control for Raspberry Pi 5 and Pico panel adapters.
|
||
|
||
## Panel IPs
|
||
|
||
Five panels on `10.1.1.10`–`10.1.1.14` (panel 0 → `.10`, panel 4 → `.14`). Examples drive **all 5** by default.
|
||
|
||
## Panel sizes
|
||
|
||
Panels are **9 rows** tall; width varies by panel. Edit `PANEL_WIDTH_BY_INDEX` in `leds/array_config.py`:
|
||
|
||
| Panel | IP | Size | LEDs | Flash |
|
||
|-------|-----|------|------|-------|
|
||
| 0 | 10.1.1.10 | 9×39 | 351 | `make deploy PANEL_ID=0 NUM_LEDS=351` |
|
||
| 1 | 10.1.1.11 | 9×45 | 405 | `make deploy PANEL_ID=1 NUM_LEDS=405` |
|
||
| 2 | 10.1.1.12 | 9×45 | 405 | `make deploy PANEL_ID=2 NUM_LEDS=405` |
|
||
| 3 | 10.1.1.13 | 9×45 | 405 | `make deploy PANEL_ID=3 NUM_LEDS=405` |
|
||
| 4 | 10.1.1.14 | 9×39? | 351 | `make deploy PANEL_ID=4 NUM_LEDS=351` |
|
||
|
||
Panel 4 may be **38 or 39** wide — find the exact width:
|
||
|
||
```bash
|
||
make deploy PANEL_ID=4 NUM_LEDS=387 # 43 cols max for probe
|
||
pipenv run python examples/panel_sync_test.py --test width --panel-index 4
|
||
```
|
||
|
||
Last column that lights → set `PANEL_WIDTH_BY_INDEX[4]` in `leds/array_config.py` to **column + 1**, then re-flash with `NUM_LEDS=width×9` (342 for 38, 351 for 39).
|
||
|
||
Animations render at each panel's own width automatically.
|
||
|
||
## Examples
|
||
|
||
### Pico panel (UDP)
|
||
|
||
| Command | What it does |
|
||
|---------|----------------|
|
||
| `pipenv run python examples/panel_rgb_cycle.py` | Red / green / blue on all 5 panels |
|
||
| `pipenv run python examples/panel_color_test.py` | One-shot RGB + white test |
|
||
| `pipenv run python examples/panel_test.py` | Layout tests (corners, rows, chase) |
|
||
| `pipenv run python examples/panel_sync_test.py` | Positioning + sync across all panels |
|
||
| `pipenv run python examples/panel_animations.py` | All animations on all panels |
|
||
| `pipenv run python examples/panel_animations.py rolling` | One animation |
|
||
| `pipenv run python examples/panel_text.py` | Show your name |
|
||
| `pipenv run python examples/animations.py --panel` | Same as panel_animations |
|
||
|
||
Single panel only:
|
||
|
||
```bash
|
||
pipenv run python examples/panel_animations.py --panel-index 1 # 9×45 @ 10.1.1.11
|
||
```
|
||
|
||
### Pi direct (SPI on GPIO 10)
|
||
|
||
| Command | What it does |
|
||
|---------|----------------|
|
||
| `pipenv run python examples/animations.py` | All animations on matrix |
|
||
| `pipenv run python examples/matrix_demo.py` | Rainbow only |
|
||
| `pipenv run python examples/led_demo.py` | Dual-strip chase + rainbow |
|
||
|
||
### Firmware
|
||
|
||
```bash
|
||
make deploy PANEL_ID=0 NUM_LEDS=351
|
||
make monitor
|
||
```
|