Arduino Nano RP2040 Connect

Varoitus

Tätä korttia ei enää tueta. Viimeisin Arduino Nano RP2040 Connectille julkaistu OpenMV-laiteohjelmisto on 4.7.0. Tälle kohteelle ei enää julkaista laiteohjelmistopäivityksiä, virhekorjauksia tai uusia ominaisuuksia. Alla olevat tiedot on säilytetty käyttäjille, jotka käyttävät versiota 4.7.0 tai aiempaa.

Arduino Nano RP2040 Connect on 45 × 18 mm:n kokoinen Arduino-Nano-muotoinen kortti, joka perustuu Raspberry Pi RP2040 -piiriin — kaksiytiminen ARM Cortex‑M0+, joka toimii 133 MHz:n taajuudella ja jossa on 264 KB sisäistä SRAM-muistia. WiFi ja BLE tulevat U‑blox NINA‑W102 -moduulista, ja kortilla on LSM6DSOX 6‑akselinen IMU sekä MP34DT06 PDM -mikrofoni. OpenMV-laiteohjelmisto ohjaa kaikkia näitä MicroPythonista.

Arduino Nano RP2040 Connect

Täydellisen datalehden, kuvat ja mitat löydät Arduino Nano RP2040 Connect -tuotesivulta.

Kohokohdat

  • Raspberry Pi RP2040 kaksiytiminen ARM Cortex‑M0+ 133 MHz:n taajuudella ja 264 KB sisäistä SRAM-muistia.

  • 16 MB ulkoista QSPI flash-muistia.

  • U‑blox NINA‑W102 -moduuli tarjoaa 2,4 GHz Wi‑Fi b/g/n -yhteyden ja Bluetooth 4.2 (BR/EDR + LE).

  • LSM6DSOX 6‑akselinen IMU ja MP34DT06 PDM -mikrofoni.

  • Micro USB -liitin virransyöttöön, ohjelmointiin ja CDC REPL -yhteyteen.

  • 22 käyttäjän I/O-nastaa vakiomuotoisissa Nano-riveissä — TX/RX, D2D13 (digitaaliset), A0A7 (analogiset).

Nastakartta

Arduino Nano RP2040 Connect -nastakartta

Nastaviite

Nastan nimi

Viite

Toiminto

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

paina kortilla olevaa RESET-painiketta tai vedä GND:hen nollataksesi

REC

3,3 V

BOOTSEL — vedä korkealle käynnistyksen yhteydessä siirtyäksesi RP2040:n ROM-käynnistyslataimeen

LED_BUILTIN

Oranssi käyttäjän LED nastassa D13

LED_RED

RGB-LEDin punainen kanava

LED_GREEN

RGB-LEDin vihreä kanava

LED_BLUE

RGB-LEDin sininen kanava

Varoitus

Nano RP2040 Connectin I/O-nastat ovat vain 3,3 V — ne eivät kestä 5 V:n jännitettä. 5 V:n syöttäminen niihin vahingoittaa RP2040:tä.

Virtanastat

  • VIN — 4–20 V:n tulo. Syöttää virran kortille kortilla olevan hakkurisäätimen kautta. Syötetään myös diodin kautta USB:n 5 V:n linjalta, joten USB ja VIN voivat olla läsnä samanaikaisesti syöttämättä virtaa takaisin toisilleen.

  • +5V — oletuksena kytkemätön.

  • +3V3 — 3,3 V:n säätimen lähtö.

  • AREF — analoginen referenssinasta. Ei kytketty RP2040:een tällä kortilla — ADC viittaa aina 3,3 V:hen.

  • GND — yhteinen maa.

Nano RP2040 Connectille voidaan syöttää virta kummankin reitin kautta:

  • Micro USB — syöttää 5 V kortilla olevalle säätimelle.

  • VIN-nasta — syötä säädelty 4–20 V:n virtalähde.

Muista

Kortin pohjassa oleva juotossilta yhdistää +5V USB:n 5 V:n linjaan. Sulje se, jotta +5V-rivinasta tosiasiassa kuljettaa 5 V:n jännitettä.

Muista

Kortilla olevan 4–20 V:n hakkurisäätimen lähdössä oleva normaalisti suljettu juotossilta voidaan katkaista säätimen poistamiseksi käytöstä, jolloin kortille voidaan syöttää virta suoraan ulkoisesta 3,3 V:n lähteestä nastassa +3V3.

