🌀 strands-nicla
Arduino Nicla (Vision / Sense / Voice) control as a single @tool for Strands Agents.
from strands import Agent
from strands_nicla import nicla
agent = Agent(tools=[nicla])
agent("take a photo with the nicla vision and tell me what you see")
What it does
Nicla Vision runs MicroPython / OpenMV firmware and exposes a USB CDC
serial REPL. strands-nicla wraps that REPL into Strands-friendly actions:
Nicla Voice does not. A factory Voice enumerates as a CMSIS-DAP debug probe with a silent CDC port — no REPL, so
exec/ls/puttime out by design. It is a BLE-gateway device, not a REPL device. See NICLA_VOICE.md.
| category | actions |
|---|---|
| devices | list_devices, select_device, info, reset(hard), stop |
| repl | exec, eval |
| fs | ls, cat, put, get, rm, mkdir, run_file |
| vision | snapshot (JPEG → Converse image block, quality ladder for low light) |
| sensors | imu (built-in SPI module first), env, distance, mic_level |
| tiny | provision — write tiny.technology identity/WiFi to /flash/tiny.json over USB |
| firmware | boot_mode, flash (DFU) |
The tiny necklace (firmware/ + hardware/)
This repo also carries the tiny.technology wearable built on Nicla Vision:
firmware/— MicroPython device firmware: first-boot WiFi-AP portal, BLE GATT provisioning (pairs with the tiny iOS/Android apps' Nearby → 💎 "Set up" flow), and the device-node loop (heartbeat + relay poll + commands:photo,detectperson,facesFOMO,distance,imu,info— vision models run on-device from the QSPI romfs, ~48ms/inference).hardware/— flash map, measured board geometry, official docs/CAD, and the parametric pendant case (tiny_necklace_case.scad, USB-powered orbattery=trueLiPo variant), sliced plates for Bambu Lab X2D.tests/— the firmware's pure logic runs under CPython with hardware stubs.
See hardware/README.md for the full device state,
provisioning paths, and MicroPython/OpenMV gotchas learned the hard way.
Ops rule: reset(hard=True) launches main.py; a soft reset with a
terminal attached drops to the REPL. Keep the OpenMV USB volume ejected
(diskutil unmount "/Volumes/NO NAME") or macOS will corrupt /flash.
Install
pip install strands-nicla
# or inject into devduck:
pipx inject devduck strands-nicla
Supported boards
- Arduino Nicla Vision — STM32H747 + 2MP cam + mic + IMU + ToF
- Arduino Nicla Sense ME — nRF52832 + BHI260AP + BMM150 + BMP390 + BME688
- Arduino Nicla Voice — nRF52832 + NDP120 + IM69D130 mic + BMI270
All three expose a USB CDC port, but only Nicla Vision answers on it out of the
box. Nicla Voice ships as a CMSIS-DAP debug probe (2341:0065) whose CDC port
returns nothing — verified on hardware at 9600/115200/921600 with both \r\n
and Ctrl-C. It has no WiFi either (nRF52832), so it cannot run the Vision's
heartbeat/relay node loop; a phone acts as its BLE gateway. Nicla Sense ME runs
MbedOS and can also speak MicroPython via mpremote.
Principles
- Mirror strands-adb / strands-ios action vocabulary where sensible.
- Honest errors — if the board doesn't support an action, say so.
- Vision-first —
snapshotreturns Converse API image blocks. - No extra daemons — pure pyserial + MicroPython raw REPL protocol.
Status
v0.1 — alpha. See GOAL.md.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file strands_nicla-0.1.0.tar.gz.
File metadata
- Download URL: strands_nicla-0.1.0.tar.gz
- Upload date:
- Size: 42.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
925dc4116c5f997e8d36d5d02d495fe72df8a749274d2d7b207d8b2225922119
|
|
| MD5 |
5bfc43217b42b0227aec73382b504153
|
|
| BLAKE2b-256 |
8d0e8b7d810268a7773f3d4f33eebdfba6d22ddcf1a8aba55c6076e0e956bc9a
|
File details
Details for the file strands_nicla-0.1.0-py3-none-any.whl.
File metadata
- Download URL: strands_nicla-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9cad3bcc2302b83f6b1fd8ca8ffdf34176087a1889f5955f9d51e45f5341e00a
|
|
| MD5 |
b5d2eb68ddaa94a5db12fb1ce75d4c19
|
|
| BLAKE2b-256 |
1eb439728c46f1bb4964d29d52aa85209d4eb73304be75bf7f667cff9ba3c43c
|