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/zeroclaw-uno-q-bridge/ |
MCU sketch + Python socket server (port 9999) for GPIO |
| Bridge tools | src/peripherals/uno_q_bridge.rs |
gpio_read / gpio_write tools that talk to the Bridge over TCP |
| Setup command | 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.
- Arduino Uno Q with WiFi configured
- Arduino App Lab installed on your Mac (for initial setup and deployment)
- API key for LLM (OpenRouter, etc.)
- Download Arduino App Lab (AppImage on Linux).
- Connect Uno Q via USB, power it on.
- Open App Lab, connect to the board.
- Follow the setup wizard:
- Set username and password (for SSH)
- Configure WiFi (SSID, password)
- Apply any firmware updates
- Note the IP address shown (e.g.
arduino@192.168.1.42) or find it later viaip addr showin 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.tomlapi_key = "YOUR_OPENROUTER_API_KEY"
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
[peripherals]
enabled = false
# GPIO via Bridge requires Phase 4
[channels_config.telegram]
bot_token = "YOUR_TELEGRAM_BOT_TOKEN"
allowed_users = ["*"]
[gateway]
host = "127.0.0.1"
port = 42617
allow_public_bind = false
[agent]
compact_context = truessh arduino@<UNO_Q_IP>
# Run daemon (Telegram polling works over WiFi)
zeroclaw daemon --host 127.0.0.1 --port 42617At 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.48From the Uno Q (SSH'd in):
zeroclaw peripheral setup-uno-qThis copies the Bridge app to ~/ArduinoApps/zeroclaw-uno-q-bridge and starts it.
[peripherals]
enabled = true
[[peripherals.boards]]
board = "arduino-uno-q"
transport = "bridge"zeroclaw daemon --host 127.0.0.1 --port 42617Now 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 | Edit ~/.zeroclaw/config.toml (add Telegram bot_token) |
| 9 | zeroclaw daemon --host 127.0.0.1 --port 42617 |
| 10 | Message your Telegram bot β it responds |
- "command not found: zeroclaw" β Use full path:
/usr/local/bin/zeroclawor ensure~/.cargo/binis in PATH. - Telegram not responding β Check bot_token, allowed_users, and that the Uno Q has internet (WiFi).
- Out of memory β Keep features minimal (
--features hardwarefor Uno Q); considercompact_context = true. - GPIO commands ignored β Ensure Bridge app is running (
zeroclaw peripheral setup-uno-qdeploys and starts it). Config must haveboard = "arduino-uno-q"andtransport = "bridge". - LLM provider (GLM/Zhipu) β Use
default_provider = "glm"or"zhipu"withGLM_API_KEYin env or config. ZeroClaw uses the correct v4 endpoint.