Skip to main content

Supported Boards

ZeroClaw supports a wide range of microcontrollers and single-board computers. Each board has different capabilities, transport protocols, and use cases.

Board Comparison

BoardArchitectureTransportGPIOADCI2C/SPIFlash ToolStatus
Raspberry PiARM (all models)NativeN/A (native)✅ Stable
STM32 Nucleo-F401REARM Cortex-M4USB SerialOpenOCD✅ Stable
Arduino UnoATmega328PUSB Serialavrdude✅ Stable
Arduino Uno R4 WiFiRA4M1 + ESP32USB Serial / BridgeCustom✅ Stable
ESP32 (RISC-V)ESP32-C3, C2Serial / WiFiespflash✅ Stable
ESP32 (Xtensa)ESP32, S2, S3Serial / WiFiespflash🚧 Experimental

Raspberry Pi

Models Supported

  • Raspberry Pi 5 (8GB recommended for robots)
  • Raspberry Pi 4 (4GB+)
  • Raspberry Pi 3 B+
  • Raspberry Pi Zero W (ARMv6, requires special build)
  • Raspberry Pi Zero 2 W

Features

  • GPIO: 40-pin header, BCM pin numbering
  • Transport: Native (rppal library)
  • Firmware: None required (ZeroClaw runs directly on Pi)
  • Use Cases: Edge-native AI, autonomous robots, production deployments

Configuration

[[peripherals.boards]]
board = "rpi-gpio"
transport = "native"

Build Requirements

# Enable peripheral-rpi feature
cargo build --features peripheral-rpi

# For Pi Zero W (ARMv6)
cargo build --release --target armv6l-unknown-linux-musleabihf --features peripheral-rpi

Raspberry Pi Setup

Detailed Raspberry Pi setup guide

STM32 Nucleo

Models Supported

  • Nucleo-F401RE (primary support)
  • Other STM32 Nucleo boards (experimental)

Features

  • GPIO: Arduino-compatible headers + Morpho connectors
  • Architecture: ARM Cortex-M4, 84 MHz
  • Transport: USB Serial (ST-LINK VCP)
  • Firmware: firmware/zeroclaw-nucleo/
  • Use Cases: Embedded development, rapid prototyping

VID/PID

  • Vendor ID: 0x0483 (STMicroelectronics)
  • Product ID: 0x374b (ST-LINK/V2.1)

Configuration

[[peripherals.boards]]
board = "nucleo-f401re"
transport = "serial"
path = "/dev/ttyACM0"  # or /dev/cu.usbmodem* on macOS
baud = 115200

Flashing Firmware

# Auto-flash via OpenOCD
zeroclaw peripheral flash-nucleo

# Manual flash
cd firmware/zeroclaw-nucleo
cargo build --release
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg \
  -c "program target/thumbv7em-none-eabihf/release/zeroclaw-nucleo verify reset exit"

STM32 Nucleo Setup

Detailed STM32 Nucleo setup guide

Arduino

Models Supported

  • Arduino Uno (ATmega328P)
  • Arduino Uno R4 WiFi (RA4M1 + ESP32-S3)

Arduino Uno (Classic)

Features:
  • GPIO: 14 digital pins (6 PWM), 6 analog inputs
  • Architecture: AVR ATmega328P, 16 MHz
  • Transport: USB Serial (CH340 or ATmega16U2)
  • Firmware: firmware/zeroclaw-arduino/zeroclaw-arduino.ino
  • Use Cases: Education, simple projects
VID/PID:
  • CH340: 0x1a86:0x7523
  • ATmega16U2: 0x2341:0x0043
Configuration:
[[peripherals.boards]]
board = "arduino-uno"
transport = "serial"
path = "/dev/ttyUSB0"  # or /dev/cu.usbserial-* on macOS
baud = 115200
Flashing:
# Via ZeroClaw (uses avrdude)
zeroclaw peripheral flash --port /dev/ttyUSB0

# Via Arduino IDE
# 1. Open firmware/zeroclaw-arduino/zeroclaw-arduino.ino
# 2. Select Board: Arduino Uno
# 3. Select Port
# 4. Upload

Arduino Uno R4 WiFi (Uno Q)

Features:
  • GPIO: 14 digital pins, 6 analog inputs
  • Architecture: Renesas RA4M1 (ARM Cortex-M4, 48 MHz)
  • WiFi: ESP32-S3 co-processor
  • Transport: Bridge (WebSocket to Arduino Cloud)
  • Use Cases: IoT projects, remote control
Configuration:
[[peripherals.boards]]
board = "arduino-uno-q"
transport = "bridge"
Setup:
zeroclaw peripheral setup-uno-q --host robot.local

Arduino Setup

Detailed Arduino setup guide

ESP32

