Arduino Giga R1 WiFi¶
Arduino Giga R1 WiFi — це плата у форм-факторі Mega розміром 101 × 53 мм, побудована на базі STMicroelectronics STM32H747XI — двоядерної SoC, що поєднує ядро Cortex‑M7 на 480 МГц та Cortex‑M4 на 240 МГц. Мікропрограма OpenMV працює виключно на ядрі M7. Giga доповнює стандартне розташування роз’ємів Arduino Mega 22-контактним гнучким роз’ємом камери Arducam, роз’ємом MIPI‑DSI для Arduino Giga Display Shield та стерео аудіороз’ємом 3,5 мм.
Повний даташит, фотографії та розміри дивіться на сторінці продукту Arduino Giga R1 WiFi.
Основні характеристики¶
STMicroelectronics STM32H747XI з двома ядрами Cortex‑M7 (480 МГц) + Cortex‑M4 (240 МГц). Мікропрограма OpenMV працює лише на ядрі M7; ядро M4 доступне через openamp для міжпроцесорного зв’язку.
8 МБ зовнішньої SDRAM плюс 2 МБ внутрішньої флеш-пам’яті та 16 МБ зовнішньої QSPI флеш-пам’яті.
Апаратний кодек JPEG.
22-контактний гнучкий роз’єм камери, сумісний з Arducam (
J6) — підтримка модулів датчиків OV5640 (5 Мп), OV7670, GC2145, HM01B0 та HM0360.Роз’єм дисплея MIPI‑DSI (
J5) для Arduino Giga Display Shield (ємнісна сенсорна панель 480×800) та рушій відображення LTDC RGB для розширених плат-носіїв.Аудіороз’єм 3,5 мм зі стерео лінійним виходом та входом мікрофона.
Wi‑Fi b/g/n (2,4 ГГц) + Bluetooth LE 5.1 через модуль Murata 1DX (CYW4343W) — підключається до антени через роз’єм U.FL на платі.
USB‑C (повна швидкість) для живлення / послідовного зв’язку / програмування.
Виводи вводу/виводу на роз’ємах у стилі Mega —
D0–D75(цифрові),A0–A11(аналогові),DAC0/DAC1(виходи ЦАП),CAN_RX/CAN_TX(FDCAN2) та внутрішня параSDA1/SCL1I²C. Окремий 6-контактний роз’єм SPI1 на передній панелі плати виводитьCIPO/COPI/SCK(D89/D90/D91).JTAG / SWD виведено на відладочний роз’єм на верхній стороні плати для розширеного налагодження.
Розпіновка¶
Довідник по виводах¶
Роз’єми у стилі Arduino Mega надають 76 цифрових виводів (D0–D75), 12 аналогових виводів (A0–A11), два виходи ЦАП (DAC0/DAC1), вторинну пару I²C (SDA1/SCL1) та пару FDCAN2 (CAN_RX/CAN_TX). Окремий 6-контактний роз’єм SPI1 на передній панелі плати виводить CIPO/COPI/SCK (D89/D90/D91).
Назва виводу |
Довідник |
Функція |
|---|---|---|
D0 |
3,3 В |
USART1 RX (Serial1) / TIM4 CH2 |
D1 |
3,3 В |
USART1 TX (Serial1) / TIM1 CH2 |
D2 |
3,3 В |
TIM2 CH4 / TIM5 CH4 / USART2 RX |
D3 |
3,3 В |
TIM2 CH3 / TIM5 CH3 / USART2 TX |
D4 |
3,3 В |
TIM8 CH1 / UART8 TX |
D5 |
3,3 В |
TIM3 CH2 / SPI1 MOSI / SPI6 MOSI |
D6 |
3,3 В |
TIM4 CH2 |
D7 |
3,3 В |
TIM3 CH1 / SPI1 MISO / SPI3 MISO / SPI6 MISO |
D8 |
3,3 В |
TIM4 CH3 / I2C1 SCL / I2C4 SCL / UART4 RX |
D9 |
3,3 В |
TIM4 CH4 / I2C1 SDA / I2C4 SDA / UART4 TX |
D10 |
3,3 В |
TIM1 CH1 / TIM8 CH3N |
D11 |
3,3 В |
TIM8 CH2 / SPI5 MOSI |
D12 |
3,3 В |
TIM8 CH2N / SPI5 MISO |
D13 |
3,3 В |
TIM12 CH1 / SPI5 SCK |
D14 |
3,3 В |
USART6 TX (Serial2) / SPI6 MOSI |
D15 |
3,3 В |
USART6 RX (Serial2) / TIM3 CH2 / TIM8 CH2 |
D16 |
3,3 В |
UART4 TX (Serial3) / TIM8 CH1N |
D17 |
3,3 В |
UART4 RX (Serial3) |
D18 |
3,3 В |
USART2 TX (Serial4) |
D19 |
3,3 В |
USART2 RX (Serial4) / SPI3 MOSI |
D20 |
3,3 В |
I2C2 SDA / TIM2 CH4 / USART3 RX |
D21 |
3,3 В |
I2C2 SCL |
D22 |
3,3 В |
GPIO |
D23 |
3,3 В |
GPIO / SPI6 SCK |
D24 |
3,3 В |
GPIO / SPI6 MISO |
D25 |
3,3 В |
GPIO |
D26 |
3,3 В |
GPIO |
D27 |
3,3 В |
GPIO |
D28 |
3,3 В |
GPIO |
D29 |
3,3 В |
GPIO |
D30 |
3,3 В |
GPIO |
D31 |
3,3 В |
GPIO |
D32 |
3,3 В |
GPIO |
D33 |
3,3 В |
GPIO |
D34 |
3,3 В |
GPIO |
D35 |
3,3 В |
GPIO |
D36 |
3,3 В |
GPIO |
D37 |
3,3 В |
TIM8 CH2 |
D38 |
3,3 В |
TIM8 CH2N |
D39 |
3,3 В |
GPIO |
D40 |
3,3 В |
TIM15 CH2 / SPI4 MOSI |
D41 |
3,3 В |
GPIO |
D42 |
3,3 В |
GPIO |
D43 |
3,3 В |
GPIO |
D44 |
3,3 В |
GPIO |
D45 |
3,3 В |
GPIO |
D46 |
3,3 В |
TIM8 CH3N |
D47 |
3,3 В |
SPI3 MOSI |
D48 |
3,3 В |
TIM8 CH3 / SPI5 SCK |
D49 |
3,3 В |
GPIO |
D50 |
3,3 В |
GPIO |
D51 |
3,3 В |
TIM15 CH1 / SPI4 MISO |
D52 |
3,3 В |
GPIO |
D53 |
3,3 В |
GPIO |
D54 |
3,3 В |
TIM8 CH1 (camera DCMI VSYNC) |
D55 |
3,3 В |
I2C3 SDA (camera DCMI HSYNC) |
D56 |
3,3 В |
TIM3 CH1 / TIM13 CH1 (camera DCMI PXCLK) |
D57 |
3,3 В |
TIM8 CH1N / UART8 RX (camera master clock — TIM1 CH3) |
D58 |
3,3 В |
TIM8 CH3 (camera DCMI D7) |
D59 |
3,3 В |
TIM8 CH2 (camera DCMI D6) |
D60 |
3,3 В |
GPIO (camera DCMI D5) |
D61 |
3,3 В |
TIM8 CH2N / UART4 RX (camera DCMI D4) |
D62 |
3,3 В |
SPI1 SCK (camera DCMI D3) |
D63 |
3,3 В |
TIM5 CH2 / I2C4 SCL (display I²C) |
D64 |
3,3 В |
TIM5 CH1 (camera DCMI D1) |
D65 |
3,3 В |
TIM12 CH2 (camera DCMI D0) |
D66 |
3,3 В |
GPIO (camera reset — claimed when camera is active) |
D67 |
3,3 В |
GPIO (camera power‑down — claimed when camera is active) |
D68 |
3,3 В |
TIM3 CH1 / TIM8 CH1 / USART6 TX (Display Shield DSI RESET) |
D69 |
3,3 В |
TIM5 CH4 (Display Shield DSI TE) |
D70 |
3,3 В |
SPI2 SCK |
D71 |
3,3 В |
TIM8 CH4 / SPI2 MISO |
D72 |
3,3 В |
SPI2 MOSI |
D73 |
3,3 В |
ADC123 IN11 (Display Shield DFSDM mic data) |
D74 |
3,3 В |
GPIO (display backlight — claimed by the Giga Display Shield) |
D75 |
3,3 В |
SPI2 SCK (Display Shield DFSDM mic clock) |
A0 / D76 |
3,3 В |
ADC12 IN4 |
A1 / D77 |
3,3 В |
ADC12 IN8 |
A2 / D78 |
3,3 В |
ADC12 IN9 / TIM3 CH3 / TIM8 CH2N |
A3 / D79 |
3,3 В |
ADC12 IN5 / TIM3 CH4 / TIM8 CH3N |
A4 / D80 |
3,3 В |
ADC12 IN13 / SPI2 MOSI |
A5 / D81 |
3,3 В |
ADC123 IN12 / SPI2 MISO |
A6 / D82 |
3,3 В |
ADC123 IN10 |
A7 / D83 |
3,3 В |
ADC1 IN16 / TIM2 CH1 / TIM5 CH1 (audio jack mic input) |
A8 |
3,3 В |
ADC3 IN0 (analog only) |
A9 |
3,3 В |
ADC3 IN1 (analog only) |
A10 |
3,3 В |
ADC12 IN1 (analog only) |
A11 |
3,3 В |
ADC12 IN0 (analog only) |
DAC0 / A12 / D84 |
3,3 В |
DAC1 OUT1 / ADC12 IN18 (audio jack line‑out L) |
DAC1 / A13 / D85 |
3,3 В |
DAC1 OUT2 / TIM2 CH1 / SPI1 SCK / ADC12 IN19 (audio jack line‑out R) |
D89 |
3,3 В |
SPI1 MISO ( |
D90 |
3,3 В |
SPI1 MOSI ( |
D91 |
3,3 В |
SPI1 SCK ( |
CAN_RX / D93 |
3,3 В |
FDCAN2 RX / TIM3 CH2 / UART5 RX |
CAN_TX / D94 |
3,3 В |
FDCAN2 TX / SPI2 SCK / UART5 TX |
SDA1 / D102 |
3,3 В |
I2C4 SDA (display touch / camera control bus) |
SCL1 / D101 |
3,3 В |
I2C4 SCL (display touch / camera control bus) |
RESET |
3,3 В |
натисніть кнопку RESET на платі або підтягніть до GND для скидання |
LED_RED |
3,3 В |
Червоний канал RGB LED (активний при низькому рівні) |
LED_GREEN |
3,3 В |
Зелений канал RGB LED (активний при низькому рівні) |
LED_BLUE |
3,3 В |
Синій канал RGB LED (активний при низькому рівні) |
Примітка
A8–A11 — виключно аналогові контакти на виводах _C мікроконтролера STM32H747 — вони не мають функції GPIO та можуть зчитуватися лише через АЦП.
Виводи живлення¶
Контакти роз’єму Mega:
VIN — вхід 6–32 В. Живить плату через вбудований знижувальний регулятор.
+5V — шина 5 В, що подається від USB через діод або вбудований знижувальний регулятор.
+3V3 — основна шина 3,3 В.
IOREF — відображає напругу вводу/виводу плати (3,3 В).
AREF — аналоговий опорний сигнал напруги для виводів АЦП. За замовчуванням 3,3 В; підключіть зовнішній джерело для використання іншого опорного рівня.
OFF — підтягніть до GND, щоб вимкнути шину +3,3 В та знеструмити систему.
VRTC — вхід для монетної батарейки 3,0 В (максимум 3,3 В), що підтримує роботу внутрішнього RTC при вимкненому живленні решти плати.
GND — спільна земля.
Giga R1 може живитися через будь-який з наступних шляхів:
USB‑C — подає 5 В на вбудований знижувальний регулятор.
Вивід VIN — подайте стабілізоване живлення 6–32 В безпосередньо.
Порада
Скористайтесь калькулятором часу роботи від батареї, щоб розрахувати, як довго Giga R1 працюватиме від батареї при заданому циклі активності / глибокого сну.
Виводи відновлення та налагодження¶
RESET — виводиться як контакт на роз’ємі живлення та як кнопка на верхній частині плати, підключений до лінії NRST мікроконтролера. Підтягніть до GND або натисніть кнопку для скидання.
Giga R1 використовує стандартне подвійне натискання кнопки скидання Arduino для входу в завантажувач Arduino. Швидко натисніть кнопку RESET двічі — плата повторно перелічиться через USB як пристрій DFU, і OpenMV IDE зможе прошити новий образ мікропрограми.
Якщо завантажувач відсутній, утримуйте кнопку BOOT0 під час натискання RESET, щоб примусово перевести мікроконтролер у режим ROM завантажувача.
Сигнали STM32 SWD виведені на 10-контактний відладочний роз’єм Cortex Debug з кроком 1,27 мм на передній панелі плати. Підключіть їх через SEGGER J‑Link, ST‑Link або будь-який стандартний зонд ARM JTAG/SWD. Усі сигнали налагодження мають опорну напругу 3,3 В.
Вбудовані периферійні пристрої¶
Світлодіоди¶
Giga R1 має один призначений для користувача RGB LED, керований програмно через machine.LED
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
Окремий індикаторний світлодіод на платі світиться, коли шина +3,3 В активна, і не підлягає керуванню користувачем.
Роз’єм камери (J6)¶
J6 — 22-контактний гнучкий роз’єм камери, сумісний з Arducam. Підключіть будь-який з підтримуваних модулів датчиків — мікропрограма автоматично визначить їх через модуль 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()
Підтримувані датчики:
OV5640 — 5 Мп, кольоровий, до QSXGA (2592 × 1944).
OV7670 — 0,3 Мп, кольоровий, до VGA (640 × 480).
GC2145 — 2 Мп, кольоровий, до UXGA (1600 × 1200).
HM01B0 — 320 × 320, монохромний.
HM0360 — VGA (640 × 480), монохромний.
Попередження
Поки камера ініціалізована, наступні виводи роз’єму Mega зайняті мікропрограмою і не можуть використовуватися:
Вивід |
Причина |
|---|---|
|
Дані DCMI + сигнали синхронізації на гнучкому роз’ємі камери |
|
TIM1 CH3 — тактовий сигнал камери |
|
GPIO скидання камери |
|
GPIO вимкнення живлення камери |
|
I²C 4 — спільна з камерою; шина доступна, але уникайте I²C-адреси датчика |
Машинне навчання¶
ml — Машинне навчання запускає квантовані моделі TFLite на Cortex‑M7 з ядрами CMSIS‑NN — достатньо швидко для компактних детекторів на кількох кадрах на секунду. Моделі на файловій системі /rom (лише для читання) завантажуються безпосередньо з флеш-пам’яті без копіювання в RAM. Приклад детектора облич BlazeFace 128×128, що накладає виявлені обличчя та шість орієнтирів на кожний кадр:
import csi
import time
import ml
from ml.postprocessing.mediapipe import BlazeFace
# Initialize the sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))
# Load built-in face detection model
model = ml.Model("/rom/blazeface_front_128.tflite", postprocess=BlazeFace(threshold=0.4))
print(model)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
for r, score, keypoints in model.predict([img]):
ml.utils.draw_predictions(img, [r], ("face",), ((0, 0, 255),), format=None)
ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))
print(clock.fps(), "fps")
Ядро M4¶
Ядро Cortex‑M4 доступне через openamp для міжпроцесорного зв’язку. Мікропрограма OpenMV працює лише на M7; ядро M4 не має власного середовища виконання MicroPython, тому для його використання потрібно зібрати окремий образ C-мікропрограми та завантажити його з файлової системи через openamp.RemoteProc. Приклад готового мікропрограмного забезпечення, що реалізує віртуальний кінцевий пристрій UART, доступний у репозиторії openamp_vuart — дотримуйтесь інструкцій README для збірки vuart.elf
import openamp
import time
def ept_recv_callback(src_addr, data):
print("Received:", data.decode())
ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)
rproc = openamp.RemoteProc("vuart.elf")
rproc.start()
count = 0
while True:
if ept.is_ready():
ept.send("Hello World %d!" % count, timeout=1000)
count += 1
time.sleep_ms(1000)
На практиці цю підтримку краще розглядати як демонстрацію інтерфейсу openamp, а не як повноцінну двоядерну платформу — ядро M4 не може скидатися незалежно від M7, тому зупинка M4 призводить до повного перезавантаження системи.
Дисплей (J5)¶
J5 — роз’єм MIPI‑DSI для Arduino Giga Display Shield — ємнісної сенсорної панелі 480 × 800, побудованої на базі драйвера панелі ST7701 та контролера сенсорного екрана GT911. Обидва драйвери поставляються у складі мікропрограми. Використовуйте display — драйвер дисплея для виведення кадрових буферів та gt911.GT911 для обробки сенсорного вводу.
Наведений нижче приклад відображає зображення з камери у вікні дисплея 800 × 480 у портретному режимі та накладає кожен дотик як кольоровий кружок:
import csi
import time
import image
import display
from gt911 import GT911
from machine import I2C
IMG_OFFSET = 80
touch_detected = False
points_colors = ((255, 0, 0), (0, 255, 0), (0, 0, 255),
(0, 255, 255), (255, 255, 0))
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
lcd = display.DSIDisplay(
framesize=display.FWVGA,
portrait=True,
refresh=60,
controller=display.ST7701(),
)
# Pass pin names (not Pin objects) so the driver can flip
# the reset pin's direction during start-up.
touch = GT911(
I2C(4, freq=400_000),
reset_pin="D71",
irq_pin="D70",
touch_points=5,
refresh_rate=240,
reverse_x=True,
touch_callback=lambda pin: globals().update(touch_detected=True),
)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
if touch_detected:
n, points = touch.read_points()
for i in range(n):
img.draw_circle(
(points[i][0] - IMG_OFFSET,
points[i][1],
points[i][2] * 3),
color=points_colors[points[i][3]],
thickness=2,
)
touch_detected = False
lcd.write(img, y=IMG_OFFSET, hint=image.TRANSPOSE | image.VFLIP)
print(clock.fps())
Попередження
Giga Display Shield використовує ту саму шину I²C 4 (SDA1/SCL1), що й камера, D74 для ввімкнення підсвічування LCD, D70/D71 для переривання та скидання сенсорного введення GT911, а також D68/D69 для сигналів TE та RESET DSI-панелі.
Мікрофон (Display Shield)¶
Arduino Giga Display Shield містить цифровий мікрофон, підключений до периферійного пристрою DFSDM мікроконтролера STM32H747 (тактовий сигнал мікрофона на D75, дані мікрофона на D73). Мікрофон захоплюється через audio — Аудіомодуль. Кожен буфер надходить як bytearray у форматі PCM зі знаком 16 біт, готовий для передачі в ulab/numpy для цифрової обробки сигналів:
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
IMU (Display Shield)¶
Arduino Giga Display Shield містить 6-осьовий IMU Bosch BMI270 (3D акселерометр + 3D гіроскоп) на тій самій шині I²C 4 за адресою 0x68. Для зчитування використовуйте драйвер від спільноти micropython_bmi270
import time
from machine import I2C
from micropython_bmi270 import bmi270
sensor = bmi270.BMI270(I2C(4, freq=400_000))
sensor.load_config_file()
while True:
ax, ay, az = sensor.acceleration # m/s²
gx, gy, gz = sensor.gyro
print(ax, ay, az, gx, gy, gz)
time.sleep_ms(100)
Повна карта регістрів міститься в даташиті BMI270.
RGB LED (Display Shield)¶
Arduino Giga Display Shield містить вбудований RGB LED, керований драйвером LED ISSI IS31FL3197 з 3 каналами на тій самій шині I²C 4. Вивід AD драйвера підключений до GND, тому він знаходиться за I²C-адресою 0x50. Для керування LED використовуйте драйвер від спільноти IS31FL3197
from machine import I2C
from is31fl3197 import IS31FL3197
led = IS31FL3197(I2C(4, freq=400_000))
led.set_color(255, 0, 0) # full red
Повна карта регістрів міститься в даташиті IS31FL3197.
Wi‑Fi¶
Вбудований Murata 1DX (CYW4343W) доступний через network — налаштування мережі як інтерфейс станції. Підключіть антену до роз’єму U.FL на платі перед активацією радіомодуля:
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¶
Той самий Murata 1DX також підтримує Bluetooth LE 5.1. Використовуйте aioble — Async BLE для BLE у стилі asyncio — наприклад, оголосіть пристрій як периферійний і очікуйте підключення центрального пристрою:
import asyncio
import aioble
async def run():
while True:
conn = await aioble.advertise(250_000, name="Giga-R1")
print("Connected:", conn.device)
await conn.disconnected()
asyncio.run(run())
Довідник по шинах¶
GPIO¶
Використовуйте machine.Pin для читання або керування будь-яким із підписаних виводів. Виходи працюють на рівні 3,3 В CMOS та можуть пропускати/подавати до 20 мА на вивід (140 мА загально по всьому роз’єму).
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 |
Назва Arduino |
|---|---|---|---|
UART1 |
D1 |
D0 |
Serial1 |
UART6 |
D14 |
D15 |
Serial2 |
UART4 |
D16 |
D17 |
Serial3 |
UART2 |
D18 |
D19 |
Serial4 |
from machine import UART
uart = UART(1, baudrate=115200)
uart.write("hello")
uart.read(5)
I²C¶
Шина |
SCL |
SDA |
|---|---|---|
I2C2 |
D21 |
D20 |
I2C1 |
D8 |
D9 |
I2C4 |
SCL1 |
SDA1 |
from machine import I2C
i2c = I2C(2, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")
Шина 2 (D20/D21, підписані контакти SCL/SDA) — це стандартна шина Arduino Wire. Шина 4 (SCL1/SDA1) спільна з камерою та контролером сенсорного екрана GT911 дисплея Giga Display Shield — пристрої користувача на цій шині мають уникати наступних адрес (7-бітних):
0x3C— OV5640 / GC21450x24— HM01B0 / HM03600x21— OV76700x5D— контролер сенсорного екрана GT911 (Giga Display Shield)
Те саме апаратне забезпечення також можна використовувати в режимі ведений (підлеглий) через machine.I2CTarget, щоб надати доступ до області пам’яті іншому контролеру I²C:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Шина |
MOSI |
MISO |
SCK |
|---|---|---|---|
SPI1 |
D90 |
D89 |
D91 |
SPI5 |
D11 |
D12 |
D13 |
SPI1 виведено на окремий 6-контактний роз’єм на передній панелі плати. SPI5 виведено на підписані контакти COPI/CIPO/SCK на D11/D12/D13.
Примітка
Розпіновка переднього 6-контактного роз’єму SPI1 (J7):
Вивід |
Сигнал |
|---|---|
1 |
|
2 |
+5V |
3 |
|
4 |
|
5 |
NRST |
6 |
GND |
from machine import SPI
from machine import Pin
spi = SPI(5, baudrate=10_000_000)
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)
CAN (FDCAN)¶
Шина |
TX |
RX |
|---|---|---|
FDCAN2 |
D94 |
D93 |
from machine import CAN
can = CAN(2, 500_000)
can.set_filters(None)
can.send(0x123, b"\xDE\xAD\xBE\xEF")
print(can.recv())
АЦП¶
Giga R1 надає дванадцять 12-бітних каналів АЦП на A0–A11, всі з опорною напругою 3,3 В — read_u16 повертає 0–65535 для діапазону 0–3,3 В на виводі. A8–A11 — виключно аналогові контакти _C без функції GPIO:
from machine import ADC
import time
adc = ADC("A0")
while True:
voltage = adc.read_u16() * 3.3 / 65535
print(voltage)
time.sleep_ms(100)
Примітка
A7 також підключений до входу мікрофона на аудіороз’ємі TRRS 3,5 мм — коли навушники підключені, ADC("A7") зчитує аналоговий сигнал мікрофона безпосередньо.
ЦАП¶
Два 12-бітних канали ЦАП доступні на DAC0 та DAC1 через pyb.DAC. Обидва підключені до аудіороз’єму TRRS 3,5 мм як лівий та правий канали лінійного виходу
from pyb import DAC
left = DAC("DAC0")
right = DAC("DAC1")
left.write(int(0.5 * 255)) # 8‑bit, ~1.65 V
right.write(int(0.5 * 255))
ШІМ¶
Вивід |
Таймер / канал |
|---|---|
D0 |
TIM4 CH2 / TIM17 CH1N |
D1 |
TIM1 CH2 |
D2 |
TIM2 CH4 / TIM5 CH4 / TIM15 CH2 |
D3 |
TIM2 CH3 / TIM5 CH3 / TIM15 CH1 |
D4 |
TIM1 CH3N / TIM8 CH1 |
D5 |
TIM1 CH1N / TIM3 CH2 / TIM8 CH1N / TIM14 CH1 |
D6 |
TIM4 CH2 |
D7 |
TIM3 CH1 |
D8 |
TIM4 CH3 / TIM16 CH1 |
D9 |
TIM4 CH4 / TIM17 CH1 |
D10 |
TIM1 CH1 / TIM8 CH3N |
D11 |
TIM1 CH2N / TIM8 CH2 |
D12 |
TIM1 CH2 / TIM8 CH2N |
D13 |
TIM12 CH1 |
D15 |
TIM3 CH2 / TIM8 CH2 |
D16 |
TIM8 CH1N |
D20 |
TIM2 CH4 |
D37 |
TIM8 CH2 |
D38 |
TIM8 CH2N |
D40 |
TIM15 CH2 |
D46 |
TIM8 CH3N |
D48 |
TIM1 CH1N / TIM8 CH3 |
D51 |
TIM15 CH1 |
D54 |
TIM8 CH1 |
D56 |
TIM3 CH1 / TIM13 CH1 |
D57 |
TIM1 CH3 / TIM8 CH1N |
D58 |
TIM8 CH3 |
D59 |
TIM8 CH2 |
D61 |
TIM8 CH2N |
D63 |
TIM5 CH2 |
D64 |
TIM5 CH1 |
D65 |
TIM12 CH2 |
D68 |
TIM3 CH1 / TIM8 CH1 |
D69 |
TIM5 CH4 |
D71 |
TIM8 CH4 |
D78 / A2 |
TIM1 CH2N / TIM3 CH3 / TIM8 CH2N |
D79 / A3 |
TIM1 CH3N / TIM3 CH4 / TIM8 CH3N |
D83 / A7 |
TIM2 CH1 / TIM5 CH1 |
D85 / A13 |
TIM2 CH1 / TIM8 CH1N |
Керуйте будь-яким з них через machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("D2"), freq=1_000, duty_u16=32768)
Попередження
TIM1 зарезервований для тактового сигналу камери, коли камера ініціалізована через csi — датчики камери. Виводи, єдина функція ШІМ яких — TIM1 (D1, D10, D11, D12), не можуть використовуватись для ШІМ, поки активна камера. Усі інші перелічені виводи мають альтернативи без TIM1.
Примітка
Деякі виводи поділяють канали таймера:
TIM2 CH4 — на
D2таD20.TIM2 CH1 — на
D83/A7таD85/A13.TIM3 CH1 — на
D7,D56таD68.TIM3 CH2 — на
D5таD15.TIM4 CH2 — на
D0таD6.TIM5 CH1 — на
D64таD83/A7.TIM5 CH4 — на
D2таD69.TIM8 CH1 — на
D4,D54таD68.TIM8 CH1N — на
D5,D16,D57таD85/A13.TIM8 CH2 — на
D11,D15,D37таD59.TIM8 CH2N — на
D12,D38,D61таD78/A2.TIM8 CH3 — на
D48таD58.TIM8 CH3N — на
D10,D46таD79/A3.TIM15 CH1 — на
D3таD51.TIM15 CH2 — на
D2таD40.
Виберіть одного споживача на канал таймера.
Програмні шини з побітовою передачею¶
machine.SoftI2C та machine.SoftSPI працюють на будь-якому GPIO, якщо потрібна додаткова шина.
Тепловий датчик (зовнішній)¶
Мікропрограма включає драйвер fir — драйвер теплового датчика (fir == далекий інфрачервоний діапазон) для зовнішньо підключених теплових імагерів:
MLX90621 — ІЧ-матриця 16 × 4
MLX90640 — ІЧ-матриця 32 × 24
MLX90641 — ІЧ-матриця 16 × 12
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 1 — підключіть модуль до D8 (SCL) та D9 (SDA).
Час¶
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 як ідентифікатор для використання програмного (virtual) таймера:
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"))
Значення periodу задаються в мілісекундах. Викличте deinit(), щоб зупинити та звільнити слот.
Годинник реального часу¶
machine.RTC зберігає астрономічний час між перезавантаженнями — та при повному вимкненні живлення, якщо монетна батарейка підключена до виводу VRTC
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()
Інформація про завантаження та середовище виконання¶
Оновлення мікропрограми (DFU)¶
Giga R1 використовує стандартне подвійне натискання кнопки скидання Arduino для входу в завантажувач Arduino. Швидко натисніть кнопку RESET двічі — плата повторно перелічиться через USB як пристрій DFU, і OpenMV IDE зможе прошити новий образ мікропрограми. Якщо завантажувач відсутній, утримуйте кнопку BOOT0 під час натискання RESET, щоб примусово перевести мікроконтролер у режим ROM завантажувача.
Запущений скрипт може повернутися до завантажувача на вимогу, викликавши machine.bootloader()
import machine
machine.bootloader()
Файлова система та порядок завантаження¶
Мікропрограма Giga R1 монтує до двох файлових систем при завантаженні:
Внутрішня флеш-пам’ять — завжди монтується в
/flash. За замовчуванням міститьmain.pyтаREADME.txt; створюється при першому завантаженні.ROMFS — файлова система лише для читання з відображенням у пам’яті, змонтована в
/romта автоматично підключена MicroPython при старті.
Після монтування робочий каталог встановлюється в /flash. Інтерпретатор запускає скрипти з цього каталогу:
boot.pyвиконується при кожному м’якому скиданні (холодне завантаження,Ctrl‑Dз REPL або щоразу, коли запущений скрипт завершується).main.pyвиконується лише при холодному завантаженні, одразу післяboot.py. Наступні м’які скидання повторно запускаютьboot.py, але одразу переходять до REPL — щоб повторно виконатиmain.py, потрібно повністю перезавантажити плату.
Стандартний main.py, що постачається на свіжо прошитій платі, просто блимає синім каналом RGB LED як серцебиття (два коротких спалахи, коротка пауза), щоб можна було переконатися в успішному завантаженні мікропрограми без підключення хоста.
sys.path розширено для включення обох файлових систем та їх підкаталогів lib/, тому імпортовані модулі можуть розташовуватись у /flash/lib або /rom/lib.
При підключенні через USB, /flash також відображається як USB-накопичувач на хості, що дозволяє редагувати boot.py, main.py та будь-які інші файли безпосередньо. Від’єднайте диск перед скиданням плати, щоб хост записав кешовані дані.
Примітка
Оскільки ОС сприймає диск як пасивний блоковий пристрій, файли, створені або змінені кодом, що виконується на камері, не відображатимуться, поки хост не перемонтує диск. Якщо ОС і камера одночасно записують у ту саму файлову систему, ОС переможе та перезапише зміни, зроблені камерою.
Примітка
Червоний канал RGB LED може короткочасно засвітитися, поки хост читає або записує на USB-накопичувач — це індикатор активності, керований мікропрограмою, а не помилка.
Розміри сховища¶
Giga R1 постачається з:
/flash— FAT-файлова система 11 МБ, читання/запис./rom— ROMFS 4 МБ лише для читання з відображенням у пам’яті, використовується для скриптів і моделей МН, що виграють від доступу mmap без копіювання.
Індикатор апаратного збою¶
Якщо RGB LED швидко перебирає всі кольори — достатньо швидко, щоб виглядати як мерехтливий білий світлодіод, а не як чіткі відтінки — мікропрограма зіткнулась з невиправним апаратним збоєм. Перепрошийте мікропрограму для відновлення; якщо перепрошивка не допомагає, плата може бути фізично пошкоджена.
Програмні бібліотеки¶
Повний список модулів, включаючи ті, що є унікальними для збірки Giga R1, дивіться в індексі бібліотек.