Skip to content

feat(examples): ESP32-C3 Super Mini blinky — fallback demo for bare C3 labs#442

Open
w1ne wants to merge 1 commit into
mainfrom
feat/esp32c3-blinky-example
Open

feat(examples): ESP32-C3 Super Mini blinky — fallback demo for bare C3 labs#442
w1ne wants to merge 1 commit into
mainfrom
feat/esp32c3-blinky-example

Conversation

@w1ne

@w1ne w1ne commented Jul 2, 2026

Copy link
Copy Markdown
Owner

Why

Hosted MCP / shared Playground labs only run from a pre-built binary (prod has no compiler). Bare esp32c3-supermini labs had none, so every C3 lab opened from ChatGPT died with "Cannot run ESP32-C3 Super Mini: no firmware".

What

  • examples/esp32c3-blinky: bare-metal rv32imc GPIO8 (user LED) blink with UART narration, reusing the Leo example's startup.S/c3.ld/c3_uart. Committed ELF so no toolchain is needed to consume it.
  • Drives the plain R/W GPIO_OUT/GPIO_ENABLE registers (silicon-valid) because the C3 gpio block is the declarative register file without W1TS/W1TC side effects.
  • test-blink.yaml scenario + e2e_esp32c3_blinky.rs: asserts boot banner, several LED ON/OFF transitions, and GPIO_ENABLE bit 8. Also pins rv32 C.JAL decoding — the blinky is small enough that the linker emits a compressed jal from _start to main (the pre-esp32c3: RISC-V rom-boot + RV32C decode fixes + WiFi MAC RE #254 decoder bug class would send it into unmapped flash; none of the existing examples exercise it).

Verification

  • cargo test -p labwired-cli --test e2e_esp32c3_blinky → pass
  • App-side wiring (Playground fallback + MCP source_code fix) is w1ne/labwired PR (linked there); verified end-to-end in the browser: bare C3 share boots, blinks, streams LED ON/OFF on the Serial dock.

🤖 Generated with Claude Code

…re C3 labs

The Playground has no prod compiler, so a shared/agent lab only runs from a
pre-built binary. Bare esp32c3-supermini labs had none, so every C3 lab
opened from the hosted MCP died with "Cannot run: no firmware". This adds
the canonical GPIO8 blink example whose committed ELF the Playground can
fall back to (app-side wiring lands separately).

Drives the plain R/W GPIO_OUT/GPIO_ENABLE registers (silicon-valid) because
the C3 gpio block is the declarative register file without W1TS/W1TC side
effects. The e2e test also pins rv32 C.JAL decoding: the blinky is small
enough that the linker emits a compressed jal from _start to main.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant