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.

Arduino Nano RP2040 Connect

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, D2D13 (digital), A0A7 (analog).

Pinout

Arduino Nano RP2040 Connect 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 D13

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 VIN dapat 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 REC dalam 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 bernama RPI-RP2 dan 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

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)

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

SDA / A4

SCL / A5

I2C1

A0

A1

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 IMU

  • 0x60 — 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 Vread_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 TX dan D4.

  • PWM0 B ada pada RX dan D5.

  • PWM2 A ada pada D8 dan D12.

  • PWM2 B ada pada D9 dan D10.

  • PWM6 A ada pada D16/A2 dan D18/A4/SDA.

  • PWM6 B ada pada D17/A3 dan D19/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 /flash dan digunakan sebagai direktori kerja. Menyimpan main.py dan README.txt secara default; dibuat pada boot pertama kali.

Setelah mounting, interpreter kemudian menjalankan skrip dari /flash:

  • boot.py dijalankan pada setiap soft reset.

  • main.py dijalankan hanya pada cold boot, segera setelah boot.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.