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

完整的資料手冊、照片與尺寸資訊請參閱 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/nBluetooth 4.2(BR/EDR + LE)。

  • LSM6DSOX 6 軸 IMU 與 MP34DT06 PDM 麥克風。

  • Micro USB 連接器,用於供電、燒錄程式以及 CDC REPL。

  • 標準 Nano 排針上的 22 個使用者 I/O 接腳——TX/RXD2D13(數位)、A0A7(類比)。

接腳配置

Arduino Nano RP2040 Connect 接腳配置

接腳參考

接腳名稱

參考

功能

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

位於 D13 的橙色使用者 LED

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_REDLED_GREENLED_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

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 的 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

SDA / A4

SCL / A5

I2C1

A0

A1

兩條匯流排在使用時都必須將其接腳明確傳給 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 IMU

  • 0x60——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.SoftI2Cmachine.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.pyREADME.txt;於首次開機時建立。

掛載完成後,直譯器接著會從 /flash 執行指令碼:

  • boot.py 會在每次軟重置時執行。

  • main.py 僅在冷開機時執行,緊接在 boot.py 之後。

剛燒錄好的開發板隨附的預設 main.py 僅會閃爍使用者 RGB LED 的藍色通道作為心跳訊號(兩次短脈衝、短暫間隔),讓你在未連接任何主機的情況下也能判斷韌體是否乾淨啟動。

透過 USB 連接時,/flash 會在主機上列舉為一個 USB 大量儲存裝置,讓你可以直接編輯 boot.pymain.py 以及任何其他檔案。在重置開發板前請先退出該磁碟機,以便主機將其快取的寫入內容寫回。

備註

由於作業系統將此磁碟機視為被動式區塊裝置,相機上執行的程式碼所建立或修改的檔案,在主機重新掛載該磁碟機之前不會顯示出來。若作業系統與相機同時寫入同一個檔案系統,作業系統會勝出並覆寫相機所做的變更。對於指令碼要寫回的任何資料,請使用 SD 卡,並在從主機讀取那些檔案之前重新掛載。

備註

當主機正在從 USB 大量儲存磁碟機讀取或寫入時,使用者 RGB LED 的紅色通道可能會短暫亮起——這是由韌體驅動的活動指示燈,並非故障。

儲存空間大小

Nano RP2040 Connect 隨附:

  • /flash——14 MB FAT 檔案系統,可讀寫。

Nano RP2040 的版本不包含 ROMFS;請將 Python 模組與 ML 模型直接放在 /flash 上隨附出貨。

軟體函式庫

完整的模組清單——包括哪些是 Nano RP2040 Connect 版本所獨有的——請參閱 函式庫索引