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.
Основні характеристики¶
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,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 — підтягніть до VCC під час увімкнення живлення, щоб увійти в ROM-завантажувач RP2040 |
LED_BUILTIN |
— |
Помаранчевий світлодіод користувача на |
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 |
|
D1 |
|
D2 |
|
D3 |
|
D4 |
|
D5 |
|
D6 |
|
D7 |
|
HSYNC |
|
VSYNC |
|
PXCLK |
|
MXCLK |
|
POWER |
|
RESET |
|
SCL |
|
SDA |
|
Шина керування 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 |
|
|
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 В, тому зовнішні підтяжки для пристроїв на цій шині не потрібні. 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.