Arduino Nano RP2040 Connect¶
Peringatan
Papan ini tidak lagi didukung. Rilis firmware OpenMV terakhir untuk Arduino Nano RP2040 Connect adalah 4.7.0. Tidak ada pembaruan firmware, perbaikan bug, atau fitur baru lebih lanjut yang akan diterbitkan untuk target ini. Informasi di bawah ini disimpan untuk pengguna yang menjalankan versi 4.7.0 atau lebih lama.
Arduino Nano RP2040 Connect adalah papan berukuran 45 × 18 mm berformat Arduino Nano yang dibangun di sekitar Raspberry Pi RP2040 — prosesor dual ARM Cortex‑M0+ yang berjalan pada 133 MHz dengan 264 KB SRAM internal. WiFi dan BLE disediakan oleh modul U‑blox NINA‑W102, dan papan ini dilengkapi IMU 6-axis LSM6DSOX serta mikrofon PDM MP34DT06. Firmware OpenMV menggerakkan semua ini dari MicroPython.
Untuk datasheet lengkap, foto, dan dimensi, lihat halaman produk Arduino Nano RP2040 Connect.
Sorotan¶
Raspberry Pi RP2040 dual ARM Cortex‑M0+ pada 133 MHz dengan 264 KB SRAM internal.
16 MB flash QSPI eksternal.
Modul U‑blox NINA‑W102 menyediakan Wi‑Fi 2,4 GHz b/g/n dan Bluetooth 4.2 (BR/EDR + LE).
IMU 6-axis LSM6DSOX dan mikrofon PDM MP34DT06.
Konektor Micro USB untuk daya, pemrograman, dan CDC REPL.
22 pin I/O pengguna pada header Nano standar —
TX/RX,D2–D13(digital),A0–A7(analog).
Pinout¶
Referensi pin¶
Nama pin |
Referensi |
Fungsi |
|---|---|---|
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 |
tekan tombol RESET di papan atau hubungkan ke GND untuk mereset |
REC |
3.3 V |
BOOTSEL — tarik ke HIGH saat power-on untuk masuk ke ROM bootloader RP2040 |
LED_BUILTIN |
— |
LED pengguna oranye pada |
LED_RED |
— |
Saluran merah LED RGB |
LED_GREEN |
— |
Saluran hijau LED RGB |
LED_BLUE |
— |
Saluran biru LED RGB |
Peringatan
Pin I/O Nano RP2040 Connect hanya 3,3 V — pin-pin ini tidak toleran 5 V. Menghubungkan 5 V ke pin-pin tersebut akan merusak RP2040.
Pin daya¶
VIN — input 4 – 20 V. Memberi daya pada papan melalui regulator switching di dalamnya. Juga dihubungkan melalui dioda dari rel USB 5 V, sehingga USB dan
VINdapat aktif bersamaan tanpa saling mencatu balik.+5V — tidak terhubung secara default.
+3V3 — keluaran regulator 3,3 V.
AREF — pin referensi analog. Tidak dihubungkan ke RP2040 di papan ini — ADC selalu direferensikan ke 3,3 V.
GND — ground bersama.
Nano RP2040 Connect dapat diberi daya melalui salah satu jalur berikut:
Micro USB — menyuplai 5 V ke regulator di papan.
Pin VIN — hubungkan catu daya teregulasi 4 – 20 V.
Catatan
Solder jumper di bagian bawah papan menghubungkan +5V ke rel USB 5 V. Tutup jumper tersebut untuk membuat pin header +5V benar-benar membawa tegangan 5 V.
Catatan
Solder jumper yang biasanya tertutup pada keluaran regulator switching 4–20 V di papan dapat dipotong untuk menonaktifkan regulator, sehingga papan dapat diberi daya langsung dari sumber 3,3 V eksternal melalui +3V3.
Pin pemulihan dan debug¶
RESET — terdapat pad terbuka dan tombol RESET sesaat di bagian atas papan, terhubung ke jalur NRST RP2040. Hubungkan ke GND atau tekan tombol untuk mereset.
REC — pad terbuka. Menahan
RECdalam kondisi HIGH saat power-on (atau sambil menekan RESET) akan memasukkan RP2040 ke dalam ROM bootloader-nya; papan akan mengenumerasi ulang sebagai drive mass-storage USB bernamaRPI-RP2dan menerima image firmware.uf2.
Nano RP2040 Connect menggunakan double-tap reset standar Arduino untuk masuk ke bootloader Arduino. Tekan tombol RESET dengan cepat dua kali — papan akan mengenumerasi ulang melalui USB sebagai perangkat UF2 dan OpenMV IDE dapat mem-flash image firmware baru.
Sinyal SWD RP2040 terbuka pada pad berlapis di bagian belakang papan, tepat di bawah modul NINA. Semua sinyal debug direferensikan ke 3,3 V.
Periferal di papan¶
LED¶
Nano RP2040 Connect memiliki LED RGB pengguna — digerakkan melalui saluran LED_RED, LED_GREEN, dan LED_BLUE yang tercetak di papan — ditambah LED_BUILTIN oranye terpisah pada D13. Keempatnya dapat dikontrol melalui perangkat lunak menggunakan machine.LED
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
LED("LED_BUILTIN").on()
LED daya hijau terpisah di papan akan menyala kapan pun rel +3,3 V aktif dan tidak dapat dikontrol oleh pengguna.
Sensor kamera¶
Firmware OpenMV pada Nano RP2040 Connect mendukung sensor CMOS paralel OmniVision OV7670. Papan ini tidak memiliki sensor gambar bawaan — hubungkan modul OV7670 ke pin header yang tercetak di papan dan gunakan melalui modul csi --- sensor kamera
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()
Catatan
OV7670 membutuhkan 14 pin. Firmware menghubungkannya sebagai berikut:
Sinyal sensor |
Pin Nano RP2040 |
|---|---|
D0 |
|
D1 |
|
D2 |
|
D3 |
|
D4 |
|
D5 |
|
D6 |
|
D7 |
|
HSYNC |
|
VSYNC |
|
PXCLK |
|
MXCLK |
|
POWER |
|
RESET |
|
SCL |
|
SDA |
|
Bus kontrol I²C OV7670 digunakan bersama dengan IMU di papan dan ATECC608A pada I²C 0. Sensor berada di alamat 7-bit 0x21 — perangkat pengguna di bus 0 juga harus menghindari alamat ini saat kamera terhubung.
IMU¶
Akselerometer + giroskop 6-axis LSM6DSOX yang terpasang di papan berada pada I2C0. Port rp2 machine.I2C(0) secara default menggunakan kumpulan pin yang berbeda, jadi teruskan pad SDA/SCL yang tercetak di papan secara eksplisit. Gunakan driver lsm6dsox.LSM6DSOX yang sudah di-freeze:
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¶
Mikrofon PDM MP34DT06 yang terpasang di papan diambil melalui audio --- Modul Audio menggunakan salah satu blok PIO 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 di papan diekspos melalui network --- konfigurasi jaringan sebagai antarmuka 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¶
Modul NINA yang sama juga mengekspos Bluetooth 4.2 LE. Gunakan aioble --- Async BLE untuk BLE yang ramah asyncio — misalnya, beriklan sebagai periferal dan tunggu central untuk terhubung:
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())
Referensi bus¶
GPIO¶
Gunakan machine.Pin untuk membaca atau menggerakkan salah satu pin yang tercetak di papan. Keluaran adalah CMOS 3,3 V, total sink 50 mA di semua 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())
Setiap pin input juga dapat memicu interupsi pada transisi tepi:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Bus |
TX |
RX |
|---|---|---|
UART0 |
TX |
RX |
Gunakan nama silkscreen TX/RX dengan machine.UART
from machine import UART
uart = UART(0, baudrate=115200)
uart.write("hello")
uart.read(5)
Catatan
machine.UART(1) ada tetapi dicadangkan untuk modul NINA‑W102 di papan (tautan BLE); jangan gunakan langsung.
I²C¶
Bus |
SDA |
SCL |
|---|---|---|
I2C0 |
|
|
I2C1 |
|
|
Kedua bus memerlukan pin yang diteruskan secara eksplisit ke 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()
Catatan
Dua chip di papan berbagi bus 0 — perangkat pengguna di bus ini harus menghindari alamat berikut:
0x6A— LSM6DSOX IMU0x60— ATECC608A‑MAHDA‑T
Menggunakan A0/A1 sebagai I²C akan menggunakannya untuk bus, sehingga keduanya tidak dapat sekaligus menjadi input ADC.
Catatan
Pad SDA / SCL (bus 0) memiliki resistor pull-up ke 3,3 V di papan, sehingga tidak diperlukan pull-up eksternal untuk perangkat pada bus tersebut. A0 / A1 (bus 1) tidak memilikinya — tambahkan pull-up eksternal saat menggunakan bus 1.
Hardware yang sama juga dapat digunakan dalam mode target (slave) melalui machine.I2CTarget untuk mengekspos wilayah memori ke kontroler I²C lain:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(0, addr=0x42, mem=buf)
SPI¶
Bus |
MOSI |
MISO |
SCK |
CS |
|---|---|---|---|---|
SPI0 |
D11 |
D12 |
D13 |
D10 |
Port rp2 tidak mengkonfigurasi pin SPI0 di papan ini secara otomatis, jadi teruskan pad yang tercetak secara eksplisit saat membuat bus:
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)
Catatan
D13 berfungsi ganda sebagai LED_BUILTIN oranye — menjalankan SPI di bus ini akan membuat LED berkedip sesuai dengan clock bus.
Catatan
machine.SPI(1) ada tetapi dicadangkan untuk modul NINA‑W102 di papan (tautan SPI Wi-Fi/BLE); jangan gunakan langsung.
ADC¶
RP2040 memiliki empat saluran ADC 12-bit yang terbuka pada A0–A3, semuanya direferensikan ke 3,3 V — read_u16 mengembalikan 0–65535 di rentang 0–3,3 V pada pin. Pin AREF di papan tidak dihubungkan, sehingga referensi selalu 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 |
Slice / saluran |
|---|---|
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 |
Gerakkan salah satunya melalui machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("D3"), freq=1_000, duty_u16=32768)
Catatan
Beberapa pin berbagi saluran slice PWM:
PWM0 A ada pada
TXdanD4.PWM0 B ada pada
RXdanD5.PWM2 A ada pada
D8danD12.PWM2 B ada pada
D9danD10.PWM6 A ada pada
D16/A2danD18/A4/SDA.PWM6 B ada pada
D17/A3danD19/A5/SCL.
Pilih satu konsumen per saluran slice. Saluran A dan B dalam slice yang sama berbagi periode (frekuensi) tetapi masing-masing memiliki duty cycle sendiri.
Bus bit-bang perangkat lunak¶
machine.SoftI2C dan machine.SoftSPI bekerja pada GPIO mana pun jika Anda membutuhkan bus tambahan.
Sensor termal (luar papan)¶
Firmware menyertakan driver fir --- driver sensor termal (fir == far infrared) untuk imager termal AMG8833 8×8 yang dihubungkan secara eksternal. Hubungkan modul ke bus I²C yang tercantum di bawah, lalu baca bingkai dengan 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())
Driver fir hanya berkomunikasi dengan sensor melalui I²C 0 — hubungkan modul ke pad SCL / SDA yang tercetak di papan. Alamat 7-bit sensor (0x69) tidak boleh digunakan oleh perangkat lain pada bus tersebut.
Waktu¶
time¶
Modul time mencakup penundaan pemblokiran, tik monotonik, dan pengukuran waktu yang telah berlalu:
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)
Timer virtual¶
machine.Timer menjadwalkan callback berkala atau satu kali tanpa mengonsumsi slot timer hardware. Teruskan -1 sebagai id untuk menggunakan timer virtual (perangkat lunak):
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"))
Nilai periode dalam milidetik. Panggil deinit() untuk menghentikan dan melepaskan slot.
Real-time clock¶
machine.RTC menjaga waktu jam dinding di seluruh reset. RTC RP2040 terikat ke osilator on-chip dan tidak bertahan saat daya penuh terputus — atur waktu pada setiap cold boot jika hal ini penting untuk aplikasi Anda:
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 mereset papan jika aplikasi hang. Setelah dimulai, tidak dapat dihentikan atau dikonfigurasi ulang — beri makan secara berkala di dalam loop utama Anda:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Info boot dan runtime¶
Pembaruan firmware (UF2)¶
Nano RP2040 Connect menggunakan double-tap reset standar Arduino untuk masuk ke bootloader Arduino. Tekan tombol reset dengan cepat dua kali — papan akan mengenumerasi ulang melalui USB sebagai perangkat UF2 dan OpenMV IDE dapat mem-flash image firmware baru.
Skrip yang sedang berjalan dapat memasuki kembali bootloader sesuai permintaan dengan memanggil machine.bootloader()
import machine
machine.bootloader()
Filesystem dan urutan boot¶
Firmware Nano RP2040 Connect me-mount satu filesystem saat boot:
Internal flash — selalu di-mount di
/flashdan digunakan sebagai direktori kerja. Menyimpanmain.pydanREADME.txtsecara default; dibuat pada boot pertama kali.
Setelah mounting, interpreter kemudian menjalankan skrip dari /flash:
boot.pydijalankan pada setiap soft reset.main.pydijalankan hanya pada cold boot, segera setelahboot.py.
main.py default yang dikirimkan pada papan yang baru di-flash hanya membuat saluran biru LED RGB pengguna berkedip sebagai heartbeat (dua pulsa pendek, jeda pendek), sehingga Anda dapat mengetahui bahwa firmware booted bersih tanpa host yang terhubung.
Ketika terhubung melalui USB, /flash akan mengenumerasi sebagai drive mass-storage USB di host, memungkinkan Anda mengedit boot.py, main.py, dan file lainnya secara langsung. Eject drive sebelum mereset papan agar host membuang tulisan yang di-cache.
Catatan
Karena OS memperlakukan drive sebagai perangkat blok pasif, file yang dibuat atau dimodifikasi oleh kode yang berjalan di kamera tidak akan muncul sampai host me-mount ulang drive. Jika OS dan kamera menulis ke filesystem yang sama secara bersamaan, OS akan menang dan menimpa perubahan yang dibuat oleh kamera. Gunakan kartu SD untuk data apa pun yang ditulis kembali oleh skrip, dan mount ulang sebelum membaca file tersebut dari host.
Catatan
Saluran merah LED RGB pengguna mungkin menyala sebentar saat host membaca atau menulis ke drive mass-storage USB — ini adalah indikator aktivitas yang digerakkan firmware, bukan kesalahan.
Ukuran penyimpanan¶
Nano RP2040 Connect dikirimkan dengan:
/flash— filesystem FAT 14 MB, baca/tulis.
Build Nano RP2040 tidak menyertakan ROMFS; kirimkan modul Python dan model ML langsung di /flash.
Pustaka perangkat lunak¶
Lihat indeks pustaka untuk daftar lengkap modul — termasuk modul mana yang unik untuk build Nano RP2040 Connect.