Variants Supported

  • Architecture: RISC-V 32-bit, 160 MHz
  • Transport: Serial (USB CDC)
  • Firmware: firmware/zeroclaw-esp32/ (Rust, ESP-IDF)
  • Status: ✅ Stable

ESP32 / ESP32-S2 / ESP32-S3 (Xtensa)

  • Architecture: Xtensa 32-bit, 240 MHz
  • Transport: Serial
  • Firmware: Same, requires espup toolchain
  • Status: 🚧 Experimental

Features

  • GPIO: 34+ pins (varies by model)
  • WiFi: 802.11 b/g/n
  • Bluetooth: Classic + BLE (ESP32 classic)
  • Use Cases: IoT, edge-native AI (future)

VID/PID

  • CH340 USB-UART: 0x1a86:0x7523
  • CP2102 USB-UART: 0x10c4:0xea60

Configuration

[[peripherals.boards]]
board = "esp32"
transport = "serial"
path = "/dev/ttyUSB0"  # or /dev/cu.SLAB_USBtoUART
baud = 115200

Building Firmware

cd firmware/zeroclaw-esp32

# RISC-V (C3, C2) - uses nightly Rust + build-std
export PATH="/opt/homebrew/opt/[email protected]/libexec/bin:$PATH"
cargo build --release

# Xtensa (ESP32, S2, S3) - requires espup
cargo install espup espflash
espup install
source ~/export-esp.sh
cargo build --release --target xtensa-esp32-espidf

Flashing

# RISC-V
espflash flash target/riscv32imc-esp-espidf/release/zeroclaw-esp32 --monitor

# Xtensa
espflash flash target/xtensa-esp32-espidf/release/zeroclaw-esp32 --monitor

ESP32 Setup

Detailed ESP32 setup guide

Pin Mapping Reference

Arduino Uno

Digital: 0-13 (0,1 = Serial)
PWM:     3, 5, 6, 9, 10, 11
Analog:  A0-A5
LED:     Pin 13 (built-in)

Raspberry Pi (40-pin header, BCM numbering)

GPIO:  2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
       16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27
I2C:   GPIO 2 (SDA), GPIO 3 (SCL)
SPI:   GPIO 9 (MISO), GPIO 10 (MOSI), GPIO 11 (SCLK)
PWM:   GPIO 12, 13, 18, 19

ESP32-C3

GPIO:  0-21 (varies by dev board)
UART:  GPIO 20 (RX), GPIO 21 (TX)
I2C:   GPIO 8 (SDA), GPIO 9 (SCL)
SPI:   GPIO 2 (MOSI), GPIO 3 (MISO), GPIO 4 (SCLK)
LED:   GPIO 2 (built-in on some boards)

STM32 Nucleo-F401RE

Arduino headers: D0-D15, A0-A5
Morpho connectors: Full pin access
LED: PA5 (LD2, Arduino D13 equivalent)
Button: PC13 (USER button)

Board Selection Guide

Choose Raspberry Pi if:

  • Running edge-native AI agents
  • Need full Linux environment
  • Building autonomous robots
  • Want offline LLM inference (Ollama)

Choose STM32 Nucleo if:

  • Embedded development with real-time constraints
  • Learning ARM Cortex-M architecture
  • Need precise timing or low-level control
  • Prototyping custom PCBs

Choose Arduino if:

  • Education or hobby projects
  • Simple GPIO control
  • Quick prototyping
  • Large ecosystem of shields/libraries

Choose ESP32 if:

  • IoT projects with WiFi
  • Battery-powered applications
  • Remote sensing/control
  • Future edge-native AI (in development)

Adding New Boards

To add support for a new board:
  1. Implement the Peripheral trait in src/peripherals/
  2. Write firmware (if serial transport) in firmware/
  3. Add board type to config schema
  4. Add VID/PID to hardware registry
  5. Document in docs/datasheets/
See Adding Boards and Tools for details.

Troubleshooting

Board not detected

# List USB devices
lsusb  # Linux
system_profiler SPUSBDataType  # macOS

# Check serial permissions
ls -la /dev/tty*
sudo usermod -aG dialout $USER  # Linux

Serial connection fails

  • Verify baud rate matches firmware (usually 115200)
  • Check port path (/dev/ttyUSB0 vs /dev/ttyACM0)
  • Ensure firmware is flashed correctly
  • Try unplugging/replugging USB cable

GPIO operation fails on Raspberry Pi

# Check GPIO permissions
groups  # should include 'gpio'
sudo usermod -aG gpio $USER

# Verify rppal feature is enabled
cargo build --features peripheral-rpi

Next Steps

Raspberry Pi

Set up Raspberry Pi GPIO

STM32 Nucleo

Set up STM32 Nucleo board

Arduino

Set up Arduino board

ESP32

Set up ESP32 board

Build docs developers (and LLMs) love