# Corvus ESP32 Firmware

Peripheral firmware for ESP32 — speaks the same JSON-over-serial protocol as the STM32 firmware. Flash this to your ESP32, then configure Corvus on the host to connect via serial.

## Protocol

- **Request** (host → ESP32): `{"id":"1","cmd":"gpio_write","args":{"pin":13,"value":1}}\n`
- **Response** (ESP32 → host): `{"id":"1","ok":true,"result":"done"}\n`

Commands: `gpio_read`, `gpio_write`.

## Prerequisites

1. **ESP toolchain** (espup):
   ```sh
   cargo install espup espflash
   espup install
   source ~/export-esp.sh   # or ~/export-esp.fish for Fish
   ```

2. **Target**: ESP32-C3 (RISC-V) by default. Edit `.cargo/config.toml` for other targets (e.g. `xtensa-esp32-espidf` for original ESP32).

## Build & Flash

```sh
cd firmware/corvus-esp32
cargo build --release
espflash flash target/riscv32imc-esp-espidf/release/corvus-esp32 --monitor
```

## Host Config

Add to `config.toml`:

```toml
[peripherals]
enabled = true

[[peripherals.boards]]
board = "esp32"
transport = "serial"
path = "/dev/ttyUSB0"   # or /dev/ttyACM0, COM3, etc.
baud = 115200
```

## Pin Mapping

Default GPIO 2 and 13 are configured for output. Edit `src/main.rs` to add more pins or change for your board. ESP32-C3 has different pin layout — adjust UART pins (gpio21/gpio20) if needed.

## Edge-Native (Future)

Phase 6 also envisions Corvus running *on* the ESP32 (WiFi + LLM). This firmware is the host-mediated serial peripheral; edge-native will be a separate crate.
