LumiFur Controller
ESP32-S3 firmware for real-time HUB75 face animation, sensor-reactive expressions, BLE command control, telemetry, and browser-based OTA updates.

Controller stack
The firmware target, display wiring baseline, input hardware, and release workflow in one scan.
Core
Rendering core
The MatrixPortal ESP32-S3 handles frame rendering, effect state, wireless commands, and sensor polling in one firmware target.
Integration
Panel wiring baseline
Dual HUB75 panels use dedicated ribbon data paths and a separate 5 V rail so animation stays stable under load.
Sensors
Inputs and expansion
Built-in light, motion, audio, and status hardware are complemented by an ADC header for custom controls.
Maintenance
Release workflow
GitHub releases, changelog highlights, and the browser updater keep firmware maintenance visible and repeatable.
Firmware release
Current controller build, changelog highlights, and the fastest route to update hardware.
Changelog highlights
- Automated firmware build and release pipeline.
- Web updater hosted on GitHub Pages.
- Sensor performance tuning and BLE service refinements.
Ports + enclosure
Connector access, input controls, and enclosure decisions that affect serviceability.
Concept
Enclosure sketch
Early layout exploring a slim profile with accessible ports and clean cable routing for HUB75 panels.

Expansion
12-pin ADC header
Dedicated analog header for external sensors, sliders, and custom inputs.

Controls
Side button cluster
Tactile controls for expression changes, pairing, and brightness adjustments.

I/O
Side ports
Accessible power and data ports for bench setup, updates, and service access.
What the firmware does
The runtime behaviors that make the display expressive, controllable, and maintainable.
Visuals
Animated expression library
20+ real-time faces and effects, including plasma, flame, fluid, and scrolling text for the dual HUB75 display stack.
Sensors
Sensor-driven reactions
APDS9960 proximity/light, LIS3DH motion, and MEMS microphone input feed responsive expression behavior.
Wireless
BLE command control
Switch expressions, adjust brightness, and toggle runtime features over the NimBLE GATT service.
Updates
OTA firmware updates
A dedicated OTA characteristic pairs with the web updater for browser-based firmware delivery.
Power
Power-aware runtime
Wake-on-motion, sleep dimming, ambient scaling, and persistent preferences in NVS.
Performance
Optimized HUB75 pipeline
DMA double buffering, optional virtual panel simulation, and extensible C++ effect modules.
Hardware + sensors
Reference hardware used by the current firmware baseline.
MatrixPortal ESP32-S3
ESP32-S3 controller board with onboard APDS9960, LIS3DH, I2S MEMS microphone, and NeoPixel status LED.
Dual 64x32 HUB75 panels
Two chained 64x32 RGB matrices (1/16 scan) for high-density face animations.
HUB75 ribbon + 5V power
Standard HUB75 ribbon cables plus dedicated 5 V power delivery sized for the LED load.
APDS9960 ambient light + proximity
Adaptive brightness plus proximity-triggered effects like blushing and eye bounce.
LIS3DH 3-axis accelerometer
Shake gestures, gravity-driven PixelDust physics, and wake-on-motion sensing.
I2S MEMS microphone
Onboard mic input for audio-reactive mouth animation.
NeoPixel status LED
Visual feedback for BLE advertising and connected states.
Onboard buttons + ADC header
View navigation buttons plus a 12-pin ADC header for external sensors.
BLE control + telemetry
Command, diagnostic, and OTA surfaces exposed by the controller firmware.
- GATT service exposes expression selection, brightness control, and feature toggles.
- OTA characteristic streams firmware updates with live status acknowledgements.
- Telemetry includes temperature, build metadata, and buffered log retrieval.
- Web Bluetooth updater is available on the LumiFur site with a GitHub Pages fallback.