GPIO3 for SK6812 RMT (confirmed safe on SuperMini); GPIO6/7 for WS2801 SPI with hardware fallback noted
NeoWs2801Spi2MhzMethod chosen for 5m cable reliability over 1MHz default
credentials.h gitignored at firmware root; template included in source tree
duration_minutes
completed_date
tasks_completed
tasks_total
files_created
files_modified
3
2026-04-03
3
4
6
0
Phase 01 Plan 01: ESP32 Firmware Scaffold + WiFi+RMT Coexistence Test Summary
PlatformIO project scaffold with dual LED strip driver (WS2801 SPI 2MHz + SK6812 RMT DMA), WiFi initialization with WIFI_PS_NONE, and a hardware coexistence test harness for day-1 validation.
What Was Built
Files Created
File
Purpose
firmware/platformio.ini
PlatformIO build config for ESP32-C3 SuperMini with mandatory -DESP32_ARDUINO_NO_RGB_BUILTIN flag
firmware/src/config.h
All compile-time constants: GPIO pins, LED counts, brightness caps, UDP port, FreeRTOS priorities/stacks
firmware/src/led_driver.h
Strip type aliases + public API (initStrips, showBothStrips, setAll*, applyBrightness*)
Setup + WiFi connect + WIFI_PS_NONE + static loop with coexistence test procedure comments
firmware/.gitignore
Excludes .pio/ build artifacts and credentials.h
Architecture Decisions Made
-DESP32_ARDUINO_NO_RGB_BUILTIN flag: Mandatory to prevent fatal CONFLICT! driver_ng is not allowed to be used with the legacy driver on Arduino ESP32 core 3.x when using NeoPixelBus legacy RMT driver.
GPIO3 for SK6812 RMT: Confirmed safe on ESP32-C3 SuperMini (no JTAG conflict). GPIO6/7 for WS2801 SPI with fallback note (GPIO0/1) if JTAG conflict found on hardware.
NeoWs2801Spi2MhzMethod: 2MHz SPI chosen for signal integrity over a 5m cable run (vs. default higher speeds).
stripWand.Show() before stripSchrank.Show(): RMT DMA starts non-blocking for SK6812; SPI blocks ~4ms — both complete within ~10ms window concurrently.
Brightness clamping to [0.0f, BRIGHTNESS_MAX]: Applied in both applyBrightnessW and applyBrightnessR before scaling, respecting the 40% hardware cap (D-09).
voidinitStrips();voidshowBothStrips();voidsetAllWand(RgbwColorcolor);voidsetAllSchrank(RgbColorcolor);RgbwColorapplyBrightnessW(RgbwColorc,floatfactor);RgbColorapplyBrightnessR(RgbColorc,floatfactor);externStripWandstripWand;// direct access for animation engine (Plan 03)
externStripSchrankstripSchrank;
Validation required on hardware — hardware may require fallback to GPIO0/GPIO1 for WS2801 if JTAG pins conflict.
Coexistence Test Status
Awaiting hardware checkpoint validation. The firmware is ready to flash. Developer must:
Fill in firmware/src/credentials.h with WiFi credentials
Run cd firmware && pio run — must compile without errors
Flash to ESP32-C3 SuperMini via pio run --target upload
Confirm serial output: "WIFI_PS_NONE set", IP address, both strips lit
Run 300-packet UDP burst at 10 pps for 30 seconds, observe zero flicker
Deviations from Plan
Auto-fixed Issues
None — plan executed exactly as written.
Note:credentials.h was correctly excluded from git (per firmware/.gitignore) rather than committed with placeholder values. This is the intended behavior — the gitignore entry is working correctly.