Palautus- ja virheenkorjausnastat

  • RESET — sekä paljaana oleva juotostäplä että hetkellinen RESET-painike kortin yläosassa, jotka on kytketty RP2040:n NRST-linjaan. Vedä GND:hen tai paina painiketta nollataksesi.

  • REC — paljaana oleva juotostäplä. REC:n pitäminen korkealla käynnistyksen yhteydessä (tai RESET-painiketta painettaessa) asettaa RP2040:n sen ROM-käynnistyslataimeen; kortti rekisteröityy uudelleen USB-massamuistilaitteena nimellä RPI-RP2 ja ottaa vastaan .uf2-laiteohjelmistokuvan.

Nano RP2040 Connect käyttää Arduinon vakiomuotoista kaksoisnapautusnollausta Arduinon käynnistyslataimeen siirtymiseen. Paina RESET-painiketta nopeasti kahdesti — kortti rekisteröityy uudelleen USB:n kautta UF2-laitteena ja OpenMV IDE voi flashata uuden laiteohjelmistokuvan.

RP2040:n SWD-signaalit ovat saatavilla pinnoitetuissa täplissä kortin takapuolella, juuri NINA-moduulin alapuolella. Kaikki virheenkorjaussignaalit viittaavat 3,3 V:hen.

Kortilla olevat oheislaitteet

LEDit

Nano RP2040 Connectissa on käyttäjän RGB-LED — jota ohjataan silkkipainettujen LED_RED-, LED_GREEN- ja LED_BLUE-kanavien kautta — sekä erillinen oranssi LED_BUILTIN nastassa D13. Kaikkia neljää voi ohjata ohjelmallisesti machine.LED -luokan kautta:

from machine import LED

LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
LED("LED_BUILTIN").on()

Erillinen vihreä virta-LED kortilla syttyy aina, kun +3,3 V:n linja on aktiivinen, eikä se ole käyttäjän ohjattavissa.

Kamerasensori

Nano RP2040 Connectin OpenMV-laiteohjelmisto tukee OmniVision OV7670 -rinnakkaista CMOS-sensoria. Kortilla ei ole sisäänrakennettua kuvasensoria — kytke OV7670-moduuli alla lueteltuihin silkkipainettuihin rivinastoihin ja ohjaa sitä csi — kennot -moduulin kautta:

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()

Muista

OV7670 vie 14 nastaa. Laiteohjelmisto kytkee ne seuraavasti:

Sensorin signaali

Nano RP2040 -nasta

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)

OV7670:n I²C-ohjausväylä jaetaan kortilla olevan IMU:n ja ATECC608A:n kanssa I²C 0 -väylällä. Sensori sijaitsee 7-bittisessä osoitteessa 0x21 — väylällä 0 olevien käyttäjälaitteiden on myös vältettävä tätä osoitetta, kun kamera on kytkettynä.

IMU

Kortilla oleva LSM6DSOX 6‑akselinen kiihtyvyysanturi + gyroskooppi sijaitsee väylällä I2C0. rp2-portin machine.I2C(0) käyttää oletuksena eri nastasarjaa, joten välitä silkkipainetut SDA/SCL-täplät eksplisiittisesti. Käytä kiinteää lsm6dsox.LSM6DSOX -ajuria:

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)

Mikrofoni

Kortilla oleva MP34DT06 PDM -mikrofoni luetaan audio — Audio-moduuli -moduulin kautta käyttäen yhtä RP2040:n PIO-lohkoista:

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

Kortilla oleva NINA‑W102 -moduuli on saatavilla network — verkkomääritykset -moduulin kautta asemarajapintana:

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

Sama NINA-moduuli tarjoaa myös Bluetooth 4.2 LE:n. Käytä aioble — Asynkroninen BLE -moduulia asyncio-ystävälliseen BLE:hen — esimerkiksi mainosta itseäsi oheislaitteena ja odota keskuslaitteen yhdistämistä:

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())

Väyläviite

GPIO

Käytä machine.Pin -luokkaa minkä tahansa silkkipainetun nastan lukemiseen tai ohjaamiseen. Lähdöt ovat 3,3 V CMOS, 50 mA yhteensä kaikkien GPIO-nastojen läpi.

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())

Mikä tahansa tulonasta voi myös laukaista keskeytyksen reunasiirtymillä:

def handler(pin):
    print("triggered:", pin)

Pin("D3", Pin.IN, Pin.PULL_UP).irq(
    handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)

UART

Väylä

TX

RX

UART0

TX

RX

Käytä silkkipainettuja nimiä TX/RX machine.UART -luokan kanssa:

from machine import UART

uart = UART(0, baudrate=115200)
uart.write("hello")
uart.read(5)

