Arduino Nano RP2040 Connect¶
警告
本開發板已不再受支援。 Arduino Nano RP2040 Connect 的最後一個 OpenMV 韌體版本為 4.7.0。本目標裝置將不再發布任何韌體更新、錯誤修正或新功能。以下資訊保留供仍執行 4.7.0 或更早版本的使用者參考。
Arduino Nano RP2040 Connect 是一塊採用 Arduino Nano 外形規格、尺寸為 45 × 18 mm 的開發板,核心為 Raspberry Pi RP2040——一顆運行於 133 MHz 的雙核心 ARM Cortex‑M0+,內含 264 KB 內部 SRAM。WiFi 與 BLE 由 U‑blox NINA‑W102 模組提供,板上還搭載一顆 LSM6DSOX 6 軸 IMU 與一顆 MP34DT06 PDM 麥克風。OpenMV 韌體透過 MicroPython 驅動以上所有元件。
完整的資料手冊、照片與尺寸資訊請參閱 Arduino Nano RP2040 Connect 產品頁面。
重點特色¶
Raspberry Pi RP2040 雙核心 ARM Cortex‑M0+,運行於 133 MHz,內含 264 KB 內部 SRAM。
16 MB 外部 QSPI 快閃記憶體。
U‑blox NINA‑W102 模組,提供 2.4 GHz Wi‑Fi b/g/n 與 Bluetooth 4.2(BR/EDR + LE)。
LSM6DSOX 6 軸 IMU 與 MP34DT06 PDM 麥克風。
Micro USB 連接器,用於供電、燒錄程式以及 CDC REPL。
標準 Nano 排針上的 22 個使用者 I/O 接腳——
TX/RX、D2–D13(數位)、A0–A7(類比)。
接腳配置¶
接腳參考¶
接腳名稱 |
參考 |
功能 |
|---|---|---|
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 |
按下板上的 RESET 按鈕或拉至 GND 以重置 |
REC |
3.3 V |
BOOTSEL——在上電時拉高以進入 RP2040 ROM 開機載入程式 |
LED_BUILTIN |
— |
位於 |
LED_RED |
— |
RGB LED 紅色通道 |
LED_GREEN |
— |
RGB LED 綠色通道 |
LED_BLUE |
— |
RGB LED 藍色通道 |
警告
Nano RP2040 Connect 的 I/O 接腳僅支援 3.3 V——它們不耐受 5 V。將 5 V 灌入這些接腳將會損壞 RP2040。
電源接腳¶
VIN——4 – 20 V 輸入。透過板上的切換式穩壓器為開發板供電。同時也經由二極體從 USB 5 V 電源軌取電,因此 USB 與
VIN可同時存在而不會互相反灌電。+5V——預設未連接。
+3V3——3.3 V 穩壓器輸出。
AREF——類比參考接腳。在本開發板上未接至 RP2040——ADC 始終以 3.3 V 為參考。
GND——共同接地。
Nano RP2040 Connect 可透過下列任一路徑供電:
Micro USB——向板上穩壓器提供 5 V。
VIN 接腳——輸入經穩壓的 4 – 20 V 電源。
備註
板子底部有一個焊接跳線將 +5V 橋接至 USB 5 V 電源軌。將其閉合後 +5V 排針接腳才會實際輸出 5 V。
備註
板上 4–20 V 切換式穩壓器輸出端有一個常閉焊接跳線,可將其切斷以停用穩壓器,如此即可從 +3V3 上的外部 3.3 V 電源直接為開發板供電。
復原與除錯接腳¶
RESET——板子上方同時有一個外露焊盤與一個瞬時 RESET 按鈕,連接至 RP2040 的 NRST 線。拉至 GND 或按下按鈕即可重置。
REC——外露焊盤。在上電時(或按下 RESET 時)將
REC保持拉高,會使 RP2040 進入其 ROM 開機載入程式;開發板會重新列舉為一個名為RPI-RP2的 USB 大量儲存裝置,並接受.uf2韌體映像檔。
Nano RP2040 Connect 使用 Arduino 標準的雙擊重置來進入 Arduino 的開機載入程式。快速按下 RESET 按鈕兩次——開發板會透過 USB 重新列舉為 UF2 裝置,OpenMV IDE 即可燒錄新的韌體映像檔。
RP2040 的 SWD 訊號外露於板子背面的鍍金焊盤上,就在 NINA 模組下方。所有除錯訊號均以 3.3 V 為參考。
板載周邊裝置¶
LED¶
Nano RP2040 Connect 具有一顆使用者 RGB LED——透過絲印標示的 LED_RED、LED_GREEN 與 LED_BLUE 通道驅動——外加位於 D13 上一顆獨立的橙色 LED_BUILTIN。這四者皆可透過 machine.LED 以軟體控制:
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
LED("LED_BUILTIN").on()
板上另有一顆獨立的綠色電源 LED,只要 +3.3 V 電源軌啟動就會亮起,且無法由使用者控制。
相機感測器¶
Nano RP2040 Connect 上的 OpenMV 韌體支援 OmniVision OV7670 並列式 CMOS 感測器。本開發板沒有板載影像感測器——請將一個 OV7670 模組接至以下列出的絲印標示排針,並透過 csi --- 相機感測器 模組來驅動它:
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()
備註
OV7670 需要 14 個接腳。韌體的接線方式如下:
感測器訊號 |
Nano RP2040 接腳 |
|---|---|
D0 |
|
D1 |
|
D2 |
|
D3 |
|
D4 |
|
D5 |
|
D6 |
|
D7 |
|
HSYNC |
|
VSYNC |
|
PXCLK |
|
MXCLK |
|
POWER |
|
RESET |
|
SCL |
|
SDA |
|
OV7670 的 I²C 控制匯流排與板上的 IMU 及 ATECC608A 共用 I²C 0。該感測器位於 7 位元位址 0x21——接上相機時,匯流排 0 上的使用者裝置也必須避開此位址。
IMU¶
板上的 LSM6DSOX 6 軸加速度計 + 陀螺儀位於 I2C0 上。rp2 連接埠的 machine.I2C(0) 預設使用一組不同的接腳,因此請明確傳入絲印標示的 SDA/SCL 焊盤。請使用內建的 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)
麥克風¶
板上的 MP34DT06 PDM 麥克風透過 audio --- 音訊模組 使用 RP2040 的其中一個 PIO 區塊來擷取:
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¶
板上的 NINA‑W102 模組透過 network --- 網路設定 以基地台(station)介面形式公開:
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¶
同一個 NINA 模組也公開了 Bluetooth 4.2 LE。請使用 aioble --- 非同步 BLE 以取得適合 asyncio 的 BLE——例如,作為周邊裝置進行廣播並等待中央裝置連線:
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())
匯流排參考¶
GPIO¶
使用 machine.Pin 來讀取或驅動任一絲印標示的接腳。輸出為 3.3 V CMOS,所有 GPIO 合計的最大灌電流為 50 mA。
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())
任一輸入接腳也可在邊緣轉換時觸發中斷:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
匯流排 |
TX |
RX |
|---|---|---|
UART0 |
TX |
RX |
使用絲印名稱 TX/RX 搭配 machine.UART:
from machine import UART
uart = UART(0, baudrate=115200)
uart.write("hello")
uart.read(5)
備註
machine.UART(1) 雖然存在,但保留給板上的 NINA‑W102 模組(BLE 連線)使用;請勿直接使用它。
I²C¶
匯流排 |
SDA |
SCL |
|---|---|---|
I2C0 |
|
|
I2C1 |
|
|
兩條匯流排在使用時都必須將其接腳明確傳給 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()
備註
板上有兩顆晶片共用匯流排 0——此匯流排上的使用者裝置必須避開它們的位址:
0x6A——LSM6DSOX IMU0x60——ATECC608A‑MAHDA‑T
將 A0/A1 用作 I²C 會佔用它們供匯流排使用,因此它們無法同時作為 ADC 輸入。
備註
SDA / SCL 焊盤(匯流排 0)板上已有上拉至 3.3 V 的電阻,因此該匯流排上的裝置不需要外部上拉電阻。A0 / A1(匯流排 1)則沒有——使用匯流排 1 時請加上外部上拉電阻。
同一套硬體也可透過 machine.I2CTarget 以目標(從屬)模式運作,向另一個 I²C 控制器公開一塊記憶體區域:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(0, addr=0x42, mem=buf)
SPI¶
匯流排 |
MOSI |
MISO |
SCK |
CS |
|---|---|---|---|---|
SPI0 |
D11 |
D12 |
D13 |
D10 |
rp2 連接埠在本開發板上不會預先設定 SPI0 的接腳,因此在建立匯流排時請明確傳入絲印標示的焊盤:
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)
備註
D13 同時兼作橙色 LED_BUILTIN——在此匯流排上驅動 SPI 會使該 LED 隨匯流排時脈閃爍。
備註
machine.SPI(1) 雖然存在,但保留給板上的 NINA‑W102 模組(Wi-Fi/BLE SPI 連線)使用;請勿直接使用它。
ADC¶
RP2040 有四個 12 位元 ADC 通道,外露於 A0–A3 上,全部以 3.3 V 為參考——read_u16 在接腳 0–3.3 V 的範圍內回傳 0–65535。開發板的 AREF 接腳未接線,因此參考電壓始終為 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¶
接腳 |
切片 / 通道 |
|---|---|
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 |
可透過 machine.PWM 驅動其中任一個:
from machine import Pin, PWM
pwm = PWM(Pin("D3"), freq=1_000, duty_u16=32768)
備註
有幾個接腳共用 PWM 切片通道:
PWM0 A 位於
TX及D4上。PWM0 B 位於
RX及D5上。PWM2 A 位於
D8及D12上。PWM2 B 位於
D9及D10上。PWM6 A 位於
D16/A2及D18/A4/SDA上。PWM6 B 位於
D17/A3及D19/A5/SCL上。
每個切片通道只能挑選一個使用者。同一切片內的通道 A 與 B 共用其週期(頻率),但各自擁有獨立的工作週期。
軟體位元擺動(bit‑banged)匯流排¶
如果你需要額外的匯流排,machine.SoftI2C 與 machine.SoftSPI 可在任一 GPIO 上運作。
熱感測器(外接)¶
韌體包含 fir --- 熱感測器驅動程式 (fir == far infrared,遠紅外線) 驅動程式,可用於外接的 AMG8833 8×8 熱成像儀。將模組接至下列的 I²C 匯流排,然後透過 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 驅動程式僅透過 I²C 0 與感測器通訊——請將模組接至絲印標示的 SCL / SDA 焊盤。該感測器的 7 位元位址(0x69)不得被該匯流排上的任何其他裝置使用。
時序¶
time¶
time 模組涵蓋阻塞式延遲、單調遞增計時刻度,以及經過時間量測:
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)
虛擬計時器¶
machine.Timer 可排程週期性或單次的回呼函式,而不會佔用硬體計時器插槽。將 -1 作為 id 傳入即可使用虛擬(軟體)計時器:
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"))
週期值的單位為毫秒。呼叫 deinit() 以停止並釋放該插槽。
即時時鐘¶
machine.RTC 可在重置之間保持掛鐘時間。RP2040 的 RTC 連接至晶片內振盪器,無法在完全斷電後保留資料——若這對你的應用很重要,請在每次冷開機時設定時間:
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())
看門狗¶
如果應用程式當機,machine.WDT 會重置開發板。一旦啟動後就無法停止或重新設定——請在主迴圈內定期餵食它:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
開機與執行階段資訊¶
韌體更新(UF2)¶
Nano RP2040 Connect 使用 Arduino 標準的雙擊重置來進入 Arduino 的開機載入程式。快速按下重置按鈕兩次——開發板會透過 USB 重新列舉為 UF2 裝置,OpenMV IDE 即可燒錄新的韌體映像檔。
執行中的指令碼可透過呼叫 machine.bootloader() 按需重新進入開機載入程式:
import machine
machine.bootloader()
檔案系統與開機順序¶
Nano RP2040 Connect 韌體在開機時掛載單一個檔案系統:
內部快閃記憶體——始終掛載於
/flash,並作為工作目錄使用。預設存放main.py與README.txt;於首次開機時建立。
掛載完成後,直譯器接著會從 /flash 執行指令碼:
boot.py會在每次軟重置時執行。main.py僅在冷開機時執行,緊接在boot.py之後。
剛燒錄好的開發板隨附的預設 main.py 僅會閃爍使用者 RGB LED 的藍色通道作為心跳訊號(兩次短脈衝、短暫間隔),讓你在未連接任何主機的情況下也能判斷韌體是否乾淨啟動。
透過 USB 連接時,/flash 會在主機上列舉為一個 USB 大量儲存裝置,讓你可以直接編輯 boot.py、main.py 以及任何其他檔案。在重置開發板前請先退出該磁碟機,以便主機將其快取的寫入內容寫回。
備註
由於作業系統將此磁碟機視為被動式區塊裝置,相機上執行的程式碼所建立或修改的檔案,在主機重新掛載該磁碟機之前不會顯示出來。若作業系統與相機同時寫入同一個檔案系統,作業系統會勝出並覆寫相機所做的變更。對於指令碼要寫回的任何資料,請使用 SD 卡,並在從主機讀取那些檔案之前重新掛載。
備註
當主機正在從 USB 大量儲存磁碟機讀取或寫入時,使用者 RGB LED 的紅色通道可能會短暫亮起——這是由韌體驅動的活動指示燈,並非故障。
儲存空間大小¶
Nano RP2040 Connect 隨附:
/flash——14 MB FAT 檔案系統,可讀寫。
Nano RP2040 的版本不包含 ROMFS;請將 Python 模組與 ML 模型直接放在 /flash 上隨附出貨。
軟體函式庫¶
完整的模組清單——包括哪些是 Nano RP2040 Connect 版本所獨有的——請參閱 函式庫索引。