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.

Arduino Nano RP2040 Connect

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, D2D13 (digitální), A0A7 (analogové).

Rozložení pinů

Rozložení pinů Arduino Nano RP2040 Connect

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 D13

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 Vnejsou 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 VIN mohou 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í REC na 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ázvem RPI-RP2 a 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

D3

D1

D4

D2

D5

D3

D6

D4

D7

D5

D8

D6

D9

D7

D2

HSYNC

A1

VSYNC

A0

PXCLK

A3

MXCLK

A2

POWER

TX

RESET

RX

SCL

SDA (I²C 0)

SDA

SCL (I²C 0)

Ří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

SDA / A4

SCL / A5

I2C1

A0

A1

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 LSM6DSOX

  • 0x60 — 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 Vread_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 TX a D4.

  • PWM0 B je na RX a D5.

  • PWM2 A je na D8 a D12.

  • PWM2 B je na D9 a D10.

  • PWM6 A je na D16/A2 a D18/A4/SDA.

  • PWM6 B je na D17/A3 a D19/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 /flash a používána jako pracovní adresář. Ve výchozím stavu obsahuje main.py a README.txt; vytvořena při úplně prvním bootu.

Po připojení interpret poté spustí skripty z /flash:

  • boot.py se spustí při každém měkkém resetu.

  • main.py se spustí pouze při studeném startu, ihned po boot.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:

  • /flash14 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.