Muista

machine.UART(1) on olemassa, mutta se on varattu kortilla olevalle NINA‑W102 -moduulille (BLE-yhteys); älä käytä sitä suoraan.

I²C

Väylä

SDA

SCL

I2C0

SDA / A4

SCL / A5

I2C1

A0

A1

Molemmille väylille on välitettävä nastat eksplisiittisesti machine.I2C -luokalle:

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()

Muista

Kaksi kortilla olevaa piiriä jakaa väylän 0 — tällä väylällä olevien käyttäjälaitteiden on vältettävä niiden osoitteita:

  • 0x6A — LSM6DSOX IMU

  • 0x60 — ATECC608A‑MAHDA‑T

A0/A1:n käyttäminen I²C:nä varaa ne väylälle, joten ne eivät voi samanaikaisesti olla ADC-tuloja.

Muista

SDA / SCL -täplillä (väylä 0) on kortilla ylösvetovastukset 3,3 V:hen, joten ulkoisia ylösvetovastuksia ei tarvita kyseisen väylän laitteille. A0 / A1 (väylä 1) -täplillä ei ole — lisää ulkoiset ylösvetovastukset väylää 1 käytettäessä.

Samaa laitteistoa voidaan käyttää myös kohde- (orja-) tilassa machine.I2CTarget -luokan kautta muistialueen tarjoamiseksi toiselle I²C-ohjaimelle:

from machine import I2CTarget

buf = bytearray(32)
target = I2CTarget(0, addr=0x42, mem=buf)

SPI

Väylä

MOSI

MISO

SCK

CS

SPI0

D11

D12

D13

D10

rp2-portti ei esimäärittele SPI0:n nastoja tällä kortilla, joten välitä silkkipainetut täplät eksplisiittisesti väylää luotaessa:

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)

Muista

D13 toimii myös oranssina LED_BUILTIN-LEDinä — SPI:n käyttäminen tällä väylällä saa LEDin vilkkumaan väyläkellon tahdissa.

Muista

machine.SPI(1) on olemassa, mutta se on varattu kortilla olevalle NINA‑W102 -moduulille (Wi-Fi/BLE SPI -yhteys); älä käytä sitä suoraan.

ADC

RP2040:ssä on neljä 12-bittistä ADC-kanavaa nastoissa A0–A3, jotka kaikki viittaavat 3,3 V:henread_u16 palauttaa 0–65535 välillä 0–3,3 V nastassa. Kortin AREF-nastaa ei ole kytketty, joten referenssi on aina 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

Nasta

Lohko / kanava

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

Ohjaa mitä tahansa niistä machine.PWM -luokan kautta:

from machine import Pin, PWM

pwm = PWM(Pin("D3"), freq=1_000, duty_u16=32768)

Muista

Useat nastat jakavat PWM-lohkokanavia:

  • PWM0 A on nastoissa TX ja D4.

  • PWM0 B on nastoissa RX ja D5.

  • PWM2 A on nastoissa D8 ja D12.

  • PWM2 B on nastoissa D9 ja D10.

  • PWM6 A on nastoissa D16/A2 ja D18/A4/SDA.

  • PWM6 B on nastoissa D17/A3 ja D19/A5/SCL.

Valitse yksi kuluttaja lohkokanavaa kohden. Saman lohkon kanavat A ja B jakavat jaksonsa (taajuuden), mutta kummallakin on oma pulssisuhteensa.

Ohjelmallisesti bittiviritetyt väylät

machine.SoftI2C ja machine.SoftSPI toimivat millä tahansa GPIO:lla, jos tarvitset lisäväylän.

Lämpösensori (kortin ulkopuolella)

Laiteohjelmisto sisältää fir — lämpösensorin ajuri (fir == far infrared) -ajurin ulkoisesti kytketylle AMG8833 8×8 -lämpökuvaajalle. Kytke moduuli alla lueteltuun I²C-väylään ja lue sitten kehyksiä komennoilla 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())

fir-ajuri kommunikoi sensorin kanssa vain I²C 0 -väylän kautta — kytke moduuli silkkipainettuihin SCL / SDA -täpliin. Sensorin 7-bittistä osoitetta (0x69) ei saa käyttää mikään muu laite kyseisellä väylällä.

Ajoitus

time

time -moduuli kattaa estävät viiveet, monotoniset tikit ja kuluneen ajan mittauksen:

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)

Virtuaaliajastimet

machine.Timer ajastaa jaksottaisia tai kertaluonteisia takaisinkutsuja kuluttamatta laitteistoajastinpaikkaa. Välitä -1 id:nä käyttääksesi virtuaalista (ohjelmallista) ajastinta:

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"))

