Vendors the comprehensive UNO Q skill (SKILL.md + 7 references/*.md) and installs it into EVERY agent's workspace on each board, so agents know this board's specifics (dual-brain arch, Bridge/RPC, pin tables, LED matrix + the ArduinoGraphics-not-installed gotcha) instead of guessing generic Arduino. Why per-agent workspace: ZeroClaw's read_skill returns only SKILL.md; the agent reads references/*.md via the workspace-sandboxed file_read tool, so references are only reachable under ~/.zeroclaw/agents/<alias>/workspace/skills/. A shared/skills bundle surfaces the skill but its references get sandbox-blocked. - push-skill.sh installs a SKILL.md+references skill into every agent workspace (discovers aliases from the board); provision-fleet runs it per board. - config.template risk profile now allows + auto-approves read_skill + file_read so agents load skills without a human approver (webhook path is non-interactive). - Flattened the folded 'description: >-' to single-line (ZeroClaw's frontmatter parser is a flat scanner, not full YAML). Verified on board 65301572 with cloud/Sonnet-5: discovered arduino-uno-q → read_skill(SKILL.md) → file_read references/04-bridge-rpc.md → correct board-specific answer citing the file. Co-Authored-By: Claude Opus 4.8 <[email protected]>
5.0 KiB
UNO Q — Hardware & Specifications
Architecture at a glance
The UNO Q combines two processors on one classic UNO form-factor board:
| Role | Chip | Details | Runs |
|---|---|---|---|
| MPU (Linux side) | Qualcomm QRB2210 (Dragonwing) | Quad-core Arm Cortex-A53 @ 2.0 GHz; Adreno 702 GPU @ 845 MHz; dual ISP up to 25 MP @ 30 fps | Debian Linux (full OS, upstream support) |
| MCU (Arduino side) | STM32U585 | Arm Cortex-M33 @ up to 160 MHz, 2 MB flash, 786 KB SRAM | Arduino sketches on Zephyr OS |
| Radio | WCBN3536A | Dual-band Wi-Fi 5 (2.4/5 GHz) + Bluetooth 5.1, onboard antennas | — |
| Multimedia codec | ANX7625 | Video/audio out over the USB-C connector (DisplayPort) | — |
| PMIC | Qualcomm PM4145 | Power management | — |
The two processors are internally linked by a dedicated serial connection managed by the arduino-router service (see the Bridge reference). There is no need — and it is a mistake — to bridge them with external wires.
Memory & storage variants
- RAM: 2 GB or 4 GB LPDDR4.
- Storage: 16 GB or 32 GB eMMC.
- Product SKU family: ABX00162 … ABX00173.
- Arduino recommends the 4 GB variant for standalone / single-board-computer use (running the desktop + App Lab on-device). The 2 GB variant is fine when driven from a PC in Network Mode.
Powering the board
Three supported ways to power it (choose one):
- USB-C cable providing 5 VDC / 3 A (cable not included). 15 W sink.
- External +5 VDC to the 5V pin.
- External +7–24 VDC to the VIN pin.
For a standalone desk setup the usual path is a USB-C multiport (dongle) adapter with external power delivery feeding the board while also breaking out HDMI/USB. Apple's USB-C dongle has been tested and found incompatible — use a non-Apple multiport adapter.
The board boots automatically when powered — you do not press the power button to start it.
USB-C connector — it does far more than power/programming
| Feature | Capability |
|---|---|
| USB power (sink) | 5 VDC / 3 A (15 W) |
| USB standard | USB 3.1 Gen 1 (5 Gb/s) |
| Display over USB-C | DisplayPort output |
With a USB-C dongle you additionally get: HDMI video out, USB camera input, audio (USB or 3.5 mm headset), Ethernet, HID (keyboard/mouse), and storage (microSD/USB drive). This is what makes SBC mode possible.
Form factor & connectors
- Classic Arduino UNO form factor → compatible with the huge existing range of UNO shields.
- Two connector tiers:
- UNO-style headers on top — prototyping/debugging, shield-compatible.
- High-speed header connectors on the bottom (JMISC, JDIGITAL, JANALOG, JCTL, etc.) exposing extra digital pins and low-level interfaces.
- Pinout PDF, datasheet, schematics, and STEP files are published on the Arduino docs product page (model ABX00162). Point users there for mechanical/CAD detail.
Onboard user interface
8×13 blue LED matrix (MCU-controlled)
- 104 LEDs (8 rows × 13 cols), driven by the STM32.
- Library:
Arduino_LED_Matrix.h. Draw a frame from auint8_t[104]array. - Supports grayscale/dimming:
matrix.setGrayscaleBits(bits)— e.g.3→ 8 levels (0–7),8→ 256 levels (0–255).
#include <Arduino_LED_Matrix.h>
Arduino_LED_Matrix matrix;
uint8_t frame[104] = { /* 8 rows of 13 values */ };
void setup() {
matrix.begin();
matrix.setGrayscaleBits(1); // 1 bit = on/off
matrix.draw(frame);
}
void loop() {}
4× RGB LEDs — split across both processors
- LED 1 & LED 2 → controlled by the MPU (Linux) via the sysfs LED class at
/sys/class/leds/.... - LED 3 & LED 4 → controlled by the MCU (sketch) via
digitalWrite()on named pins. - All onboard RGB LEDs are ACTIVE-LOW — logic
0/LOWturns a segment ON.
MPU (Linux) sysfs names:
- LED 1:
red:user,green:user,blue:user - LED 2:
red:panic,green:wlan,blue:bt
echo 1 | tee /sys/class/leds/red:user/brightness # ON
echo 0 | tee /sys/class/leds/red:user/brightness # OFF
Or from Python via App Lab's helper:
from arduino.app_utils import App, Leds
Leds.set_led1_color(1, 0, 0) # LED1 red on
Leds.set_led1_color(0, 0, 0) # LED1 off
MCU (sketch) pin names: LED3_R/LED3_G/LED3_B, LED4_R/LED4_G/LED4_B — remember active-low:
pinMode(LED3_R, OUTPUT);
digitalWrite(LED3_R, LOW); // red ON (active-low)
Power button
- Long press (5+ seconds) → reboots the Linux system.
- Not needed to power on (auto-boots on power).
Hardware debug UART (system console)
- A dedicated low-level UART on the JCTL connector exposes the SoC's main console (bootloader messages + Linux shell login).
- Parameters: 115200 bps, 1.8 V logic.
- ⚠️ 1.8 V logic only — you must use a 1.8 V USB-to-TTL converter (e.g. DSD Tech SH-U09C5). Using a 3.3 V/5 V adapter can damage the board.
- Use for deep debugging when the board won't boot or the network is unavailable; ordinary work should use SSH instead.