Skip to main content

🌀 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/put time 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, detect person, faces FOMO, 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 or battery=true LiPo 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-firstsnapshot returns 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

strands_nicla-0.1.0.tar.gz (42.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

strands_nicla-0.1.0-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

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

Hashes for strands_nicla-0.1.0.tar.gz
Algorithm Hash digest
SHA256 925dc4116c5f997e8d36d5d02d495fe72df8a749274d2d7b207d8b2225922119
MD5 5bfc43217b42b0227aec73382b504153
BLAKE2b-256 8d0e8b7d810268a7773f3d4f33eebdfba6d22ddcf1a8aba55c6076e0e956bc9a

See more details on using hashes here.

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

Hashes for strands_nicla-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9cad3bcc2302b83f6b1fd8ca8ffdf34176087a1889f5955f9d51e45f5341e00a
MD5 b5d2eb68ddaa94a5db12fb1ce75d4c19
BLAKE2b-256 1eb439728c46f1bb4964d29d52aa85209d4eb73304be75bf7f667cff9ba3c43c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page