Arduino Nano RP2040 Connect

Попередження

Ця плата більше не підтримується. Останній випуск мікропрограми OpenMV для Arduino Nano RP2040 Connect — 4.7.0. Жодних подальших оновлень мікропрограми, виправлень помилок або нових функцій для цього цільового пристрою не буде. Наведена нижче інформація збережена для користувачів, що використовують версію 4.7.0 або більш ранні.

Arduino Nano RP2040 Connect — це плата у форм-факторі Arduino Nano розміром 45 × 18 мм, побудована на основі Raspberry Pi RP2040 — двоядерного ARM Cortex‑M0+, що працює на частоті 133 МГц із 264 КБ внутрішньої SRAM. Wi-Fi та BLE забезпечує модуль U‑blox NINA‑W102, а на платі встановлено 6-осьовий IMU LSM6DSOX і PDM-мікрофон MP34DT06. Мікропрограма OpenMV керує всім цим через MicroPython.

Arduino Nano RP2040 Connect

Повний опис, фотографії та розміри дивіться на сторінці продукту Arduino Nano RP2040 Connect.

Основні характеристики

  • Raspberry Pi RP2040 — двоядерний ARM Cortex‑M0+ на частоті 133 МГц із 264 КБ внутрішньої SRAM.

  • 16 МБ зовнішньої QSPI-флеш-пам’яті.

  • Модуль U‑blox NINA‑W102 із підтримкою Wi‑Fi 2.4 ГГц b/g/n та Bluetooth 4.2 (BR/EDR + LE).

  • LSM6DSOX — 6-осьовий IMU та MP34DT06 — PDM-мікрофон.

  • Роз’єм Micro USB для живлення, програмування та CDC REPL.

  • 22 призначених для користувача виводи на стандартних роз’ємах Nano — TX/RX, D2D13 (цифрові), A0A7 (аналогові).

Розводка

Arduino Nano RP2040 Connect Pinout

Довідник по виводах

Назва виводу

Довідник

Функція

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 — підтягніть до VCC під час увімкнення живлення, щоб увійти в ROM-завантажувач RP2040

LED_BUILTIN

Помаранчевий світлодіод користувача на D13

LED_RED

Червоний канал RGB-світлодіода

LED_GREEN

Зелений канал RGB-світлодіода

LED_BLUE

Синій канал RGB-світлодіода

Попередження

Виводи вводу/виводу Nano RP2040 Connect є лише 3.3 В — вони не сумісні з рівнем 5 В. Подача 5 В на них пошкодить RP2040.

Виводи живлення

  • VIN — вхід 4–20 В. Живить плату через вбудований імпульсний регулятор. Також подається через діод з шини USB 5 В, тому USB і VIN можуть бути підключені одночасно без зворотного живлення.

  • +5V — за замовчуванням не підключено.

  • +3V3 — вихід регулятора 3.3 В.

  • AREF — вивід аналогового опорного напруження. На цій платі не з’єднаний з RP2040 — ADC завжди прив’язаний до 3.3 В.

  • GND — спільна земля.

Nano RP2040 Connect можна живити двома способами:

  • Micro USB — подає 5 В на вбудований регулятор.

  • Вивід VIN — підключіть регульоване джерело 4–20 В.

Примітка

Паяльний перемичка на нижній стороні плати з’єднує +5V з шиною USB 5 В. Замкніть його, щоб вивід заголовка +5V реально мав напругу 5 В.

Примітка

Нормально замкнута паяльна перемичка на виході вбудованого регулятора 4–20 В може бути розрізана для вимкнення регулятора, щоб живити плату безпосередньо від зовнішнього джерела 3.3 В на +3V3.

Виводи відновлення та налагодження

  • RESET — як відкритий контакт, так і кнопка RESET на верхній стороні плати, підключені до лінії NRST RP2040. Підтягніть до GND або натисніть кнопку для скидання.

  • REC — відкритий контакт. Утримання REC у високому рівні при увімкненні живлення (або при утриманні RESET) переводить RP2040 у ROM-завантажувач; плата перемикається у режим USB-накопичувача з іменем RPI-RP2 та приймає образ мікропрограми у форматі .uf2.

Nano RP2040 Connect використовує стандартне подвійне натискання кнопки скидання Arduino для входу в завантажувач Arduino. Швидко натисніть кнопку RESET двічі — плата перемикається через USB як пристрій UF2, і OpenMV IDE може завантажити новий образ мікропрограми.

Сигнали SWD RP2040 виведені на контактні майданчики на зворотному боці плати, прямо під модулем NINA. Усі сигнали налагодження мають рівень 3.3 В.

Вбудовані периферійні пристрої

Світлодіоди

