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]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
7233a4b1c0
commit
d2135a1938
@@ -0,0 +1,108 @@
|
||||
# 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 **+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 a `uint8_t[104]` array.
|
||||
- Supports **grayscale/dimming**: `matrix.setGrayscaleBits(bits)` — e.g. `3` → 8 levels (0–7), `8` → 256 levels (0–255).
|
||||
|
||||
```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.
|
||||
Reference in New Issue
Block a user