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.
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,D2–D13(digitaaliset),A0–A7(analogiset).
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 |
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
VINvoivat 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-RP2ja 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 |
|
D1 |
|
D2 |
|
D3 |
|
D4 |
|
D5 |
|
D6 |
|
D7 |
|
HSYNC |
|
VSYNC |
|
PXCLK |
|
MXCLK |
|
POWER |
|
RESET |
|
SCL |
|
SDA |
|
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 |
|
|
I2C1 |
|
|
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 IMU0x60— 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:hen — read_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
TXjaD4.PWM0 B on nastoissa
RXjaD5.PWM2 A on nastoissa
D8jaD12.PWM2 B on nastoissa
D9jaD10.PWM6 A on nastoissa
D16/A2jaD18/A4/SDA.PWM6 B on nastoissa
D17/A3jaD19/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
/flashja käytetään työhakemistona. Sisältää oletuksena tiedostotmain.pyjaREADME.txt; luodaan aivan ensimmäisellä käynnistyksellä.
Liittämisen jälkeen tulkki suorittaa skriptit sijainnista /flash:
boot.pysuoritetaan jokaisella pehmeällä nollauksella.main.pysuoritetaan vain kylmäkäynnistyksellä, heti tiedostonboot.pyjä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:
/flash— 14 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.