Jaksoarvot ovat millisekunteina. Kutsu deinit() pysäyttääksesi ja vapauttaaksesi paikan.

Reaaliaikakello

machine.RTC säilyttää seinäkelloajan nollausten yli. RP2040:n RTC on kytketty piirin sisäiseen oskillaattoriin eikä se säily täydellisen virtakatkoksen yli — aseta aika jokaisella kylmäkäynnistyksellä, jos sillä on merkitystä sovelluksellesi:

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())

Vahtikoira

machine.WDT nollaa kortin, jos sovellus jumiutuu. Kerran käynnistettynä sitä ei voi pysäyttää tai määrittää uudelleen — syötä sitä jaksottaisesti pääsilmukassasi:

from machine import WDT

wdt = WDT(timeout=5_000)   # 5 second window
while True:
    # ...do work...
    wdt.feed()

Käynnistys- ja ajonaikaiset tiedot

Laiteohjelmiston päivitys (UF2)

Nano RP2040 Connect käyttää Arduinon vakiomuotoista kaksoisnapautusnollausta Arduinon käynnistyslataimeen siirtymiseen. Paina nollauspainiketta nopeasti kahdesti — kortti rekisteröityy uudelleen USB:n kautta UF2-laitteena ja OpenMV IDE voi flashata uuden laiteohjelmistokuvan.

Käynnissä oleva skripti voi siirtyä uudelleen käynnistyslataimeen pyydettäessä kutsumalla machine.bootloader()

import machine

machine.bootloader()

Tiedostojärjestelmä ja käynnistysjärjestys

Nano RP2040 Connect -laiteohjelmisto liittää käynnistyksen yhteydessä yhden tiedostojärjestelmän:

  • Sisäinen flash-muisti — liitetään aina sijaintiin /flash ja käytetään työhakemistona. Sisältää oletuksena tiedostot main.py ja README.txt; luodaan aivan ensimmäisellä käynnistyksellä.

Liittämisen jälkeen tulkki suorittaa skriptit sijainnista /flash:

  • boot.py suoritetaan jokaisella pehmeällä nollauksella.

  • main.py suoritetaan vain kylmäkäynnistyksellä, heti tiedoston boot.py jälkeen.

Vasta flashatulle kortille toimitettu oletustiedosto main.py vain vilkuttaa käyttäjän RGB-LEDin sinistä kanavaa sykkeenä (kaksi lyhyttä pulssia, lyhyt tauko), jotta voit nähdä laiteohjelmiston käynnistyneen puhtaasti ilman liitettyä isäntäkonetta.

USB:n kautta yhdistettäessä /flash rekisteröityy USB-massamuistilaitteena isäntäkoneella, jolloin voit muokata tiedostoja boot.py, main.py ja muita tiedostoja suoraan. Poista asema turvallisesti ennen kortin nollaamista, jotta isäntäkone tyhjentää välimuistissa olevat kirjoitukset.

Muista

Koska käyttöjärjestelmä käsittelee asemaa passiivisena lohkolaitteena, kameralla suoritettavan koodin luomat tai muokkaamat tiedostot eivät näy, ennen kuin isäntäkone liittää aseman uudelleen. Jos sekä käyttöjärjestelmä että kamera kirjoittavat samaan tiedostojärjestelmään samanaikaisesti, käyttöjärjestelmä voittaa ja ylikirjoittaa kameran tekemät muutokset. Käytä SD-korttia kaikkeen dataan, jonka skripti kirjoittaa takaisin, ja liitä uudelleen ennen kuin luet kyseisiä tiedostoja isäntäkoneelta.

Muista

Käyttäjän RGB-LEDin punainen kanava saattaa syttyä hetkellisesti, kun isäntäkone lukee USB-massamuistilaitteelta tai kirjoittaa sille — tämä on laiteohjelmiston ohjaama toiminnan ilmaisin, ei vika.

Tallennustilan koot

Nano RP2040 Connect toimitetaan seuraavasti:

  • /flash14 MB FAT-tiedostojärjestelmä, luku/kirjoitus.

Nano RP2040 -käännös ei sisällä ROMFS:ää; toimita Python-moduulit ja ML-mallit suoraan sijaintiin /flash.

Ohjelmistokirjastot

Katso kirjastohakemisto saadaksesi täydellisen listan moduuleista — mukaan lukien ne, jotka ovat ainutlaatuisia Nano RP2040 Connect -käännökselle.