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

109 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).
```cpp
#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`
```bash
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:
```python
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:
```cpp
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.