🌀 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.
Metadata
Release files for strands-nicla 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| strands_nicla-0.1.0.tar.gz | 42.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| strands_nicla-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.3 kB
Release files / strands_nicla-0.1.0.tar.gz
| Download URL | strands_nicla-0.1.0.tar.gz |
|---|---|
| Size | 42.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
925dc4116c5f997e8d36d5d02d495fe72df8a749274d2d7b207d8b2225922119
|
|
BLAKE2b-256 checksum How to use checksums |
8d0e8b7d810268a7773f3d4f33eebdfba6d22ddcf1a8aba55c6076e0e956bc9a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / strands_nicla-0.1.0-py3-none-any.whl
| Download URL | strands_nicla-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9cad3bcc2302b83f6b1fd8ca8ffdf34176087a1889f5955f9d51e45f5341e00a
|
|
BLAKE2b-256 checksum How to use checksums |
1eb439728c46f1bb4964d29d52aa85209d4eb73304be75bf7f667cff9ba3c43c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Security for strands-nicla 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.