Files
apress/deploy/uno-q/skills/arduino-uno-q/references/01-hardware-specs.md
T
Omar SobhandClaude Opus 4.8 d2135a1938 feat(uno-q): ship the arduino-uno-q expert skill on every node by default
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]>
2026-07-16 09:14:00 -07:00

5.0 KiB
Raw Blame History

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):

  1. USB-C cable providing 5 VDC / 3 A (cable not included). 15 W sink.
  2. External +5 VDC to the 5V pin.
  3. External +724 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 a uint8_t[104] array.
  • Supports grayscale/dimming: matrix.setGrayscaleBits(bits) — e.g. 3 → 8 levels (07), 8 → 256 levels (0255).
#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 / LOW turns 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.