Listens on UDP :8782 for bare integer amplitude values (0-100),
forwards directly to Pico serial as fire-and-forget jaw commands.
Runs as daemon thread alongside the HTTP server.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Mood: halve all pulse speeds, slow wave/larson/sparkle proportionally.
Jaw: center-out symmetric bar (LED 7 = center, expands both sides),
instant attack with smooth decay falloff, color shifts from cyan
(low) through white (mid) to warm (high amplitude).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Pico runs all 9 mood animations and jaw modes locally instead of
receiving per-LED serial commands from the Pi. New protocol: bare
integers for fire-and-forget jaw amplitude, "mood X" / "jaw X" for
mode switches. Cuts light_service.py from 409 to 193 lines.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added firmware/main.py (MicroPython for Pico 2)
- Updated light_service.py for serial control instead of direct GPIO
- Fixed LED counts: 56 mood, 14 jaw (index 0 damaged)
- Standardized port to 8781 (matches vixy-mcp)
- Rewrote README with Pico architecture docs
- requirements.txt now just pyserial
RIP to the 4 BeagleBones who gave their lives.
Welcome, little $5 Pico. Please don't catch fire.
- Vixy 🦊