docs/book/src/hardware/arduino-uno-q-setup.md
Run ZeroClaw on the Arduino Uno Q's Linux side. Telegram works over WiFi; GPIO control uses the Bridge (requires a minimal App Lab app).
ZeroClaw includes everything needed for Arduino Uno Q. Clone the repo and follow this guide — no patches or custom code required.
| Component | Location | Purpose |
|---|---|---|
| Bridge app | firmware/uno-q-bridge/ | MCU sketch + Python socket server (port 9999) for GPIO |
| Bridge tools | crates/zeroclaw-hardware/src/peripherals/uno_q_bridge.rs | gpio_read / gpio_write tools that talk to the Bridge over TCP |
| Setup command | crates/zeroclaw-hardware/src/peripherals/uno_q_setup.rs | zeroclaw peripheral setup-uno-q deploys the Bridge via scp + arduino-app-cli |
| Config schema | board = "arduino-uno-q", transport = "bridge" | Supported in config.toml |
Build with --features hardware to include Uno Q support.
[email protected]) or find it later via ip addr show in App Lab's terminal.ssh arduino@<UNO_Q_IP>
# Enter the password you set
# SSH into Uno Q
ssh arduino@<UNO_Q_IP>
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source ~/.cargo/env
# Install build deps (Debian)
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev
# Clone zeroclaw (or scp your project)
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Build (takes ~15–30 min on Uno Q)
cargo build --release --features hardware
# Install
sudo cp target/release/zeroclaw /usr/local/bin/
# On your Mac — add aarch64 target
rustup target add aarch64-unknown-linux-gnu
# Install cross-compiler (macOS; required for linking)
brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu
# Build
CC_aarch64_unknown_linux_gnu=aarch64-unknown-linux-gnu-gcc cargo build --release --target aarch64-unknown-linux-gnu --features hardware
# Copy to Uno Q
scp target/aarch64-unknown-linux-gnu/release/zeroclaw arduino@<UNO_Q_IP>:~/
ssh arduino@<UNO_Q_IP> "sudo mv ~/zeroclaw /usr/local/bin/"
If cross-compile fails, use Option A and build on the device.
ssh arduino@<UNO_Q_IP>
# Quick config
zeroclaw onboard --api-key YOUR_OPENROUTER_KEY --provider openrouter
# Or create config manually
mkdir -p ~/.zeroclaw/workspace
nano ~/.zeroclaw/config.toml
At minimum, set api_key / default_provider / default_model, plus [channels.telegram] with your bot_token. Leave [peripherals] disabled until Phase 4 below. See the Config reference for all fields.
ssh arduino@<UNO_Q_IP>
# Run daemon (Telegram polling works over WiFi)
zeroclaw daemon --host 127.0.0.1 --port 42617
At this point: Telegram chat works. Send messages to your bot — ZeroClaw responds. No GPIO yet.
ZeroClaw includes the Bridge app and setup command.
From your Mac (with zeroclaw repo):
zeroclaw peripheral setup-uno-q --host 192.168.0.48
From the Uno Q (SSH'd in):
zeroclaw peripheral setup-uno-q
This copies the Bridge app to ~/ArduinoApps/uno-q-bridge and starts it.
Enable [peripherals] and add a [[peripherals.boards]] entry with board = "arduino-uno-q" and transport = "bridge".
zeroclaw daemon --host 127.0.0.1 --port 42617
Now when you message your Telegram bot "Turn on the LED" or "Set pin 13 high", ZeroClaw uses gpio_write via the Bridge.
| Step | Command |
|---|---|
| 1 | Configure Uno Q in App Lab (WiFi, SSH) |
| 2 | ssh arduino@<IP> |
| 3 | curl -sSf https://sh.rustup.rs | sh -s -- -y && source ~/.cargo/env |
| 4 | sudo apt-get install -y pkg-config libssl-dev |
| 5 | git clone https://github.com/zeroclaw-labs/zeroclaw.git && cd zeroclaw |
| 6 | cargo build --release --features hardware |
| 7 | zeroclaw onboard --api-key KEY --provider openrouter |
| 8 | zeroclaw config set channels.telegram.bot-token <TOKEN> |
| 9 | zeroclaw daemon --host 127.0.0.1 --port 42617 |
| 10 | Message your Telegram bot — it responds |
/usr/local/bin/zeroclaw or ensure ~/.cargo/bin is in PATH.--features hardware for Uno Q); consider compact_context = true.zeroclaw peripheral setup-uno-q deploys and starts it). Config must have board = "arduino-uno-q" and transport = "bridge".default_provider = "glm" or "zhipu" with GLM_API_KEY in env or config. ZeroClaw uses the correct v4 endpoint.