Arduino Nano RP2040 Connect¶
Varování
Tato deska již není podporována. Posledním vydáním firmwaru OpenMV pro Arduino Nano RP2040 Connect je verze 4.7.0. Pro tento cíl nebudou vydávány žádné další aktualizace firmwaru, opravy chyb ani nové funkce. Níže uvedené informace jsou zachovány pro uživatele používající verzi 4.7.0 nebo starší.
Arduino Nano RP2040 Connect je deska o rozměrech 45 × 18 mm ve formátu Arduino Nano, postavená kolem čipu Raspberry Pi RP2040 — dvoujádrového ARM Cortex‑M0+ běžícího na 133 MHz s 264 KB interní SRAM. WiFi a BLE zajišťuje modul U‑blox NINA‑W102 a deska nese 6osou IMU LSM6DSOX a PDM mikrofon MP34DT06. Firmware OpenMV řídí všechny tyto komponenty z MicroPythonu.
Kompletní datasheet, fotografie a rozměry najdete na produktové stránce Arduino Nano RP2040 Connect.
Hlavní vlastnosti¶
Raspberry Pi RP2040 dvoujádrový ARM Cortex‑M0+ na 133 MHz s 264 KB interní SRAM.
16 MB externí QSPI flash paměti.
Modul U‑blox NINA‑W102 poskytující 2,4 GHz Wi‑Fi b/g/n a Bluetooth 4.2 (BR/EDR + LE).
6osá IMU LSM6DSOX a PDM mikrofon MP34DT06.
Konektor Micro USB pro napájení, programování a CDC REPL.
22 uživatelských I/O pinů na standardních konektorech Nano —
TX/RX,D2–D13(digitální),A0–A7(analogové).
Rozložení pinů¶
Referenční přehled pinů¶
Název pinu |
Reference |
Funkce |
|---|---|---|
TX |
3,3 V |
UART0 TX / SPI0 RX / I2C0 SDA / PWM0 A |
RX |
3,3 V |
UART0 RX / SPI0 CS / I2C0 SCL / PWM0 B |
D2 |
3,3 V |
SPI1 CS / UART1 RX / I2C0 SCL / PWM4 B |
D3 |
3,3 V |
SPI1 TX / UART0 RTS / I2C1 SCL / PWM7 B |
D4 |
3,3 V |
SPI0 RX / UART0 TX / I2C0 SDA / PWM0 A |
D5 |
3,3 V |
SPI0 CS / UART0 RX / I2C0 SCL / PWM0 B |
D6 |
3,3 V |
SPI0 SCK / UART0 CTS / I2C1 SDA / PWM1 A |
D7 |
3,3 V |
SPI0 TX / UART0 RTS / I2C1 SCL / PWM1 B |
D8 |
3,3 V |
SPI0 RX / UART1 TX / I2C0 SDA / PWM2 A |
D9 |
3,3 V |
SPI0 CS / UART1 RX / I2C0 SCL / PWM2 B |
D10 |
3,3 V |
SPI0 CS / UART1 RX / I2C0 SCL / PWM2 B |
D11 |
3,3 V |
SPI0 TX / UART1 RTS / I2C1 SCL / PWM3 B |
D12 |
3,3 V |
SPI0 RX / UART1 TX / I2C0 SDA / PWM2 A |
D13 |
3,3 V |
SPI0 SCK / UART1 CTS / I2C1 SDA / PWM3 A |
D14 / A0 |
3,3 V |
ADC / SPI1 SCK / UART1 CTS / I2C1 SDA / PWM5 A |
D15 / A1 |
3,3 V |
ADC / SPI1 TX / UART1 RTS / I2C1 SCL / PWM5 B |
D16 / A2 |
3,3 V |
ADC / SPI1 RX / UART0 TX / I2C0 SDA / PWM6 A |
D17 / A3 |
3,3 V |
ADC / SPI1 CS / UART0 RX / I2C0 SCL / PWM6 B |
D18 / A4 / SDA |
3,3 V |
ADC / I2C0 SDA / SPI1 RX / UART0 TX / PWM6 A |
D19 / A5 / SCL |
3,3 V |
ADC / I2C0 SCL / SPI1 CS / UART0 RX / PWM6 B |
D20 / A6 |
3,3 V |
ADC / GPIO |
D21 / A7 |
3,3 V |
ADC / GPIO |
RESET |
3,3 V |
stiskněte tlačítko RESET na desce nebo stáhněte na GND pro reset |
REC |
3,3 V |
BOOTSEL — stáhněte na vysokou úroveň při zapnutí pro vstup do ROM bootloaderu RP2040 |
LED_BUILTIN |
— |
Oranžová uživatelská LED na |
LED_RED |
— |
červený kanál RGB LED |
LED_GREEN |
— |
zelený kanál RGB LED |
LED_BLUE |
— |
modrý kanál RGB LED |
Varování
I/O piny desky Nano RP2040 Connect jsou pouze 3,3 V — nejsou tolerantní vůči 5 V. Přivedení 5 V na ně RP2040 poškodí.
Napájecí piny¶
VIN — vstup 4 – 20 V. Napájí desku přes spínaný regulátor na desce. Je také napájen přes diodu z 5V větve USB, takže USB a
VINmohou být přítomny současně, aniž by se vzájemně zpětně napájely.+5V — ve výchozím stavu nezapojeno.
+3V3 — výstup 3,3 V regulátoru.
AREF — pin analogové reference. Na této desce není připojen k RP2040 — ADC je vždy vztažen ke 3,3 V.
GND — společná zem.
Desku Nano RP2040 Connect lze napájet kteroukoli z cest:
Micro USB — dodává 5 V do regulátoru na desce.
Pin VIN — přiveďte regulovaný zdroj 4 – 20 V.
Poznámka
Pájecí propojka na spodní straně desky propojuje +5V s 5V větví USB. Uzavřete ji, aby pin konektoru +5V skutečně vedl 5 V.
Poznámka
Normálně sepnutou pájecí propojku na výstupu spínaného regulátoru 4–20 V na desce lze přerušit pro vypnutí regulátoru, takže lze desku napájet přímo z externího zdroje 3,3 V na +3V3.
Piny pro obnovu a ladění¶
RESET — jak vyvedená ploška, tak momentové tlačítko RESET na horní straně desky, připojené k lince NRST čipu RP2040. Stáhněte na GND nebo stiskněte tlačítko pro reset.
REC — vyvedená ploška. Podržení
RECna vysoké úrovni při zapnutí (nebo při stisku RESET) uvede RP2040 do jeho ROM bootloaderu; deska se znovu vyčíslí jako USB úložiště s názvemRPI-RP2a přijme firmware obraz.uf2.
Nano RP2040 Connect používá standardní dvojitý stisk reset od Arduina pro vstup do bootloaderu Arduino. Rychle dvakrát stiskněte tlačítko RESET — deska se znovu vyčíslí přes USB jako zařízení UF2 a OpenMV IDE může nahrát nový firmware obraz.
SWD signály čipu RP2040 jsou vyvedeny na pokovené plošky na zadní straně desky, hned pod modulem NINA. Všechny ladicí signály jsou vztaženy ke 3,3 V.
Periferie na desce¶
LED diody¶
Nano RP2040 Connect má uživatelskou RGB LED — řízenou přes potiskem označené kanály LED_RED, LED_GREEN a LED_BLUE — a samostatnou oranžovou LED_BUILTIN na D13. Všechny čtyři jsou softwarově ovladatelné přes machine.LED
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
LED("LED_BUILTIN").on()
Samostatná zelená LED napájení na desce se rozsvítí, kdykoli je +3,3 V větev v provozu, a není uživatelsky ovladatelná.
Senzor kamery¶
Firmware OpenMV na desce Nano RP2040 Connect podporuje paralelní CMOS senzor OmniVision OV7670. Deska nemá žádný senzor obrazu na desce — připojte modul OV7670 k potiskem označeným pinům konektoru uvedeným níže a řiďte jej přes modul csi — kamerové senzory
import csi
cam = csi.CSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
cam.snapshot(time=2000) # let auto‑exposure settle
while True:
img = cam.snapshot()
Poznámka
OV7670 zabírá 14 pinů. Firmware je zapojuje následovně:
Signál senzoru |
Pin Nano RP2040 |
|---|---|
D0 |
|
D1 |
|
D2 |
|
D3 |
|
D4 |
|
D5 |
|
D6 |
|
D7 |
|
HSYNC |
|
VSYNC |
|
PXCLK |
|
MXCLK |
|
POWER |
|
RESET |
|
SCL |
|
SDA |
|
Řídicí I²C sběrnice OV7670 je sdílena s IMU a ATECC608A na desce na I²C 0. Senzor sídlí na 7bitové adrese 0x21 — uživatelská zařízení na sběrnici 0 se této adrese musí rovněž vyhnout, když je kamera zapojena.
IMU¶
6osý akcelerometr + gyroskop LSM6DSOX na desce sídlí na I2C0. machine.I2C(0) portu rp2 ve výchozím stavu používá jinou sadu pinů, takže předejte potiskem označené plošky SDA/SCL explicitně. Použijte zabudovaný ovladač lsm6dsox.LSM6DSOX
import time
from machine import I2C, Pin
from lsm6dsox import LSM6DSOX
bus = I2C(0, scl=Pin("SCL"), sda=Pin("SDA"))
imu = LSM6DSOX(bus)
while True:
print(imu.accel()) # (x, y, z) in g
print(imu.gyro()) # (x, y, z) in deg/s
time.sleep_ms(100)
Mikrofon¶
PDM mikrofon MP34DT06 na desce je snímán přes audio — Modul Audio pomocí jednoho z PIO bloků RP2040:
import audio
from ulab import numpy as np
def loudness(pcmbuf):
samples = np.array(np.frombuffer(pcmbuf, dtype=np.int16), dtype=np.float)
rms = np.sqrt(np.mean(samples ** 2))
if rms > 10000:
print("Loud!", int(rms))
audio.init(channels=1, frequency=16000, gain_db=24)
audio.start_streaming(loudness)
while True:
pass
Wi‑Fi¶
Modul NINA‑W102 na desce je vystaven přes network — konfigurace sítě jako rozhraní stanice:
import network, time
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
while not wlan.isconnected():
time.sleep(1)
print("Wi‑Fi IP:", wlan.ipconfig("addr4")[0])
Bluetooth¶
Stejný modul NINA také vystavuje Bluetooth 4.2 LE. Použijte aioble — Asynchronní BLE pro BLE přívětivé k asyncio — například inzerujte jako periferie a počkejte na připojení centrály:
import asyncio
import aioble
async def run():
while True:
conn = await aioble.advertise(250_000, name="Nano-RP2040")
print("Connected:", conn.device)
await conn.disconnected()
asyncio.run(run())
Referenční přehled sběrnic¶
GPIO¶
Použijte machine.Pin ke čtení nebo řízení kteréhokoli z potiskem označených pinů. Výstupy jsou 3,3 V CMOS, celkem 50 mA na všech GPIO.
from machine import Pin
out = Pin("D2", Pin.OUT)
out.on()
out.off()
out.value(1)
inp = Pin("D3", Pin.IN, Pin.PULL_UP)
print(inp.value())
Kterýkoli vstupní pin může také vyvolat přerušení při hranových přechodech:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Sběrnice |
TX |
RX |
|---|---|---|
UART0 |
TX |
RX |
Použijte potiskem označené názvy TX/RX s machine.UART
from machine import UART
uart = UART(0, baudrate=115200)
uart.write("hello")
uart.read(5)
Poznámka
machine.UART(1) existuje, ale je vyhrazen pro modul NINA‑W102 na desce (linka BLE); nepoužívejte jej přímo.
I²C¶
Sběrnice |
SDA |
SCL |
|---|---|---|
I2C0 |
|
|
I2C1 |
|
|
Oběma sběrnicím je třeba předat jejich piny explicitně do machine.I2C
from machine import I2C, Pin
bus0 = I2C(0, scl=Pin("SCL"), sda=Pin("SDA"), freq=400_000)
bus0.scan()
bus1 = I2C(1, scl=Pin("A1"), sda=Pin("A0"), freq=400_000)
bus1.scan()
Poznámka
Dva čipy na desce sdílejí sběrnici 0 — uživatelská zařízení na této sběrnici se musí vyhnout jejich adresám:
0x6A— IMU LSM6DSOX0x60— ATECC608A‑MAHDA‑T
Použití A0/A1 jako I²C je obsadí pro sběrnici, takže nemohou současně sloužit jako vstupy ADC.
Poznámka
Plošky SDA / SCL (sběrnice 0) mají na desce pull-up rezistory na 3,3 V, takže pro zařízení na této sběrnici nejsou potřeba žádné externí pull-upy. A0 / A1 (sběrnice 1) je nemají — při použití sběrnice 1 přidejte externí pull-upy.
Stejný hardware lze také použít v cílovém režimu (slave) přes machine.I2CTarget k vystavení paměťové oblasti jinému I²C kontroléru:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(0, addr=0x42, mem=buf)
SPI¶
Sběrnice |
MOSI |
MISO |
SCK |
CS |
|---|---|---|---|---|
SPI0 |
D11 |
D12 |
D13 |
D10 |
Port rp2 na této desce piny SPI0 předem nekonfiguruje, takže při vytváření sběrnice předejte potiskem označené plošky explicitně:
from machine import SPI, Pin
spi = SPI(0, baudrate=10_000_000,
sck=Pin("D13"), mosi=Pin("D11"), miso=Pin("D12"))
cs = Pin("D10", Pin.OUT, value=1) # CS is not driven by the SPI peripheral
cs.value(0)
spi.write(b"hello")
cs.value(1)
Poznámka
D13 slouží zároveň jako oranžová LED_BUILTIN — řízení SPI na této sběrnici bude blikat LED v rytmu hodin sběrnice.
Poznámka
machine.SPI(1) existuje, ale je vyhrazen pro modul NINA‑W102 na desce (SPI linka Wi-Fi/BLE); nepoužívejte jej přímo.
ADC¶
RP2040 má čtyři 12bitové ADC kanály vyvedené na A0–A3, všechny vztažené ke 3,3 V — read_u16 vrací 0–65535 v rozsahu 0–3,3 V na pinu. Pin AREF desky není zapojen, takže reference je vždy 3,3 V:
from machine import ADC
import time
adc = ADC("A0")
while True:
voltage = adc.read_u16() * 3.3 / 65535
print(voltage)
time.sleep_ms(100)
PWM¶
Pin |
Řez / kanál |
|---|---|
TX |
PWM0 A |
RX |
PWM0 B |
D2 |
PWM4 B |
D3 |
PWM7 B |
D4 |
PWM0 A |
D5 |
PWM0 B |
D6 |
PWM1 A |
D7 |
PWM1 B |
D8 |
PWM2 A |
D9 |
PWM2 B |
D10 |
PWM2 B |
D11 |
PWM3 B |
D12 |
PWM2 A |
D13 |
PWM3 A |
D14 / A0 |
PWM5 A |
D15 / A1 |
PWM5 B |
D16 / A2 |
PWM6 A |
D17 / A3 |
PWM6 B |
D18 / A4 / SDA |
PWM6 A |
D19 / A5 / SCL |
PWM6 B |
Řiďte kterýkoli z nich přes machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("D3"), freq=1_000, duty_u16=32768)
Poznámka
Několik pinů sdílí kanály řezů PWM:
PWM0 A je na
TXaD4.PWM0 B je na
RXaD5.PWM2 A je na
D8aD12.PWM2 B je na
D9aD10.PWM6 A je na
D16/A2aD18/A4/SDA.PWM6 B je na
D17/A3aD19/A5/SCL.
Pro každý kanál řezu vyberte jednoho spotřebitele. Kanály A a B uvnitř stejného řezu sdílejí svou periodu (frekvenci), ale každý má vlastní střídu.
Softwarově bit-bangované sběrnice¶
machine.SoftI2C a machine.SoftSPI fungují na kterémkoli GPIO, pokud potřebujete další sběrnici.
Termální senzor (mimo desku)¶
Firmware zahrnuje ovladač fir — ovladač termálního senzoru (fir == far infrared, vzdálené infračervené záření) pro externě zapojený termální zobrazovač AMG8833 8×8. Připojte modul k I²C sběrnici uvedené níže a poté čtěte snímky pomocí fir.init() + fir.snapshot()
import time
import image
import fir
fir.init() # auto‑detects the sensor
clock = time.clock()
while True:
clock.tick()
try:
img = fir.snapshot(x_scale=5, y_scale=5,
color_palette=image.PALETTE_IRONBOW,
hint=image.BICUBIC,
copy_to_fb=True)
except OSError:
continue
print(clock.fps())
Ovladač fir komunikuje se senzorem pouze přes I²C 0 — připojte modul k potiskem označeným ploškám SCL / SDA. 7bitová adresa senzoru (0x69) nesmí být použita žádným jiným zařízením na této sběrnici.
Časování¶
time¶
Modul time pokrývá blokující prodlevy, monotónní tiky a měření uplynulého času:
import time
time.sleep(1) # seconds
time.sleep_ms(500)
time.sleep_us(10)
start = time.ticks_ms()
# ...do work...
elapsed = time.ticks_diff(time.ticks_ms(), start)
Virtuální časovače¶
machine.Timer plánuje periodické nebo jednorázové callbacky bez obsazení slotu hardwarového časovače. Předejte -1 jako id pro použití virtuálního (softwarového) časovače:
from machine import Timer
one_shot = Timer(-1)
one_shot.init(period=5_000, mode=Timer.ONE_SHOT,
callback=lambda t: print("once"))
periodic = Timer(-1)
periodic.init(period=2_000, mode=Timer.PERIODIC,
callback=lambda t: print("tick"))
Hodnoty periody jsou v milisekundách. Zavolejte deinit() pro zastavení a uvolnění slotu.
Hodiny reálného času¶
machine.RTC udržuje reálný čas napříč resety. RTC čipu RP2040 je vázán na oscilátor na čipu a nepřežije úplnou ztrátu napájení — pokud je to pro vaši aplikaci důležité, nastavte čas při každém studeném startu:
from machine import RTC
rtc = RTC()
rtc.datetime((2026, 4, 30, 4, 12, 0, 0, 0)) # Y, M, D, weekday, h, m, s, subsec
print(rtc.datetime())
Watchdog¶
machine.WDT resetuje desku, pokud se aplikace zasekne. Po spuštění jej nelze zastavit ani překonfigurovat — pravidelně jej krmte uvnitř své hlavní smyčky:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Informace o bootu a běhu¶
Aktualizace firmwaru (UF2)¶
Nano RP2040 Connect používá standardní dvojitý stisk reset od Arduina pro vstup do bootloaderu Arduino. Rychle dvakrát stiskněte tlačítko reset — deska se znovu vyčíslí přes USB jako zařízení UF2 a OpenMV IDE může nahrát nový firmware obraz.
Běžící skript může na vyžádání znovu vstoupit do bootloaderu zavoláním machine.bootloader()
import machine
machine.bootloader()
Souborový systém a pořadí bootu¶
Firmware desky Nano RP2040 Connect připojuje při bootu jeden souborový systém:
Interní flash — vždy připojena na
/flasha používána jako pracovní adresář. Ve výchozím stavu obsahujemain.pyaREADME.txt; vytvořena při úplně prvním bootu.
Po připojení interpret poté spustí skripty z /flash:
boot.pyse spustí při každém měkkém resetu.main.pyse spustí pouze při studeném startu, ihned poboot.py.
Výchozí main.py dodávaný na čerstvě naflashované desce pouze bliká modrým kanálem uživatelské RGB LED jako tep (dva krátké pulzy, krátká pauza), takže poznáte, že se firmware úspěšně spustil bez připojeného hostitele.
Při připojení přes USB se /flash na hostiteli vyčíslí jako USB úložiště, což vám umožní přímo upravovat boot.py, main.py a jakékoli další soubory. Před resetem desky disk vysuňte, aby hostitel vyprázdnil své uložené zápisy do mezipaměti.
Poznámka
Protože OS považuje disk za pasivní blokové zařízení, soubory vytvořené nebo upravené kódem běžícím na kameře se neobjeví, dokud hostitel disk znovu nepřipojí. Pokud OS i kamera zapisují do stejného souborového systému současně, OS vyhraje a přepíše změny provedené kamerou. Pro jakákoli data, která skript zapisuje zpět, použijte SD kartu a před čtením těchto souborů z hostitele disk znovu připojte.
Poznámka
Červený kanál uživatelské RGB LED se může krátce rozsvítit, když hostitel čte z USB úložiště nebo na něj zapisuje — jde o indikátor aktivity řízený firmwarem, nikoli o chybu.
Velikosti úložiště¶
Nano RP2040 Connect se dodává s:
/flash— 14 MB FAT souborový systém, čtení/zápis.
Build Nano RP2040 nezahrnuje ROMFS; Python moduly a ML modely dodávejte přímo na /flash.
Softwarové knihovny¶
Kompletní seznam modulů — včetně toho, které jsou jedinečné pro build Nano RP2040 Connect — najdete v indexu knihoven.