Arduino Giga R1 WiFi¶
Arduino Giga R1 WiFi je ploča Mega oblika dimenzija 101 × 53 mm izgrađena oko STMicroelectronics STM32H747XI — dvojezgrenog SoC-a koji kombinira Cortex‑M7 na 480 MHz s Cortex‑M4 na 240 MHz. OpenMV firmware se izvodi u cijelosti na M7 jezgri. Giga uz standardni raspored Arduino Mega zaglavlja dodaje 22‑pinski Arducam fleksibilni priključak za kameru, MIPI‑DSI priključak za Arduino Giga Display Shield te 3,5 mm stereo audio priključak.
Za potpunu tehničku dokumentaciju, fotografije i dimenzije pogledajte stranicu proizvoda Arduino Giga R1 WiFi.
Istaknute značajke¶
STMicroelectronics STM32H747XI dvostruki Cortex‑M7 (480 MHz) + Cortex‑M4 (240 MHz). OpenMV firmware se izvodi samo na M7 jezgri; M4 jezgra je izložena kroz openamp za međuprocesorsku komunikaciju.
8 MB vanjskog SDRAM-a uz 2 MB interne flash memorije i 16 MB vanjske QSPI flash memorije.
Hardverski JPEG koder/dekoder.
22‑pinski Arducam‑kompatibilni fleksibilni priključak za kameru (
J6) — podrška upravljačkog programa za senzorske module OV5640 (5 MP), OV7670, GC2145, HM01B0 i HM0360.MIPI‑DSI priključak za zaslon (
J5) za Arduino Giga Display Shield (480×800 kapacitivni dodirni panel) uz LTDC RGB zaslonski mehanizam za napredne nosače.3,5 mm audio priključak sa stereo line‑out izlazom i mikrofonskim ulazom.
Wi‑Fi b/g/n (2,4 GHz) + Bluetooth LE 5.1 putem modula Murata 1DX (CYW4343W) — povezuje se na priloženu antenu preko ugrađenog U.FL priključka.
USB‑C (full‑speed) za napajanje / serijsku vezu / programiranje.
Korisnički I/O na Mega zaglavljima —
D0–D75(digitalni),A0–A11(analogni),DAC0/DAC1(DAC izlazi),CAN_RX/CAN_TX(FDCAN2) teSDA1/SCL1I²C par u unutarnjem redu. Zasebno 6‑pinsko SPI1 zaglavlje na prednjoj strani ploče izvodiCIPO/COPI/SCK(D89/D90/D91).JTAG / SWD izveden na gornjem debug zaglavlju za napredno otklanjanje pogrešaka.
Raspored pinova¶
Referenca pinova¶
Arduino Mega zaglavlja izlažu 76 digitalnih pinova (D0–D75), 12 analognih pinova (A0–A11), dva DAC izlaza (DAC0/DAC1), sekundarni I²C par (SDA1/SCL1) te FDCAN2 par (CAN_RX/CAN_TX). Zasebno 6‑pinsko SPI1 zaglavlje na prednjoj strani ploče izvodi CIPO/COPI/SCK (D89/D90/D91).
Naziv pina |
Referenca |
Funkcija |
|---|---|---|
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 (DCMI VSYNC kamere) |
D55 |
3,3 V |
I2C3 SDA (DCMI HSYNC kamere) |
D56 |
3,3 V |
TIM3 CH1 / TIM13 CH1 (DCMI PXCLK kamere) |
D57 |
3,3 V |
TIM8 CH1N / UART8 RX (glavni takt kamere — TIM1 CH3) |
D58 |
3,3 V |
TIM8 CH3 (DCMI D7 kamere) |
D59 |
3,3 V |
TIM8 CH2 (DCMI D6 kamere) |
D60 |
3,3 V |
GPIO (DCMI D5 kamere) |
D61 |
3,3 V |
TIM8 CH2N / UART4 RX (DCMI D4 kamere) |
D62 |
3,3 V |
SPI1 SCK (DCMI D3 kamere) |
D63 |
3,3 V |
TIM5 CH2 / I2C4 SCL (I²C zaslona) |
D64 |
3,3 V |
TIM5 CH1 (DCMI D1 kamere) |
D65 |
3,3 V |
TIM12 CH2 (DCMI D0 kamere) |
D66 |
3,3 V |
GPIO (resetiranje kamere — zauzeto kada je kamera aktivna) |
D67 |
3,3 V |
GPIO (isključivanje kamere — zauzeto kada je kamera aktivna) |
D68 |
3,3 V |
TIM3 CH1 / TIM8 CH1 / USART6 TX (Display Shield DSI RESET) |
D69 |
3,3 V |
TIM5 CH4 (Display Shield 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 Shield DFSDM podaci mikrofona) |
D74 |
3,3 V |
GPIO (pozadinsko osvjetljenje zaslona — zauzeto od strane Giga Display Shield) |
D75 |
3,3 V |
SPI2 SCK (Display Shield DFSDM takt mikrofona) |
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 (mikrofonski ulaz audio priključka) |
A8 |
3,3 V |
ADC3 IN0 (samo analogno) |
A9 |
3,3 V |
ADC3 IN1 (samo analogno) |
A10 |
3,3 V |
ADC12 IN1 (samo analogno) |
A11 |
3,3 V |
ADC12 IN0 (samo analogno) |
DAC0 / A12 / D84 |
3,3 V |
DAC1 OUT1 / ADC12 IN18 (line‑out L audio priključka) |
DAC1 / A13 / D85 |
3,3 V |
DAC1 OUT2 / TIM2 CH1 / SPI1 SCK / ADC12 IN19 (line‑out R audio priključka) |
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 (sabirnica dodira zaslona / upravljanja kamerom) |
SCL1 / D101 |
3,3 V |
I2C4 SCL (sabirnica dodira zaslona / upravljanja kamerom) |
RESET |
3,3 V |
pritisnite ugrađeni RESET gumb ili povucite na GND za resetiranje |
LED_RED |
3,3 V |
crveni kanal RGB LED-a (aktivan na niskoj razini) |
LED_GREEN |
3,3 V |
zeleni kanal RGB LED-a (aktivan na niskoj razini) |
LED_BLUE |
3,3 V |
plavi kanal RGB LED-a (aktivan na niskoj razini) |
Napomena
A8–A11 su isključivo analogni padovi na _C pinovima STM32H747 — nemaju GPIO funkciju i mogu se očitati samo putem ADC-a.
Pinovi napajanja¶
Pinovi Mega zaglavlja:
VIN — ulaz 6–32 V. Napaja ploču kroz ugrađeni buck regulator.
+5V — 5 V napojna linija dovedena iz USB-a preko diode ili ugrađenog buck regulatora.
+3V3 — glavna 3,3 V napojna linija.
IOREF — odražava I/O napon ploče (3,3 V).
AREF — referentni analogni napon za ADC pinove. Zadano je 3,3 V; dovedite vanjski napon za korištenje druge reference.
OFF — povucite na GND za isključivanje +3,3 V napojne linije i gašenje sustava.
VRTC — ulaz za 3,0 V dugmastu bateriju (najviše 3,3 V) koja održava rad ugrađenog RTC-a dok je ostatak ploče isključen.
GND — zajednička masa.
Giga R1 se može napajati putem bilo kojeg od ovih načina:
USB‑C — dovodi 5 V na ugrađeni buck regulator.
VIN pin — dovedite regulirani izvor od 6–32 V izravno.
Savjet
Koristite procjenitelj trajanja baterije za modeliranje koliko dugo će Giga R1 raditi na bateriji za zadani omjer aktivnog rada i dubokog mirovanja.
Pinovi za oporavak i otklanjanje pogrešaka¶
RESET — izloženi pin na zaglavlju napajanja i trenutačni prekidač na vrhu ploče, spojeni na NRST liniju SoC-a. Povucite na GND ili pritisnite gumb za resetiranje.
Giga R1 koristi Arduinov standardni dvostruki pritisak resetiranja za ulazak u Arduinov bootloader. Brzo pritisnite RESET gumb dvaput — ploča se ponovno prijavljuje preko USB-a kao DFU uređaj i OpenMV IDE može flashati novu sliku firmwarea.
Ako bootloader potpuno nedostaje, držite BOOT0 gumb dok pritišćete RESET kako biste prisilili SoC u ROM bootloader način rada.
STM32 SWD signali izloženi su na 10‑pinskom 1,27 mm Cortex Debug zaglavlju na prednjoj strani ploče. Spojite ih putem SEGGER J‑Link, ST‑Link ili bilo koje standardne ARM JTAG/SWD sonde. Svi debug signali su referencirani na 3,3 V.
Ugrađene periferije¶
LED-ovi¶
Giga R1 ima jedan korisnički RGB LED, programski upravljiv putem machine.LED
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
Zasebni power LED na ploči svijetli kad god je +3,3 V napojna linija aktivna i nije korisnički upravljiv.
Priključak za kameru (J6)¶
J6 je 22‑pinski Arducam‑kompatibilni fleksibilni priključak za kameru. Priključite bilo koji od podržanih senzorskih modula i firmware ih automatski detektira putem modula csi — senzori kamere
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()
Podržani senzori:
OV5640 — 5 MP u boji, do QSXGA (2592 × 1944).
OV7670 — 0,3 MP u boji, do VGA (640 × 480).
GC2145 — 2 MP u boji, do UXGA (1600 × 1200).
HM01B0 — 320 × 320 monokromatski.
HM0360 — VGA (640 × 480) monokromatski.
Upozorenje
Dok je kamera inicijalizirana, firmware zauzima sljedeće pinove Mega zaglavlja koji se ne mogu koristiti:
Pin |
Razlog |
|---|---|
|
DCMI podatkovni + sinkronizacijski signali na fleksibilnom priključku kamere |
|
TIM1 CH3 — glavni takt kamere |
|
GPIO za resetiranje kamere |
|
GPIO za isključivanje kamere |
|
I²C 4 — dijeljen s kamerom; sabirnica je iskoristiva, ali izbjegavajte I²C adresu senzora |
Strojno učenje¶
ml — Strojno učenje izvodi kvantizirane TFLite modele na Cortex‑M7 s CMSIS‑NN jezgrama — dovoljno brzo za kompaktne detektore pri nekoliko sličica u sekundi. Modeli na datotečnom sustavu samo za čitanje /rom učitavaju se izravno iz flash memorije bez kopiranja u RAM. Evo 128×128 BlazeFace detektora koji preklapa detektirano lice i njegovih šest orijentira na svakoj sličici:
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 jezgra¶
Cortex‑M4 jezgra izložena je kroz openamp za međuprocesorsku komunikaciju. OpenMV firmware se izvodi samo na M7; M4 nema vlastiti MicroPython runtime, pa njegovo korištenje znači izgradnju zasebne C slike firmwarea i njezino učitavanje iz datotečnog sustava putem openamp.RemoteProc. Unaprijed izgrađeni primjer firmwarea koji implementira virtualnu UART krajnju točku dostupan je u repozitoriju openamp_vuart — slijedite njegov README za izgradnju 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)
U praksi je ovu podršku najbolje shvatiti kao demonstraciju openamp sučelja, a ne kao funkcionalnu dvojezgrenu platformu — M4 se ne može resetirati neovisno o M7, pa zaustavljanje M4 prisiljava potpuno ponovno pokretanje sustava.
Zaslon (J5)¶
J5 je MIPI‑DSI priključak za Arduino Giga Display Shield — 480 × 800 kapacitivni dodirni panel izgrađen oko upravljačkog programa panela ST7701 i kontrolera dodira GT911. Oba upravljačka programa isporučuju se zamrznuta s firmwareom. Koristite display — upravljački program zaslona za slanje međuspremnika slike i gt911.GT911 za unos dodirom.
Primjer u nastavku zrcali kameru u portretni 800 × 480 prozor zaslona i preklapa svaki dodirni kontakt kao obojeni krug:
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())
Upozorenje
Giga Display Shield koristi istu I²C 4 sabirnicu (SDA1/SCL1) kao i kamera, D74 za omogućavanje pozadinskog osvjetljenja LCD-a, D70/D71 za GT911 IRQ dodira i resetiranje te D68/D69 za TE i RESET signale DSI panela.
Mikrofon (Display Shield)¶
Arduino Giga Display Shield nosi digitalni mikrofon spojen na DFSDM periferiju STM32H747 (takt mikrofona na D75, podaci mikrofona na D73). Mikrofon se snima putem audio — Audio modul. Svaki međuspremnik stiže kao predznačeni 16‑bitni PCM bytearray, spreman za dovod u ulab/numpy za 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 nosi Bosch BMI270 6‑osni IMU (3D akcelerometar + 3D žiroskop) na istoj I²C 4 sabirnici na adresi 0x68. Koristite zajednički upravljački program micropython_bmi270 za njegovo očitavanje:
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)
Potpuna mapa registara nalazi se u tehničkoj dokumentaciji BMI270.
RGB LED (Display Shield)¶
Arduino Giga Display Shield nosi ugrađeni RGB LED kojim upravlja ISSI IS31FL3197 3‑kanalni LED upravljački program na istoj I²C 4 sabirnici. AD pin upravljačkog programa spojen je na GND, pa se nalazi na I²C adresi 0x50. Koristite zajednički upravljački program IS31FL3197 za upravljanje LED-om:
from machine import I2C
from is31fl3197 import IS31FL3197
led = IS31FL3197(I2C(4, freq=400_000))
led.set_color(255, 0, 0) # full red
Potpuna mapa registara nalazi se u tehničkoj dokumentaciji IS31FL3197.
Wi‑Fi¶
Ugrađeni Murata 1DX (CYW4343W) izložen je putem network — konfiguracija mreže kao stanično (station) sučelje. Spojite priloženu antenu na ugrađeni U.FL priključak prije pokretanja radija:
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¶
Isti Murata 1DX također izlaže Bluetooth LE 5.1. Koristite aioble — Asinkroni BLE za BLE prilagođen asyncio sučelju — primjerice, oglašavajte se kao periferija i čekajte da se central poveže:
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())
Referenca sabirnica¶
GPIO¶
Koristite machine.Pin za očitavanje ili upravljanje bilo kojim od pinova označenih na ploči. Izlazi su 3,3 V CMOS i mogu primati/dovoditi do 20 mA po pinu (ukupno 140 mA na cijelom zaglavlju).
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())
Bilo koji ulazni pin također može pokrenuti prekid na rubnim prijelazima:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Sabirnica |
TX |
RX |
Arduino naziv |
|---|---|---|---|
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¶
Sabirnica |
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")
Sabirnica 2 (D20/D21, označeni SCL/SDA) je zadana Arduino Wire sabirnica. Sabirnica 4 (SCL1/SDA1) dijeljena je s kamerom i GT911 kontrolerom dodira Giga Display Shielda — korisnički uređaji na ovoj sabirnici moraju izbjegavati sljedeće adrese (7‑bitne):
0x3C— OV5640 / GC21450x24— HM01B0 / HM03600x21— OV76700x5D— GT911 kontroler dodira (Giga Display Shield)
Isti hardver također se može koristiti u ciljnom (slave) načinu rada putem machine.I2CTarget za izlaganje memorijskog područja drugom I²C kontroleru:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Sabirnica |
MOSI |
MISO |
SCK |
|---|---|---|---|
SPI1 |
D90 |
D89 |
D91 |
SPI5 |
D11 |
D12 |
D13 |
SPI1 je izložen na namjenskom 6‑pinskom zaglavlju na prednjoj strani ploče. SPI5 je izložen na oznakama COPI/CIPO/SCK označenima na ploči na D11/D12/D13.
Napomena
Raspored pinova prednjeg 6‑pinskog SPI1 zaglavlja (J7):
Pin |
Signal |
|---|---|
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)¶
Sabirnica |
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 izlaže dvanaest 12‑bitnih ADC kanala na A0–A11, sve referencirane na 3,3 V — read_u16 vraća 0–65535 u rasponu 0–3,3 V na pinu. A8–A11 su isključivo analogni _C padovi bez GPIO periferije:
from machine import ADC
import time
adc = ADC("A0")
while True:
voltage = adc.read_u16() * 3.3 / 65535
print(voltage)
time.sleep_ms(100)
Napomena
A7 je također spojen na mikrofonski ulaz na 3,5 mm TRRS audio priključku — kada je slušalica priključena, ADC("A7") izravno očitava analogni mikrofonski signal.
DAC¶
Dva 12‑bitna DAC kanala izložena su na DAC0 i DAC1 putem pyb.DAC. Oba su spojena na 3,5 mm TRRS audio priključak kao lijevi i desni line‑out kanal:
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 |
Mjerač vremena / kanal |
|---|---|
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 |
Upravljajte bilo kojim od njih putem machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("D2"), freq=1_000, duty_u16=32768)
Upozorenje
TIM1 je rezerviran za glavni takt kamere kada se kamera inicijalizira putem csi — senzori kamere. Pinovi čija je jedina PWM funkcija na TIM1 — D1, D10, D11, D12 — ne mogu se upravljati PWM-om dok je kamera aktivna. Svi ostali navedeni pinovi imaju alternative koje nisu TIM1.
Napomena
Nekoliko pinova dijeli kanale mjerača vremena:
TIM2 CH4 je na
D2iD20.TIM2 CH1 je na
D83/A7iD85/A13.TIM3 CH1 je na
D7,D56iD68.TIM3 CH2 je na
D5iD15.TIM4 CH2 je na
D0iD6.TIM5 CH1 je na
D64iD83/A7.TIM5 CH4 je na
D2iD69.TIM8 CH1 je na
D4,D54iD68.TIM8 CH1N je na
D5,D16,D57iD85/A13.TIM8 CH2 je na
D11,D15,D37iD59.TIM8 CH2N je na
D12,D38,D61iD78/A2.TIM8 CH3 je na
D48iD58.TIM8 CH3N je na
D10,D46iD79/A3.TIM15 CH1 je na
D3iD51.TIM15 CH2 je na
D2iD40.
Odaberite jednog korisnika po kanalu mjerača vremena.
Softverski bit‑banged sabirnice¶
machine.SoftI2C i machine.SoftSPI rade na bilo kojem GPIO-u ako vam je potrebna dodatna sabirnica.
Toplinski senzor (izvan ploče)¶
Firmware uključuje upravljački program fir — upravljački program termalnog senzora (fir == daleko infracrveno) za vanjski spojene toplinske kamere:
MLX90621 — 16 × 4 IR niz
MLX90640 — 32 × 24 IR niz
MLX90641 — 16 × 12 IR niz
AMG8833 — 8 × 8 IR niz
Spojite modul na I²C sabirnicu ploče i očitavajte sličice s 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())
Upravljački program fir komunicira sa senzorom samo putem I²C 1 — spojite modul na D8 (SCL) i D9 (SDA).
Vremensko usklađivanje¶
time¶
Modul time pokriva blokirajuća kašnjenja, monotone otkucaje i mjerenje proteklog vremena:
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)
Virtualni mjerači vremena¶
machine.Timer raspoređuje periodične ili jednokratne povratne pozive bez zauzimanja hardverskog utora mjerača vremena. Proslijedite -1 kao id za korištenje virtualnog (softverskog) mjerača vremena:
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"))
Vrijednosti perioda izražene su u milisekundama. Pozovite deinit() za zaustavljanje i oslobađanje utora.
Sat stvarnog vremena¶
machine.RTC održava stvarno vrijeme kroz resetiranja — i kroz potpuno isključenje napajanja kada je dugmasta baterija spojena na VRTC pin:
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 resetira ploču ako se aplikacija zamrzne. Jednom pokrenut ne može se zaustaviti niti rekonfigurirati — povremeno ga hranite unutar svoje glavne petlje:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Informacije o pokretanju i izvođenju¶
Ažuriranje firmwarea (DFU)¶
Giga R1 koristi Arduinov standardni dvostruki pritisak resetiranja za ulazak u Arduinov bootloader. Brzo pritisnite RESET gumb dvaput — ploča se ponovno prijavljuje preko USB-a kao DFU uređaj i OpenMV IDE može flashati novu sliku firmwarea. Ako bootloader potpuno nedostaje, držite BOOT0 gumb dok pritišćete RESET kako biste prisilili SoC u ROM bootloader način rada.
Skripta koja se izvodi može na zahtjev ponovno ući u bootloader pozivom machine.bootloader()
import machine
machine.bootloader()
Datotečni sustav i redoslijed pokretanja¶
Firmware Giga R1 prilikom pokretanja montira do dva datotečna sustava:
Interna flash memorija — uvijek montirana na
/flash. Po zadanom sadržimain.pyiREADME.txt; stvara se prilikom prvog pokretanja.ROMFS — datotečni sustav samo za čitanje, memorijski mapiran na
/rom, koji MicroPython montira automatski prilikom pokretanja.
Nakon montiranja, radni direktorij postavlja se na /flash. Interpreter zatim izvodi skripte iz tog direktorija:
boot.pyse izvodi pri svakom mekom resetiranju (hladno pokretanje,Ctrl‑Diz REPL-a ili kad god se skripta koja se izvodi vrati).main.pyse izvodi samo pri hladnom pokretanju, neposredno nakonboot.py. Naknadna meka resetiranja ponovno izvodeboot.pyali prelaze izravno na REPL — za ponovno izvođenjemain.pymorate potpuno resetirati ploču.
Zadani main.py isporučen na svježe flashanoj ploči samo treperi plavim kanalom korisničkog RGB LED-a kao otkucaj srca (dva kratka impulsa, kratka pauza), tako da možete znati da se firmware uredno pokrenuo bez priključenog domaćina.
sys.path je proširen kako bi uključivao oba datotečna sustava i njihove lib/ poddirektorije, tako da uvozivi moduli mogu boraviti u /flash/lib ili /rom/lib.
Kada je spojena preko USB-a, /flash se na domaćinu prijavljuje i kao USB disk za masovnu pohranu, omogućujući vam izravno uređivanje boot.py, main.py i drugih datoteka. Izbacite disk prije resetiranja ploče kako bi domaćin ispraznio svoje predmemorirane zapise.
Napomena
Budući da OS tretira disk kao pasivni blok uređaj, datoteke koje stvori ili izmijeni kod koji se izvodi na kameri neće se prikazati dok domaćin ponovno ne montira disk. Ako i OS i kamera istovremeno pišu na isti datotečni sustav, OS će prevladati i prepisati izmjene koje je napravila kamera.
Napomena
Crveni kanal korisničkog RGB LED-a može nakratko zasvijetliti dok domaćin čita s USB diska za masovnu pohranu ili na njega piše — ovo je indikator aktivnosti kojim upravlja firmware, a ne kvar.
Veličine pohrane¶
Giga R1 se isporučuje s:
/flash— 11 MB FAT datotečni sustav, za čitanje/pisanje./rom— 4 MB memorijski mapirani ROMFS samo za čitanje, korišten za isporuku skripti i ML modela koji imaju korist od mmap pristupa bez kopiranja.
Indikator ozbiljnog kvara (hard fault)¶
Ako korisnički RGB LED brzo izmjenjuje sve boje — dovoljno brzo da obično izgleda kao treperavi bijeli LED umjesto zasebnih nijansi — firmware je naišao na neoporavljiv ozbiljan kvar (hard fault). Ponovno flashajte firmware za oporavak; ako ponovno flashanje ne pomogne, ploča je možda fizički oštećena.
Softverske biblioteke¶
Pogledajte indeks biblioteka za potpuni popis modula — uključujući one koji su jedinstveni za Giga R1 build.