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

Повний даташит, фотографії та розміри дивіться на сторінці продукту 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 — D0D75 (цифрові), A0A11 (аналогові), DAC0/DAC1 (виходи ЦАП), CAN_RX/CAN_TX (FDCAN2) та внутрішня пара SDA1/SCL1 I²C. Окремий 6-контактний роз’єм SPI1 на передній панелі плати виводить CIPO/COPI/SCK (D89/D90/D91).

  • JTAG / SWD виведено на відладочний роз’єм на верхній стороні плати для розширеного налагодження.

Розпіновка

Arduino Giga R1 WiFi Pinout

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

Роз’єми у стилі Arduino Mega надають 76 цифрових виводів (D0D75), 12 аналогових виводів (A0A11), два виходи ЦАП (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 (CIPO on the front SPI header)

D90

3,3 В

SPI1 MOSI (COPI on the front SPI header)

D91

3,3 В

SPI1 SCK (SCK on the front SPI header)

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 (активний при низькому рівні)

Примітка

A8A11виключно аналогові контакти на виводах _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 зайняті мікропрограмою і не можуть використовуватися:

Вивід

Причина

D54D65

Дані DCMI + сигнали синхронізації на гнучкому роз’ємі камери

D57

TIM1 CH3 — тактовий сигнал камери

D66

GPIO скидання камери

D67

GPIO вимкнення живлення камери

SDA1 / SCL1

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 / GC2145

  • 0x24 — HM01B0 / HM0360

  • 0x21 — OV7670

  • 0x5D — контролер сенсорного екрана 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

D89 (CIPO)

2

+5V

3

D91 (SCK)

4

D90 (COPI)

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 В на виводі. A8A11 — виключно аналогові контакти _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, дивіться в індексі бібліотек.