Arduino Giga R1 WiFi¶
Arduino Giga R1 WiFi on 101 × 53 mm:n kokoinen Mega-muotoinen kortti, joka rakentuu STMicroelectronicsin STM32H747XI:n ympärille — kaksiytimisen SoC:n, jossa yhdistyvät 480 MHz:n Cortex‑M7 ja 240 MHz:n Cortex‑M4. OpenMV-laiteohjelmisto toimii kokonaan M7-ytimellä. Giga lisää standardiin Arduino Mega ‑liitinasetteluun 22-nastaisen Arducam-kameran taipuisan liittimen, MIPI‑DSI-liittimen Arduino Giga Display Shieldille sekä 3,5 mm:n stereoäänijakkin.
Täydellinen tietolomake, valokuvat ja mitat löytyvät Arduino Giga R1 WiFi ‑tuotesivulta.
Kohokohdat¶
STMicroelectronics STM32H747XI kaksi ydintä: Cortex‑M7 (480 MHz) + Cortex‑M4 (240 MHz). OpenMV-laiteohjelmisto toimii vain M7-ytimellä; M4-ydin on käytettävissä openamp ‑moduulin kautta prosessorien väliseen tiedonsiirtoon.
8 Mt ulkoista SDRAM-muistia sekä 2 Mt sisäistä flash-muistia ja 16 Mt ulkoista QSPI-flash-muistia.
Laitteistopohjainen JPEG-enkooderi/dekooderi.
22-nastainen Arducam-yhteensopiva kameran taipuisa liitin (
J6) — ajuritoki sensorimoduuleille OV5640 (5 MP), OV7670, GC2145, HM01B0 ja HM0360.MIPI‑DSI-näyttöliitin (
J5) Arduino Giga Display Shieldille (480×800 kapasitiivinen kosketuspaneeli) sekä LTDC RGB ‑näyttömoottori edistyneille kantokorteille.3,5 mm:n äänijakki, jossa stereolinjalähtö ja mikrofonitulo.
Wi‑Fi b/g/n (2,4 GHz) + Bluetooth LE 5.1 Murata 1DX (CYW4343W) ‑moduulin kautta — kytkeytyy mukana toimitettavaan antenniin kortilla olevan U.FL-liittimen kautta.
USB‑C (full-speed) virtaa / sarjayhteyttä / ohjelmointia varten.
Käyttäjän I/O Mega-tyylisissä liittimissä —
D0–D75(digitaaliset),A0–A11(analogiset),DAC0/DAC1(DAC-lähdöt),CAN_RX/CAN_TX(FDCAN2) sekä sisärivinSDA1/SCL1I²C-pari. Kortin etureunassa oleva erillinen 6-nastainen SPI1-liitin tuo ulos signaalitCIPO/COPI/SCK(D89/D90/D91).JTAG / SWD on tuotu ulos yläpuolen vianetsintäliittimeen edistynyttä vianetsintää varten.
Nastakartta¶
Nastaviite¶
Arduino Mega ‑tyyliset liittimet tuovat ulos 76 digitaalista nastaa (D0–D75), 12 analogista nastaa (A0–A11), kaksi DAC-lähtöä (DAC0/DAC1), toissijaisen I²C-parin (SDA1/SCL1) sekä FDCAN2-parin (CAN_RX/CAN_TX). Kortin etureunassa oleva erillinen 6-nastainen SPI1-liitin tuo ulos signaalit CIPO/COPI/SCK (D89/D90/D91).
Nastan nimi |
Viite |
Toiminto |
|---|---|---|
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 (kameran DCMI VSYNC) |
D55 |
3.3 V |
I2C3 SDA (kameran DCMI HSYNC) |
D56 |
3.3 V |
TIM3 CH1 / TIM13 CH1 (kameran DCMI PXCLK) |
D57 |
3.3 V |
TIM8 CH1N / UART8 RX (kameran pääkello — TIM1 CH3) |
D58 |
3.3 V |
TIM8 CH3 (kameran DCMI D7) |
D59 |
3.3 V |
TIM8 CH2 (kameran DCMI D6) |
D60 |
3.3 V |
GPIO (kameran DCMI D5) |
D61 |
3.3 V |
TIM8 CH2N / UART4 RX (kameran DCMI D4) |
D62 |
3.3 V |
SPI1 SCK (kameran DCMI D3) |
D63 |
3.3 V |
TIM5 CH2 / I2C4 SCL (näytön I²C) |
D64 |
3.3 V |
TIM5 CH1 (kameran DCMI D1) |
D65 |
3.3 V |
TIM12 CH2 (kameran DCMI D0) |
D66 |
3.3 V |
GPIO (kameran nollaus — varattu kun kamera on aktiivinen) |
D67 |
3.3 V |
GPIO (kameran power‑down — varattu kun kamera on aktiivinen) |
D68 |
3.3 V |
TIM3 CH1 / TIM8 CH1 / USART6 TX (Display Shieldin DSI RESET) |
D69 |
3.3 V |
TIM5 CH4 (Display Shieldin DSI TE) |
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 (Display Shieldin DFSDM-mikrofonidata) |
D74 |
3.3 V |
GPIO (näytön taustavalo — Giga Display Shieldin varaama) |
D75 |
3.3 V |
SPI2 SCK (Display Shieldin DFSDM-mikrofonikello) |
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 (äänijakin mikrofonitulo) |
A8 |
3.3 V |
ADC3 IN0 (vain analoginen) |
A9 |
3.3 V |
ADC3 IN1 (vain analoginen) |
A10 |
3.3 V |
ADC12 IN1 (vain analoginen) |
A11 |
3.3 V |
ADC12 IN0 (vain analoginen) |
DAC0 / A12 / D84 |
3.3 V |
DAC1 OUT1 / ADC12 IN18 (äänijakin linjalähtö L) |
DAC1 / A13 / D85 |
3.3 V |
DAC1 OUT2 / TIM2 CH1 / SPI1 SCK / ADC12 IN19 (äänijakin linjalähtö R) |
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 (näytön kosketus- / kameran ohjausväylä) |
SCL1 / D101 |
3.3 V |
I2C4 SCL (näytön kosketus- / kameran ohjausväylä) |
RESET |
3.3 V |
paina kortilla olevaa RESET-painiketta tai vedä GND:hen nollataksesi |
LED_RED |
3.3 V |
RGB-LEDin punainen kanava (aktiivinen matalalla) |
LED_GREEN |
3.3 V |
RGB-LEDin vihreä kanava (aktiivinen matalalla) |
LED_BLUE |
3.3 V |
RGB-LEDin sininen kanava (aktiivinen matalalla) |
Muista
A8–A11 ovat vain analogisia tyynyjä STM32H747:n _C-nastoissa — niillä ei ole GPIO-toimintoa, ja niitä voidaan lukea vain ADC:n kautta.
Virtanastat¶
Mega-liittimen nastat:
VIN — 6–32 V:n syöttö. Antaa kortille virtaa kortilla olevan buck-säätimen kautta.
+5V — 5 V:n kisko, joka saa virtansa USB:stä diodin tai kortilla olevan buck-säätimen kautta.
+3V3 — pää-3,3 V:n kisko.
IOREF — heijastaa kortin I/O-jännitettä (3,3 V).
AREF — ADC-nastojen analoginen jännitereferenssi. Oletusarvo on 3,3 V; aja ulkoisesti käyttääksesi eri referenssiä.
OFF — vedä GND:hen sammuttaaksesi +3,3 V:n kiskon ja koko järjestelmän.
VRTC — 3,0 V:n nappiparistotulo (enint. 3,3 V), joka pitää sirun sisäisen RTC:n käynnissä, kun muu kortti on sammutettuna.
GND — yhteinen maa.
Giga R1:lle voidaan syöttää virtaa minkä tahansa seuraavan reitin kautta:
USB‑C — syöttää 5 V kortilla olevalle buck-säätimelle.
VIN-nasta — aja säädelty 6–32 V:n syöttö suoraan.
Vihje
Käytä akun keston arviointityökalua mallintaaksesi, kuinka kauan Giga R1 toimii akulla tietyllä aktiivi- / syväunisuhteella.
Palautus- ja vianetsintänastat¶
RESET — sekä virtaliittimessä ulos tuotu nasta että kortin yläosassa oleva hetkellinen kytkin, jotka on kytketty SoC:n NRST-linjaan. Vedä GND:hen tai paina painiketta nollataksesi.
Giga R1 käyttää Arduinon vakiona olevaa kaksoisnapautusnollausta siirtyäkseen Arduinon käynnistyslataimeen. Paina RESET-painiketta nopeasti kahdesti — kortti uudelleenluetteloituu USB:n yli DFU-laitteena ja OpenMV IDE voi flashata uuden laiteohjelmistokuvan.
Jos käynnistyslatain puuttuu kokonaan, pidä BOOT0-painiketta pohjassa samalla kun painat RESET pakottaaksesi SoC:n ROM-käynnistyslataintilaan.
STM32:n SWD-signaalit on tuotu ulos kortin etureunan 10-nastaiseen 1,27 mm:n Cortex Debug ‑liittimeen. Kytke ne SEGGER J‑Linkin, ST‑Linkin tai minkä tahansa standardin ARM JTAG/SWD ‑mittapään kautta. Kaikki vianetsintäsignaalit ovat 3,3 V:iin viitattuja.
Kortilla olevat oheislaitteet¶
LEDit¶
Giga R1:ssä on yksi käyttäjän RGB-LED, jota voidaan ohjata ohjelmallisesti machine.LED ‑rajapinnan kautta:
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
Kortilla oleva erillinen virta-LED syttyy aina, kun +3,3 V:n kisko on päällä, eikä se ole käyttäjän ohjattavissa.
Kameraliitin (J6)¶
J6 on 22-nastainen Arducam-yhteensopiva kameran taipuisa liitin. Kytke siihen mikä tahansa tuettu sensorimoduuli, niin laiteohjelmisto tunnistaa ne automaattisesti csi — kennot ‑moduulin kautta:
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()
Tuetut sensorit:
OV5640 — 5 MP väri, jopa QSXGA (2592 × 1944).
OV7670 — 0,3 MP väri, jopa VGA (640 × 480).
GC2145 — 2 MP väri, jopa UXGA (1600 × 1200).
HM01B0 — 320 × 320 mustavalkoinen.
HM0360 — VGA (640 × 480) mustavalkoinen.
Varoitus
Kun kamera on alustettu, laiteohjelmisto varaa seuraavat Mega-liittimen nastat, eikä niitä voi käyttää:
Nasta |
Syy |
|---|---|
|
DCMI-data- + synkronointisignaalit kameran taipuisassa liittimessä |
|
TIM1 CH3 — kameran pääkello |
|
Kameran nollaus-GPIO |
|
Kameran power‑down-GPIO |
|
I²C 4 — jaettu kameran kanssa; väylä on käytettävissä, mutta vältä sensorin I²C-osoitetta |
Koneoppiminen¶
ml — Koneoppiminen ajaa kvantisoituja TFLite-malleja Cortex‑M7:llä CMSIS‑NN-ytimillä — riittävän nopeasti kompakteille tunnistimille muutamalla kuvalla sekunnissa. Vain luku ‑tilassa olevassa /rom-tiedostojärjestelmässä olevat mallit latautuvat suoraan flash-muistista ilman kopiointia RAM-muistiin. Tässä on 128×128 BlazeFace-tunnistin, joka päällystää tunnistetut kasvot ja niiden kuusi maamerkkiä jokaiseen kehykseen:
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-ydin¶
Cortex‑M4-ydin on käytettävissä openamp ‑moduulin kautta prosessorien väliseen tiedonsiirtoon. OpenMV-laiteohjelmisto toimii vain M7:llä; M4:llä ei ole omaa MicroPython-ajoympäristöä, joten sen käyttäminen tarkoittaa erillisen C-laiteohjelmistokuvan rakentamista ja sen lataamista tiedostojärjestelmästä openamp.RemoteProc ‑luokan kautta. Valmiiksi käännetty esimerkkilaiteohjelmisto, joka toteuttaa virtuaalisen UART-päätepisteen, on saatavilla openamp_vuart ‑arkistossa — seuraa sen README-tiedostoa rakentaaksesi 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)
Käytännössä tätä tukea on parasta pitää openamp-rajapinnan esittelynä eikä toimivana kaksiytimisenä alustana — M4:ää ei voi nollata M7:stä riippumatta, joten M4:n pysäyttäminen pakottaa koko järjestelmän uudelleenkäynnistyksen.
Näyttö (J5)¶
J5 on MIPI‑DSI-liitin Arduino Giga Display Shieldille — 480 × 800 kapasitiiviselle kosketuspaneelille, joka rakentuu ST7701-paneeliajurin ja GT911-kosketusohjaimen ympärille. Molemmat ajurit toimitetaan jäädytettyinä laiteohjelmiston mukana. Käytä display — näyttöajuri ‑moduulia kehyspuskurien lähettämiseen ja gt911.GT911 ‑luokkaa kosketussyötteeseen.
Alla oleva esimerkki peilaa kameran pystysuuntaiseen 800 × 480 ‑näyttöikkunaan ja päällystää jokaisen kosketuskontaktin värillisenä ympyränä:
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())
Varoitus
Giga Display Shield käyttää samaa I²C 4 ‑väylää (SDA1/SCL1) kuin kamera, D74-nastaa LCD:n taustavalon kytkemiseen, D70/D71-nastoja GT911:n kosketuksen IRQ:hun ja nollaukseen sekä D68/D69-nastoja DSI-paneelin TE- ja RESET-signaaleihin.
Mikrofoni (Display Shield)¶
Arduino Giga Display Shieldissä on digitaalinen mikrofoni, joka on kytketty STM32H747:n DFSDM-oheislaitteeseen (mikrofonikello D75-nastassa, mikrofonidata D73-nastassa). Mikrofoni kaapataan audio — Audio-moduuli ‑moduulin kautta. Jokainen puskuri saapuu etumerkillisenä 16-bittisenä PCM-muotoisena bytearray-objektina, valmiina syötettäväksi ulab/numpy ‑moduuliin DSP:tä varten:
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 Shieldissä on Boschin BMI270 6-akselinen IMU (3D-kiihtyvyysanturi + 3D-gyroskooppi) samassa I²C 4 ‑väylässä osoitteessa 0x68. Käytä yhteisön micropython_bmi270 ‑ajuria sen lukemiseen:
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)
Täydellinen rekisterikartta löytyy BMI270-tietolomakkeesta.
RGB-LED (Display Shield)¶
Arduino Giga Display Shieldissä on kortilla oleva RGB-LED, jota ohjaa ISSI:n IS31FL3197 3-kanavainen LED-ajuri samassa I²C 4 ‑väylässä. Ajurin AD-nasta on kytketty GND:hen, joten se sijaitsee I²C-osoitteessa 0x50. Käytä yhteisön IS31FL3197 ‑ajuria LEDin ohjaamiseen:
from machine import I2C
from is31fl3197 import IS31FL3197
led = IS31FL3197(I2C(4, freq=400_000))
led.set_color(255, 0, 0) # full red
Täydellinen rekisterikartta löytyy IS31FL3197-tietolomakkeesta.
Wi‑Fi¶
Kortilla oleva Murata 1DX (CYW4343W) on käytettävissä network — verkkomääritykset ‑moduulin kautta station-rajapintana. Kytke mukana toimitettava antenni kortilla olevaan U.FL-liittimeen ennen radion käynnistämistä:
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¶
Sama Murata 1DX tuo esiin myös Bluetooth LE 5.1:n. Käytä aioble — Asynkroninen BLE ‑moduulia asyncio-ystävälliseen BLE:hen — esimerkiksi mainosta oheislaitteena ja odota, että central kytkeytyy:
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())
Väyläviite¶
GPIO¶
Käytä machine.Pin ‑luokkaa minkä tahansa silkkipainetun nastan lukemiseen tai ajamiseen. Lähdöt ovat 3,3 V CMOS ja voivat niellä/lähettää enintään 20 mA nastaa kohden (140 mA yhteensä koko liittimessä).
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())
Mikä tahansa tulonasta voi myös laukaista keskeytyksen reunatransitioissa:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Väylä |
TX |
RX |
Arduino-nimi |
|---|---|---|---|
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¶
Väylä |
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")
Väylä 2 (D20/D21, silkkipainetut SCL/SDA) on oletusarvoinen Arduino Wire ‑väylä. Väylä 4 (SCL1/SDA1) on jaettu kameran ja Giga Display Shieldin GT911-kosketusohjaimen kanssa — tämän väylän käyttäjälaitteiden on vältettävä seuraavia osoitteita (7-bittisinä):
0x3C— OV5640 / GC21450x24— HM01B0 / HM03600x21— OV76700x5D— GT911-kosketusohjain (Giga Display Shield)
Samaa laitteistoa voidaan käyttää myös kohdetilassa (slave) machine.I2CTarget ‑luokan kautta muistialueen tuomiseksi toisen I²C-ohjaimen saataville:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Väylä |
MOSI |
MISO |
SCK |
|---|---|---|---|
SPI1 |
D90 |
D89 |
D91 |
SPI5 |
D11 |
D12 |
D13 |
SPI1 on tuotu ulos kortin etureunan erilliseen 6-nastaiseen liittimeen. SPI5 on tuotu ulos silkkipainettuihin COPI/CIPO/SCK ‑merkintöihin nastoissa D11/D12/D13.
Muista
Etureunan 6-nastaisen SPI1-liittimen (J7) nastakartta:
Nasta |
Signaali |
|---|---|
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)¶
Väylä |
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 tuo esiin kaksitoista 12-bittistä ADC-kanavaa nastoissa A0–A11, kaikki 3,3 V:iin viitattuina — read_u16 palauttaa 0–65535 välillä 0–3,3 V nastassa. A8–A11 ovat vain analogisia _C-tyynyjä ilman GPIO-oheislaitetta:
from machine import ADC
import time
adc = ADC("A0")
while True:
voltage = adc.read_u16() * 3.3 / 65535
print(voltage)
time.sleep_ms(100)
Muista
A7 on kytketty myös mikrofonituloon 3,5 mm:n TRRS-äänijakissa — kun kuulokemikrofoni on kytketty, ADC("A7") lukee analogisen mikrofonisignaalin suoraan.
DAC¶
Kaksi 12-bittistä DAC-kanavaa on tuotu esiin nastoissa DAC0 ja DAC1 pyb.DAC ‑luokan kautta. Molemmat on kytketty 3,5 mm:n TRRS-äänijakkiin vasempana ja oikeana linjalähtökanavana:
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¶
Nasta |
Ajastin / kanava |
|---|---|
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 |
Aja mitä tahansa niistä machine.PWM ‑luokan kautta:
from machine import Pin, PWM
pwm = PWM(Pin("D2"), freq=1_000, duty_u16=32768)
Varoitus
TIM1 on varattu kameran pääkellolle, kun kamera alustetaan csi — kennot ‑moduulin kautta. Nastoja, joiden ainoa PWM-toiminto on TIM1:ssä — D1, D10, D11, D12 — ei voi ajaa PWM:llä kameran ollessa aktiivinen. Kaikilla muilla luetelluilla nastoilla on muita kuin TIM1-vaihtoehtoja.
Muista
Useat nastat jakavat ajastinkanavia:
TIM2 CH4 on nastoissa
D2jaD20.TIM2 CH1 on nastoissa
D83/A7jaD85/A13.TIM3 CH1 on nastoissa
D7,D56jaD68.TIM3 CH2 on nastoissa
D5jaD15.TIM4 CH2 on nastoissa
D0jaD6.TIM5 CH1 on nastoissa
D64jaD83/A7.TIM5 CH4 on nastoissa
D2jaD69.TIM8 CH1 on nastoissa
D4,D54jaD68.TIM8 CH1N on nastoissa
D5,D16,D57jaD85/A13.TIM8 CH2 on nastoissa
D11,D15,D37jaD59.TIM8 CH2N on nastoissa
D12,D38,D61jaD78/A2.TIM8 CH3 on nastoissa
D48jaD58.TIM8 CH3N on nastoissa
D10,D46jaD79/A3.TIM15 CH1 on nastoissa
D3jaD51.TIM15 CH2 on nastoissa
D2jaD40.
Valitse yksi kuluttaja ajastinkanavaa kohden.
Ohjelmistolla bit-bangatut väylät¶
machine.SoftI2C ja machine.SoftSPI toimivat millä tahansa GPIO:lla, jos tarvitset lisäväylän.
Lämpösensori (kortin ulkopuolinen)¶
Laiteohjelmisto sisältää fir — lämpösensorin ajuri (fir == far infrared) ‑ajurin ulkoisesti kytketyille lämpökameroille:
MLX90621 — 16 × 4 IR-matriisi
MLX90640 — 32 × 24 IR-matriisi
MLX90641 — 16 × 12 IR-matriisi
AMG8833 — 8 × 8 IR-matriisi
Kytke moduuli kortin I²C-väylään ja lue kehyksiä komennoilla 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-ajuri kommunikoi sensorin kanssa vain I²C 1 ‑väylän kautta — kytke moduuli nastoihin D8 (SCL) ja D9 (SDA).
Ajastus¶
time¶
time ‑moduuli kattaa estävät viiveet, monotoniset tikit ja kuluneen ajan mittauksen:
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)
Virtuaaliajastimet¶
machine.Timer ajastaa jaksollisia tai kertaluonteisia takaisinkutsuja kuluttamatta laitteistoajastinpaikkaa. Anna -1 id:ksi käyttääksesi virtuaalista (ohjelmistopohjaista) ajastinta:
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"))
Jaksoarvot ovat millisekunteina. Kutsu deinit() pysäyttääksesi ja vapauttaaksesi paikan.
Reaaliaikakello¶
machine.RTC pitää seinäkelloaikaa nollausten yli — ja täydellisen virrankatkaisun yli, kun nappiparisto on kytketty VRTC-nastaan:
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())
Vahtikoira¶
machine.WDT nollaa kortin, jos sovellus jumittuu. Kerran käynnistettynä sitä ei voi pysäyttää eikä määrittää uudelleen — ruoki sitä säännöllisesti pääsilmukassasi:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Käynnistys- ja ajonaikaiset tiedot¶
Laiteohjelmiston päivitys (DFU)¶
Giga R1 käyttää Arduinon vakiona olevaa kaksoisnapautusnollausta siirtyäkseen Arduinon käynnistyslataimeen. Paina RESET-painiketta nopeasti kahdesti — kortti uudelleenluetteloituu USB:n yli DFU-laitteena ja OpenMV IDE voi flashata uuden laiteohjelmistokuvan. Jos käynnistyslatain puuttuu kokonaan, pidä BOOT0-painiketta pohjassa samalla kun painat RESET pakottaaksesi SoC:n ROM-käynnistyslataintilaan.
Käynnissä oleva skripti voi siirtyä käynnistyslataimeen pyynnöstä kutsumalla machine.bootloader()
import machine
machine.bootloader()
Tiedostojärjestelmä ja käynnistysjärjestys¶
Giga R1 ‑laiteohjelmisto liittää käynnistyksen yhteydessä enintään kaksi tiedostojärjestelmää:
Sisäinen flash-muisti — aina liitettynä polkuun
/flash. Sisältää oletuksenamain.py- jaREADME.txt-tiedostot; luodaan aivan ensimmäisellä käynnistyksellä.ROMFS — vain luku ‑tilainen, muistiin kartoitettu tiedostojärjestelmä polussa
/rom, jonka MicroPython liittää automaattisesti käynnistyksen yhteydessä.
Liittämisen jälkeen työhakemistoksi asetetaan /flash. Tulkki ajaa sitten skriptejä tästä hakemistosta:
boot.pysuoritetaan jokaisen pehmeän nollauksen yhteydessä (kylmäkäynnistys,Ctrl‑DREPL:stä tai aina kun käynnissä oleva skripti palaa).main.pysuoritetaan vain kylmäkäynnistyksessä, hetiboot.py:n jälkeen. Seuraavat pehmeät nollaukset ajavatboot.py:n uudelleen mutta pudottavat suoraan REPL:iin — ajaaksesimain.py:n uudelleen sinun on nollattava kortti kokonaan.
Tuoreeltaan flashatulla kortilla toimitettu oletus-main.py vain vilkuttaa käyttäjän RGB-LEDin sinistä kanavaa sydämenlyöntinä (kaksi lyhyttä pulssia, lyhyt tauko), jotta voit todeta laiteohjelmiston käynnistyneen puhtaasti ilman mitään isäntään liitettyä.
sys.path laajennetaan kattamaan molemmat tiedostojärjestelmät ja niiden lib/-alihakemistot, joten tuotavat moduulit voivat sijaita poluissa /flash/lib tai /rom/lib.
USB:n kautta yhdistettynä /flash luetteloituu myös USB-massamuistiasemana isännällä, jolloin voit muokata boot.py-, main.py- ja muita tiedostoja suoraan. Poista asema ennen kortin nollaamista, jotta isäntä tyhjentää välimuistissa olevat kirjoitukset.
Muista
Koska käyttöjärjestelmä kohtelee asemaa passiivisena lohkolaitteena, kameralla ajettavan koodin luomat tai muokkaamat tiedostot eivät näy, ennen kuin isäntä liittää aseman uudelleen. Jos sekä käyttöjärjestelmä että kamera kirjoittavat samaan tiedostojärjestelmään samanaikaisesti, käyttöjärjestelmä voittaa ja korvaa kameran tekemät muutokset.
Muista
Käyttäjän RGB-LEDin punainen kanava saattaa syttyä hetkellisesti, kun isäntä lukee USB-massamuistiasemaa tai kirjoittaa siihen — tämä on laiteohjelmiston ohjaama toiminnan ilmaisin, ei vika.
Tallennustilan koot¶
Giga R1 toimitetaan seuraavilla:
/flash— 11 Mt FAT-tiedostojärjestelmä, luku/kirjoitus./rom— 4 Mt vain luku ‑tilainen muistiin kartoitettu ROMFS, jota käytetään sellaisten skriptien ja ML-mallien toimittamiseen, jotka hyötyvät nollakopiointia tekevästä mmap-pääsystä.
Vakavan virheen (hard fault) ilmaisin¶
Jos käyttäjän RGB-LED kiertää nopeasti kaikkia värejä — niin nopeasti, että se näyttää pikemminkin tuikkivalta valkoiselta LEDiltä kuin erillisiltä sävyiltä — laiteohjelmisto on kohdannut palautumattoman vakavan virheen (hard fault). Flashaa laiteohjelmisto uudelleen palautuaksesi; jos uudelleenflashaus ei auta, kortti saattaa olla fyysisesti vaurioitunut.
Ohjelmistokirjastot¶
Katso kirjastoindeksistä täydellinen luettelo moduuleista — mukaan lukien mitkä niistä ovat ainutlaatuisia Giga R1 ‑versiolle.