Arduino Giga R1 WiFi¶
Arduino Giga R1 WiFi je deska o rozměrech 101 × 53 mm ve formátu Mega, postavená kolem čipu STMicroelectronics STM32H747XI — dvoujádrového SoC kombinujícího Cortex‑M7 na 480 MHz s Cortex‑M4 na 240 MHz. Firmware OpenMV běží zcela na jádře M7. Giga přidává ke standardnímu rozložení konektorů Arduino Mega 22pinový flex konektor pro kameru Arducam, konektor MIPI‑DSI pro Arduino Giga Display Shield a 3,5mm stereofonní audio jack.
Kompletní datasheet, fotografie a rozměry najdete na produktové stránce Arduino Giga R1 WiFi.
Hlavní vlastnosti¶
STMicroelectronics STM32H747XI dvojice Cortex‑M7 (480 MHz) + Cortex‑M4 (240 MHz). Firmware OpenMV běží pouze na jádře M7; jádro M4 je zpřístupněno přes openamp pro meziprocesorovou komunikaci.
8 MB externí SDRAM plus 2 MB interní flash paměti a 16 MB externí QSPI flash paměti.
Hardwarový JPEG kodér/dekodér.
22pinový flex konektor pro kameru kompatibilní s Arducam (
J6) — podpora ovladačů pro senzorové moduly OV5640 (5MP), OV7670, GC2145, HM01B0 a HM0360.Konektor pro displej MIPI‑DSI (
J5) pro Arduino Giga Display Shield (kapacitní dotykový panel 480×800) plus zobrazovací jednotka LTDC RGB pro pokročilé nosné desky.3,5mm audio jack se stereofonním line‑out a vstupem pro mikrofon.
Wi‑Fi b/g/n (2,4 GHz) + Bluetooth LE 5.1 prostřednictvím modulu Murata 1DX (CYW4343W) — připojuje se k dodané anténě přes integrovaný U.FL konektor.
USB‑C (full‑speed) pro napájení / sériovou komunikaci / programování.
Uživatelské I/O na konektorech ve stylu Mega —
D0–D75(digitální),A0–A11(analogové),DAC0/DAC1(výstupy DAC),CAN_RX/CAN_TX(FDCAN2) a dvojice I²CSDA1/SCL1ve vnitřní řadě. Samostatný 6pinový konektor SPI1 na přední straně desky vyvádíCIPO/COPI/SCK(D89/D90/D91).JTAG / SWD vyvedené na horním ladicím konektoru pro pokročilé ladění.
Pinout¶
Referenční přehled pinů¶
Konektory ve stylu Arduino Mega vyvádějí 76 digitálních pinů (D0–D75), 12 analogových pinů (A0–A11), dva výstupy DAC (DAC0/DAC1), sekundární dvojici I²C (SDA1/SCL1) a dvojici FDCAN2 (CAN_RX/CAN_TX). Samostatný 6pinový konektor SPI1 na přední straně desky vyvádí CIPO/COPI/SCK (D89/D90/D91).
Název pinu |
Reference |
Funkce |
|---|---|---|
D0 |
3,3 V |
USART1 RX (Serial1) / TIM4 CH2 |
D1 |
3,3 V |
USART1 TX (Serial1) / TIM1 CH2 |
D2 |
3,3 V |
TIM2 CH4 / TIM5 CH4 / USART2 RX |
D3 |
3,3 V |
TIM2 CH3 / TIM5 CH3 / USART2 TX |
D4 |
3,3 V |
TIM8 CH1 / UART8 TX |
D5 |
3,3 V |
TIM3 CH2 / SPI1 MOSI / SPI6 MOSI |
D6 |
3,3 V |
TIM4 CH2 |
D7 |
3,3 V |
TIM3 CH1 / SPI1 MISO / SPI3 MISO / SPI6 MISO |
D8 |
3,3 V |
TIM4 CH3 / I2C1 SCL / I2C4 SCL / UART4 RX |
D9 |
3,3 V |
TIM4 CH4 / I2C1 SDA / I2C4 SDA / UART4 TX |
D10 |
3,3 V |
TIM1 CH1 / TIM8 CH3N |
D11 |
3,3 V |
TIM8 CH2 / SPI5 MOSI |
D12 |
3,3 V |
TIM8 CH2N / SPI5 MISO |
D13 |
3,3 V |
TIM12 CH1 / SPI5 SCK |
D14 |
3,3 V |
USART6 TX (Serial2) / SPI6 MOSI |
D15 |
3,3 V |
USART6 RX (Serial2) / TIM3 CH2 / TIM8 CH2 |
D16 |
3,3 V |
UART4 TX (Serial3) / TIM8 CH1N |
D17 |
3,3 V |
UART4 RX (Serial3) |
D18 |
3,3 V |
USART2 TX (Serial4) |
D19 |
3,3 V |
USART2 RX (Serial4) / SPI3 MOSI |
D20 |
3,3 V |
I2C2 SDA / TIM2 CH4 / USART3 RX |
D21 |
3,3 V |
I2C2 SCL |
D22 |
3,3 V |
GPIO |
D23 |
3,3 V |
GPIO / SPI6 SCK |
D24 |
3,3 V |
GPIO / SPI6 MISO |
D25 |
3,3 V |
GPIO |
D26 |
3,3 V |
GPIO |
D27 |
3,3 V |
GPIO |
D28 |
3,3 V |
GPIO |
D29 |
3,3 V |
GPIO |
D30 |
3,3 V |
GPIO |
D31 |
3,3 V |
GPIO |
D32 |
3,3 V |
GPIO |
D33 |
3,3 V |
GPIO |
D34 |
3,3 V |
GPIO |
D35 |
3,3 V |
GPIO |
D36 |
3,3 V |
GPIO |
D37 |
3,3 V |
TIM8 CH2 |
D38 |
3,3 V |
TIM8 CH2N |
D39 |
3,3 V |
GPIO |
D40 |
3,3 V |
TIM15 CH2 / SPI4 MOSI |
D41 |
3,3 V |
GPIO |
D42 |
3,3 V |
GPIO |
D43 |
3,3 V |
GPIO |
D44 |
3,3 V |
GPIO |
D45 |
3,3 V |
GPIO |
D46 |
3,3 V |
TIM8 CH3N |
D47 |
3,3 V |
SPI3 MOSI |
D48 |
3,3 V |
TIM8 CH3 / SPI5 SCK |
D49 |
3,3 V |
GPIO |
D50 |
3,3 V |
GPIO |
D51 |
3,3 V |
TIM15 CH1 / SPI4 MISO |
D52 |
3,3 V |
GPIO |
D53 |
3,3 V |
GPIO |
D54 |
3,3 V |
TIM8 CH1 (VSYNC DCMI kamery) |
D55 |
3,3 V |
I2C3 SDA (HSYNC DCMI kamery) |
D56 |
3,3 V |
TIM3 CH1 / TIM13 CH1 (PXCLK DCMI kamery) |
D57 |
3,3 V |
TIM8 CH1N / UART8 RX (hlavní hodiny kamery — TIM1 CH3) |
D58 |
3,3 V |
TIM8 CH3 (DCMI D7 kamery) |
D59 |
3,3 V |
TIM8 CH2 (DCMI D6 kamery) |
D60 |
3,3 V |
GPIO (DCMI D5 kamery) |
D61 |
3,3 V |
TIM8 CH2N / UART4 RX (DCMI D4 kamery) |
D62 |
3,3 V |
SPI1 SCK (DCMI D3 kamery) |
D63 |
3,3 V |
TIM5 CH2 / I2C4 SCL (I²C displeje) |
D64 |
3,3 V |
TIM5 CH1 (DCMI D1 kamery) |
D65 |
3,3 V |
TIM12 CH2 (DCMI D0 kamery) |
D66 |
3,3 V |
GPIO (reset kamery — vyhrazeno, když je kamera aktivní) |
D67 |
3,3 V |
GPIO (vypnutí kamery — vyhrazeno, když je kamera aktivní) |
D68 |
3,3 V |
TIM3 CH1 / TIM8 CH1 / USART6 TX (DSI RESET Display Shieldu) |
D69 |
3,3 V |
TIM5 CH4 (DSI TE Display Shieldu) |
D70 |
3,3 V |
SPI2 SCK |
D71 |
3,3 V |
TIM8 CH4 / SPI2 MISO |
D72 |
3,3 V |
SPI2 MOSI |
D73 |
3,3 V |
ADC123 IN11 (data mikrofonu DFSDM Display Shieldu) |
D74 |
3,3 V |
GPIO (podsvícení displeje — vyhrazeno Giga Display Shieldem) |
D75 |
3,3 V |
SPI2 SCK (hodiny mikrofonu DFSDM Display Shieldu) |
A0 / D76 |
3,3 V |
ADC12 IN4 |
A1 / D77 |
3,3 V |
ADC12 IN8 |
A2 / D78 |
3,3 V |
ADC12 IN9 / TIM3 CH3 / TIM8 CH2N |
A3 / D79 |
3,3 V |
ADC12 IN5 / TIM3 CH4 / TIM8 CH3N |
A4 / D80 |
3,3 V |
ADC12 IN13 / SPI2 MOSI |
A5 / D81 |
3,3 V |
ADC123 IN12 / SPI2 MISO |
A6 / D82 |
3,3 V |
ADC123 IN10 |
A7 / D83 |
3,3 V |
ADC1 IN16 / TIM2 CH1 / TIM5 CH1 (vstup mikrofonu audio jacku) |
A8 |
3,3 V |
ADC3 IN0 (pouze analogový) |
A9 |
3,3 V |
ADC3 IN1 (pouze analogový) |
A10 |
3,3 V |
ADC12 IN1 (pouze analogový) |
A11 |
3,3 V |
ADC12 IN0 (pouze analogový) |
DAC0 / A12 / D84 |
3,3 V |
DAC1 OUT1 / ADC12 IN18 (line‑out L audio jacku) |
DAC1 / A13 / D85 |
3,3 V |
DAC1 OUT2 / TIM2 CH1 / SPI1 SCK / ADC12 IN19 (line‑out R audio jacku) |
D89 |
3,3 V |
SPI1 MISO ( |
D90 |
3,3 V |
SPI1 MOSI ( |
D91 |
3,3 V |
SPI1 SCK ( |
CAN_RX / D93 |
3,3 V |
FDCAN2 RX / TIM3 CH2 / UART5 RX |
CAN_TX / D94 |
3,3 V |
FDCAN2 TX / SPI2 SCK / UART5 TX |
SDA1 / D102 |
3,3 V |
I2C4 SDA (sběrnice dotyku displeje / ovládání kamery) |
SCL1 / D101 |
3,3 V |
I2C4 SCL (sběrnice dotyku displeje / ovládání kamery) |
RESET |
3,3 V |
stiskněte tlačítko RESET na desce nebo stáhněte na GND pro reset |
LED_RED |
3,3 V |
červený kanál RGB LED (aktivní v nízké úrovni) |
LED_GREEN |
3,3 V |
zelený kanál RGB LED (aktivní v nízké úrovni) |
LED_BLUE |
3,3 V |
modrý kanál RGB LED (aktivní v nízké úrovni) |
Poznámka
A8–A11 jsou pouze analogové plošky na pinech _C čipu STM32H747 — nemají žádnou funkci GPIO a lze je číst pouze přes ADC.
Napájecí piny¶
Piny konektoru Mega:
VIN — vstup 6–32 V. Napájí desku přes integrovaný snižující regulátor.
+5V — větev 5 V napájená z USB přes diodu nebo z integrovaného snižujícího regulátoru.
+3V3 — hlavní větev 3,3 V.
IOREF — odráží I/O napětí desky (3,3 V).
AREF — referenční analogové napětí pro piny ADC. Výchozí hodnota je 3,3 V; pro použití jiné reference přiveďte napětí externě.
OFF — stáhněte na GND pro vypnutí větve +3,3 V a odstavení systému.
VRTC — vstup pro knoflíkovou baterii 3,0 V (max 3,3 V), který udržuje běh integrovaných RTC, zatímco je zbytek desky vypnutý.
GND — společná zem.
Giga R1 lze napájet kterýmkoli z těchto způsobů:
USB‑C — dodává 5 V do integrovaného snižujícího regulátoru.
Pin VIN — přiveďte přímo stabilizované napájení 6–32 V.
Tip
Pomocí odhadovače výdrže baterie můžete modelovat, jak dlouho Giga R1 vydrží na baterii při daném pracovním cyklu aktivity / hlubokého spánku.
Piny pro obnovení a ladění¶
RESET — jak vyvedený pin na napájecím konektoru, tak tlačítkový spínač v horní části desky, propojený s linkou NRST čipu SoC. Stáhněte na GND nebo stiskněte tlačítko pro reset.
Giga R1 používá standardní dvojité klepnutí na reset Arduina pro vstup do bootloaderu Arduina. Rychle dvakrát stiskněte tlačítko RESET — deska se znovu zaregistruje přes USB jako zařízení DFU a OpenMV IDE může nahrát nový obraz firmwaru.
Pokud bootloader zcela chybí, podržte tlačítko BOOT0 při stisknutí RESET, abyste přinutili SoC přejít do režimu ROM bootloaderu.
Signály SWD čipu STM32 jsou vyvedeny na 10pinovém Cortex Debug konektoru s roztečí 1,27 mm na přední straně desky. Propojte je pomocí SEGGER J‑Link, ST‑Link nebo libovolné standardní ARM JTAG/SWD sondy. Všechny ladicí signály mají referenci 3,3 V.
Integrované periferie¶
LED diody¶
Giga R1 má jednu uživatelskou RGB LED, softwarově ovladatelnou přes machine.LED
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
Samostatná napájecí LED na desce svítí vždy, když je větev +3,3 V aktivní, a není uživatelsky ovladatelná.
Konektor kamery (J6)¶
J6 je 22pinový flex konektor pro kameru kompatibilní s Arducam. Připojte kterýkoli z podporovaných senzorových modulů a firmware je automaticky detekuje přes modul csi — kamerové senzory
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()
Podporované senzory:
OV5640 — 5 MP barevný, až QSXGA (2592 × 1944).
OV7670 — 0,3 MP barevný, až VGA (640 × 480).
GC2145 — 2 MP barevný, až UXGA (1600 × 1200).
HM01B0 — 320 × 320 monochromatický.
HM0360 — VGA (640 × 480) monochromatický.
Varování
Dokud je kamera inicializovaná, jsou následující piny konektoru Mega vyhrazeny firmwarem a nelze je použít:
Pin |
Důvod |
|---|---|
|
datové a synchronizační signály DCMI na flex konektoru kamery |
|
TIM1 CH3 — hlavní hodiny kamery |
|
GPIO resetu kamery |
|
GPIO vypnutí kamery |
|
I²C 4 — sdíleno s kamerou; sběrnice je použitelná, ale vyhněte se I²C adrese senzoru |
Strojové učení¶
ml — Strojové učení spouští kvantizované modely TFLite na Cortex‑M7 s jádry CMSIS‑NN — dostatečně rychle pro kompaktní detektory při několika snímcích za sekundu. Modely na souborovém systému /rom určeném jen pro čtení se načítají přímo z flash paměti bez kopírování do RAM. Zde je 128×128 detektor BlazeFace, který do každého snímku překresluje detekovaný obličej a jeho šest význačných bodů:
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")
Jádro M4¶
Jádro Cortex‑M4 je zpřístupněno přes openamp pro meziprocesorovou komunikaci. Firmware OpenMV běží pouze na M7; M4 nemá vlastní běhové prostředí MicroPython, takže jeho použití znamená sestavit samostatný obraz C firmwaru a načíst jej ze souborového systému přes openamp.RemoteProc. Předem sestavený ukázkový firmware, který implementuje virtuální koncový bod UART, je k dispozici v repozitáři openamp_vuart — podle jeho README sestavte 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)
V praxi je nejlepší považovat tuto podporu spíše za ukázku rozhraní openamp než za funkční dvoujádrovou platformu — M4 nelze resetovat nezávisle na M7, takže zastavení M4 vynutí úplné restartování systému.
Displej (J5)¶
J5 je konektor MIPI‑DSI pro Arduino Giga Display Shield — kapacitní dotykový panel 480 × 800 postavený kolem ovladače panelu ST7701 a dotykového řadiče GT911. Oba ovladače jsou dodávány zamrazené s firmwarem. Pro přenos framebufferů použijte display — ovladač displeje a pro dotykový vstup gt911.GT911.
Níže uvedený příklad zrcadlí kameru do okna displeje na výšku o rozměrech 800 × 480 a každý dotykový kontakt překresluje jako barevný kruh:
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())
Varování
Giga Display Shield používá stejnou sběrnici I²C 4 (SDA1/SCL1) jako kamera, D74 pro povolení podsvícení LCD, D70/D71 pro dotykové IRQ a reset GT911 a D68/D69 pro signály TE a RESET DSI panelu.
Mikrofon (Display Shield)¶
Arduino Giga Display Shield nese digitální mikrofon připojený k periferii DFSDM čipu STM32H747 (hodiny mikrofonu na D75, data mikrofonu na D73). Mikrofon se snímá přes audio — Modul Audio. Každý buffer přichází jako 16bitový PCM se znaménkem ve formě bytearray, připravený k předání do ulab/numpy pro DSP:
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 nese 6osou IMU Bosch BMI270 (3D akcelerometr + 3D gyroskop) na téže sběrnici I²C 4 na adrese 0x68. Pro její čtení použijte komunitní ovladač 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)
Kompletní mapa registrů je v datasheetu BMI270.
RGB LED (Display Shield)¶
Arduino Giga Display Shield nese integrovanou RGB LED řízenou tříkanálovým LED driverem ISSI IS31FL3197 na téže sběrnici I²C 4. Pin AD driveru je propojen s GND, takže sídlí na I²C adrese 0x50. Pro ovládání LED použijte komunitní ovladač IS31FL3197
from machine import I2C
from is31fl3197 import IS31FL3197
led = IS31FL3197(I2C(4, freq=400_000))
led.set_color(255, 0, 0) # full red
Kompletní mapa registrů je v datasheetu IS31FL3197.
Wi‑Fi¶
Integrovaný modul Murata 1DX (CYW4343W) je zpřístupněn přes network — konfigurace sítě jako stanicové rozhraní. Před aktivací rádia připojte dodanou anténu k integrovanému U.FL konektoru
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¶
Tentýž Murata 1DX zpřístupňuje také Bluetooth LE 5.1. Pro BLE přívětivé k asyncio použijte aioble — Asynchronní BLE — například inzerujte jako periferie a čekejte na připojení centrálního zařízení:
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())
Přehled sběrnic¶
GPIO¶
Pomocí machine.Pin můžete číst nebo řídit kterýkoli z pinů popsaných na potisku. Výstupy jsou 3,3 V CMOS a mohou pohlcovat/dodávat až 20 mA na pin (140 mA celkem na celém konektoru).
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())
Kterýkoli vstupní pin může také vyvolat přerušení při přechodu hrany:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Sběrnice |
TX |
RX |
Název 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¶
Sběrnice |
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")
Sběrnice 2 (D20/D21, na potisku SCL/SDA) je výchozí sběrnice Wire Arduina. Sběrnice 4 (SCL1/SDA1) je sdílená s kamerou a dotykovým řadičem GT911 Giga Display Shieldu — uživatelská zařízení na této sběrnici se musí vyhnout následujícím adresám (7bitovým):
0x3C— OV5640 / GC21450x24— HM01B0 / HM03600x21— OV76700x5D— dotykový řadič GT911 (Giga Display Shield)
Tentýž hardware lze použít také v cílovém režimu (slave) přes machine.I2CTarget pro zpřístupnění paměťové oblasti jinému řadiči I²C:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Sběrnice |
MOSI |
MISO |
SCK |
|---|---|---|---|
SPI1 |
D90 |
D89 |
D91 |
SPI5 |
D11 |
D12 |
D13 |
SPI1 je vyvedeno na vyhrazeném 6pinovém konektoru na přední straně desky. SPI5 je vyvedeno na potiskem označených COPI/CIPO/SCK na D11/D12/D13.
Poznámka
Pinout předního 6pinového konektoru SPI1 (J7):
Pin |
Signál |
|---|---|
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)¶
Sběrnice |
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())
ADC¶
Giga R1 vyvádí dvanáct 12bitových kanálů ADC na A0–A11, všechny s referencí 3,3 V — read_u16 vrací 0–65535 v rozsahu 0–3,3 V na pinu. A8–A11 jsou pouze analogové plošky _C bez periferie 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)
Poznámka
A7 je také propojeno se vstupem mikrofonu na 3,5mm TRRS audio jacku — když je zapojeno sluchátko s mikrofonem, ADC("A7") čte analogový signál mikrofonu přímo.
DAC¶
Dva 12bitové kanály DAC jsou vyvedeny na DAC0 a DAC1 přes pyb.DAC. Oba jsou propojeny s 3,5mm TRRS audio jackem jako levý a pravý kanál line‑out
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))
PWM¶
Pin |
Časovač / kanál |
|---|---|
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 |
Řiďte kterýkoli z nich přes machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("D2"), freq=1_000, duty_u16=32768)
Varování
TIM1 je vyhrazen pro hlavní hodiny kamery, když je kamera inicializována přes csi — kamerové senzory. Piny, jejichž jedinou funkcí PWM je TIM1 — D1, D10, D11, D12 — nelze řídit pomocí PWM, dokud je kamera aktivní. Všechny ostatní uvedené piny mají alternativy mimo TIM1.
Poznámka
Několik pinů sdílí kanály časovačů:
TIM2 CH4 je na
D2aD20.TIM2 CH1 je na
D83/A7aD85/A13.TIM3 CH1 je na
D7,D56aD68.TIM3 CH2 je na
D5aD15.TIM4 CH2 je na
D0aD6.TIM5 CH1 je na
D64aD83/A7.TIM5 CH4 je na
D2aD69.TIM8 CH1 je na
D4,D54aD68.TIM8 CH1N je na
D5,D16,D57aD85/A13.TIM8 CH2 je na
D11,D15,D37aD59.TIM8 CH2N je na
D12,D38,D61aD78/A2.TIM8 CH3 je na
D48aD58.TIM8 CH3N je na
D10,D46aD79/A3.TIM15 CH1 je na
D3aD51.TIM15 CH2 je na
D2aD40.
Vyberte jednoho spotřebitele na kanál časovače.
Softwarově bitově emulované sběrnice¶
machine.SoftI2C a machine.SoftSPI fungují na libovolném GPIO, pokud potřebujete další sběrnici.
Termální senzor (mimo desku)¶
Firmware obsahuje ovladač fir — ovladač termálního senzoru (fir == far infrared, vzdálené infračervené záření) pro externě připojené termální kamery:
MLX90621 — IR pole 16 × 4
MLX90640 — IR pole 32 × 24
MLX90641 — IR pole 16 × 12
AMG8833 — IR pole 8 × 8
Připojte modul ke sběrnici I²C desky a načítejte snímky pomocí 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())
Ovladač fir komunikuje se senzorem pouze přes I²C 1 — připojte modul k D8 (SCL) a D9 (SDA).
Časování¶
time¶
Modul time pokrývá blokující prodlevy, monotónní tiky a měření uplynulého času:
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)
Virtuální časovače¶
machine.Timer plánuje periodické nebo jednorázové callbacky bez obsazení slotu hardwarového časovače. Pro použití virtuálního (softwarového) časovače předejte jako id hodnotu -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"))
Hodnoty periody jsou v milisekundách. Pro zastavení a uvolnění slotu zavolejte deinit().
Hodiny reálného času¶
machine.RTC udržuje aktuální čas napříč resety — a napříč úplným vypnutím napájení, pokud je k pinu VRTC připojena knoflíková baterie:
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 resetuje desku, pokud aplikace zamrzne. Jakmile je jednou spuštěn, nelze jej zastavit ani překonfigurovat — pravidelně jej obsluhujte uvnitř hlavní smyčky:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Informace o bootu a běhu¶
Aktualizace firmwaru (DFU)¶
Giga R1 používá standardní dvojité klepnutí na reset Arduina pro vstup do bootloaderu Arduina. Rychle dvakrát stiskněte tlačítko RESET — deska se znovu zaregistruje přes USB jako zařízení DFU a OpenMV IDE může nahrát nový obraz firmwaru. Pokud bootloader zcela chybí, podržte tlačítko BOOT0 při stisknutí RESET, abyste přinutili SoC přejít do režimu ROM bootloaderu.
Běžící skript může na vyžádání znovu vstoupit do bootloaderu zavoláním machine.bootloader()
import machine
machine.bootloader()
Souborový systém a pořadí bootování¶
Firmware Giga R1 při bootu připojí až dva souborové systémy:
Interní flash paměť — vždy připojená na
/flash. Ve výchozím stavu obsahujemain.pyaREADME.txt; vytvořeno při úplně prvním bootu.ROMFS — souborový systém určený jen pro čtení a mapovaný do paměti na
/rom, automaticky připojený MicroPythonem při startu.
Po připojení je pracovní adresář nastaven na /flash. Interpret poté spouští skripty z tohoto adresáře:
boot.pyse spustí při každém softwarovém resetu (studený start,Ctrl‑Dz REPL nebo kdykoli běžící skript skončí).main.pyse spustí pouze při studeném startu, ihned poboot.py. Následné softwarové resety znovu spustíboot.py, ale přejdou rovnou do REPL — pro opětovné spuštěnímain.pymusíte desku plně resetovat.
Výchozí main.py dodávaný na čerstvě naflashované desce pouze bliká modrým kanálem uživatelské RGB LED jako srdeční tep (dva krátké pulzy, krátká pauza), takže poznáte, že firmware nastartoval čistě bez připojeného hostitele.
sys.path je rozšířen tak, aby zahrnoval oba souborové systémy a jejich podadresáře lib/, takže importovatelné moduly mohou být v /flash/lib nebo /rom/lib.
Při připojení přes USB se /flash na hostiteli zaregistruje také jako velkokapacitní USB úložiště, což vám umožní přímo upravovat boot.py, main.py a další soubory. Před resetováním desky disk vysuňte, aby hostitel vyprázdnil svůj zápisový cache.
Poznámka
Protože OS zachází s diskem jako s pasivním blokovým zařízením, soubory vytvořené nebo upravené kódem běžícím na kameře se neobjeví, dokud hostitel disk znovu nepřipojí. Pokud OS i kamera zapisují do téhož souborového systému současně, OS zvítězí a přepíše změny provedené kamerou.
Poznámka
Červený kanál uživatelské RGB LED se může krátce rozsvítit, zatímco hostitel čte z velkokapacitního USB úložiště nebo do něj zapisuje — jde o indikátor aktivity řízený firmwarem, nikoli o chybu.
Velikosti úložiště¶
Giga R1 se dodává s:
/flash— FAT souborový systém o velikosti 11 MB, pro čtení i zápis./rom— 4 MB ROMFS určený jen pro čtení a mapovaný do paměti, používaný k dodávání skriptů a ML modelů, které těží z bezkopírovacího mmap přístupu.
Indikátor hard‑fault¶
Pokud uživatelská RGB LED rychle cykluje přes všechny barvy — dostatečně rychle, aby to spíše vypadalo jako třpytivá bílá LED než zřetelné odstíny — firmware narazil na neopravitelný hard fault. Pro obnovení znovu naflashujte firmware; pokud opětovné naflashování nepomůže, deska může být fyzicky poškozená.
Softwarové knihovny¶
Kompletní seznam modulů — včetně těch, které jsou jedinečné pro sestavení Giga R1 — najdete v indexu knihoven.