Nano RP2040 Connect має RGB-світлодіод для користувача — керований через канали LED_RED, LED_GREEN і LED_BLUE відповідно до шовкографії — та окремий помаранчевий LED_BUILTIN на D13. Усі чотири можна програмно керувати через machine.LED

from machine import LED

LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
LED("LED_BUILTIN").on()

Окремий зелений індикатор живлення на платі світиться, коли шина +3.3 В активна, і не підлягає керуванню користувачем.

Датчик камери

Мікропрограма OpenMV на Nano RP2040 Connect підтримує паралельний CMOS-датчик OmniVision OV7670. На платі немає вбудованого датчика зображення — підключіть модуль 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)

Шина керування I²C датчика OV7670 спільна з вбудованим IMU та ATECC608A на I²C 0. Датчик знаходиться за 7-бітною адресою 0x21 — пристрої користувача на шині 0 повинні уникати цієї адреси, коли камера підключена.

IMU

Вбудований 6-осьовий акселерометр + гіроскоп LSM6DSOX знаходиться на I2C0. machine.I2C(0) порту rp2 за замовчуванням використовує інший набір виводів, тому явно передайте контакти 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)

Мікрофон

Вбудований PDM-мікрофон MP34DT06 захоплюється через audio — Аудіомодуль за допомогою одного з блоків 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

Вбудований модуль NINA‑W102 доступний через network — налаштування мережі як інтерфейс станції:

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 — Async BLE для BLE, сумісного з asyncio — наприклад, рекламуйте периферійний пристрій і чекайте підключення центрального:

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 В CMOS, загальний вихідний струм 50 мА для всіх 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())

Будь-який вхідний вивід також може генерувати переривання при переходах фронту:

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 В, тому зовнішні підтяжки для пристроїв на цій шині не потрібні. A0 / A1 (шина 1) їх не мають — додайте зовнішні підтяжки при використанні шини 1.

Те саме обладнання також можна використовувати в режимі ведомого (slave) через 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 на цій шині буде мигати світлодіодом у такт із тактовим сигналом шини.

Примітка

machine.SPI(1) існує, але зарезервований для вбудованого модуля NINA‑W102 (канал SPI Wi-Fi/BLE); не використовуйте його напряму.

ADC

RP2040 має чотири 12-бітних канали ADC на A0–A3, всі з опорою 3.3 Вread_u16 повертає 0–65535 для діапазону 0–3.3 В на виводі. Вивід AREF плати не підключений, тому опора завжди 3.3 В:

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 в одному зрізі спільно використовують період (частоту), але кожен має власний робочий цикл.

Шини з програмним емулюванням

machine.SoftI2C та machine.SoftSPI працюють на будь-якому GPIO, якщо вам потрібна додаткова шина.

Тепловий датчик (зовнішній)

Мікропрограма включає драйвер fir — драйвер теплового датчика (fir == далекий інфрачервоний діапазон) для зовнішнього 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 як ідентифікатор для використання віртуального (програмного) таймера:

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 зберігає астрономічний час між скиданнями. RTC RP2040 прив’язаний до внутрішнього генератора і не зберігає час при повному відключенні живлення — встановлюйте час при кожному холодному завантаженні, якщо це важливо для вашого застосунку:

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-світлодіода як серцебиття (два короткі імпульси, коротка пауза), щоб можна було переконатися, що мікропрограма завантажилась без помилок без підключення хоста.

При підключенні через USB /flash відображається як USB-накопичувач на хості, що дозволяє редагувати boot.py, main.py та будь-які інші файли безпосередньо. Відключіть диск перед скиданням плати, щоб хост скинув кешовані записи.

Примітка

Оскільки ОС сприймає диск як пасивний блоковий пристрій, файли, створені або змінені кодом, що виконується на камері, не відображатимуться, поки хост не перемонтує диск. Якщо і ОС, і камера одночасно записують у одну файлову систему, ОС переможе та перезапише зміни, зроблені камерою. Використовуйте SD-карту для будь-яких даних, які скрипт записує назад, і перемонтуйте перед читанням цих файлів з хоста.

Примітка

Червоний канал RGB-світлодіода може коротко засвічуватись, поки хост читає або записує на USB-накопичувач — це індикатор активності, керований мікропрограмою, а не ознака несправності.

Розміри сховища

Nano RP2040 Connect постачається з:

  • /flash — файлова система FAT 14 МБ, для читання/запису.

Збірка Nano RP2040 не включає ROMFS; розміщуйте модулі Python та моделі МН безпосередньо на /flash.

Програмні бібліотеки

Дивіться індекс бібліотек для повного списку модулів — включаючи ті, що унікальні для збірки Nano RP2040 Connect.