Arduino Giga R1 WiFi¶
Arduino Giga R1 WiFi, STMicroelectronics STM32H747XI çevresinde inşa edilmiş 101 × 53 mm Mega form faktörlü bir karttır — 480 MHz’lik bir Cortex‑M7 ile 240 MHz’lik bir Cortex‑M4’ü birleştiren çift çekirdekli bir SoC’dir. OpenMV aygıt yazılımı (firmware) tamamen M7 çekirdeği üzerinde çalışır. Giga, standart Arduino Mega başlık düzenine 22 pinli bir Arducam kamera flex konnektörü, Arduino Giga Display Shield için bir MIPI‑DSI konnektörü ve 3,5 mm’lik bir stereo ses jakı ekler.
Tam veri sayfası, fotoğraflar ve boyutlar için bkz. Arduino Giga R1 WiFi ürün sayfası.
Öne çıkanlar¶
STMicroelectronics STM32H747XI çift çekirdekli Cortex‑M7 (480 MHz) + Cortex‑M4 (240 MHz). OpenMV aygıt yazılımı yalnızca M7 çekirdeği üzerinde çalışır; M4 çekirdeği, işlemciler arası iletişim için openamp aracılığıyla erişilebilir hale gelir.
8 MB harici SDRAM ile birlikte 2 MB dahili flash bellek ve 16 MB harici QSPI flash bellek.
Donanımsal JPEG kodlayıcı/kod çözücü.
22 pinli Arducam uyumlu kamera flex konnektörü (
J6) — OV5640 (5MP), OV7670, GC2145, HM01B0 ve HM0360 sensör modülleri için sürücü desteği.Arduino Giga Display Shield (480×800 kapasitif dokunmatik panel) için MIPI‑DSI ekran konnektörü (
J5) ile birlikte gelişmiş taşıyıcılar için bir LTDC RGB ekran motoru.Stereo hat çıkışı ve mikrofon girişine sahip 3,5 mm ses jakı.
Murata 1DX (CYW4343W) modülü aracılığıyla Wi‑Fi b/g/n (2,4 GHz) + Bluetooth LE 5.1 — kart üzerindeki bir U.FL konnektörü aracılığıyla birlikte verilen antene bağlanır.
Güç / seri / programlama için USB‑C (full‑speed).
Mega tarzı başlıklarda kullanıcı G/Ç’si —
D0–D75(dijital),A0–A11(analog),DAC0/DAC1(DAC çıkışları),CAN_RX/CAN_TX(FDCAN2) ve iç sıradakiSDA1/SCL1I²C çifti. Kartın ön tarafındaki ayrı bir 6 pinli SPI1 başlığıCIPO/COPI/SCK(D89/D90/D91) hatlarını dışarıya açar.Gelişmiş hata ayıklama için üst taraftaki hata ayıklama başlığında dışarıya açılan JTAG / SWD.
Pin Çıkışı¶
Pin referansı¶
Arduino Mega tarzı başlıklar 76 dijital pini (D0–D75), 12 analog pini (A0–A11), iki DAC çıkışını (DAC0/DAC1), ikincil bir I²C çiftini (SDA1/SCL1) ve bir FDCAN2 çiftini (CAN_RX/CAN_TX) dışarıya açar. Kartın ön tarafındaki ayrı bir 6 pinli SPI1 başlığı CIPO/COPI/SCK (D89/D90/D91) hatlarını dışarıya açar.
Pin adı |
Referans |
İşlev |
|---|---|---|
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 (kamera DCMI VSYNC) |
D55 |
3.3 V |
I2C3 SDA (kamera DCMI HSYNC) |
D56 |
3.3 V |
TIM3 CH1 / TIM13 CH1 (kamera DCMI PXCLK) |
D57 |
3.3 V |
TIM8 CH1N / UART8 RX (kamera ana saati — TIM1 CH3) |
D58 |
3.3 V |
TIM8 CH3 (kamera DCMI D7) |
D59 |
3.3 V |
TIM8 CH2 (kamera DCMI D6) |
D60 |
3.3 V |
GPIO (kamera DCMI D5) |
D61 |
3.3 V |
TIM8 CH2N / UART4 RX (kamera DCMI D4) |
D62 |
3.3 V |
SPI1 SCK (kamera DCMI D3) |
D63 |
3.3 V |
TIM5 CH2 / I2C4 SCL (ekran I²C) |
D64 |
3.3 V |
TIM5 CH1 (kamera DCMI D1) |
D65 |
3.3 V |
TIM12 CH2 (kamera DCMI D0) |
D66 |
3.3 V |
GPIO (kamera sıfırlama — kamera etkinken kullanıma alınır) |
D67 |
3.3 V |
GPIO (kamera güç kesme — kamera etkinken kullanıma alınır) |
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 mikrofon verisi) |
D74 |
3.3 V |
GPIO (ekran arka aydınlatması — Giga Display Shield tarafından kullanıma alınır) |
D75 |
3.3 V |
SPI2 SCK (Display Shield DFSDM mikrofon saati) |
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 (ses jakı mikrofon girişi) |
A8 |
3.3 V |
ADC3 IN0 (yalnızca analog) |
A9 |
3.3 V |
ADC3 IN1 (yalnızca analog) |
A10 |
3.3 V |
ADC12 IN1 (yalnızca analog) |
A11 |
3.3 V |
ADC12 IN0 (yalnızca analog) |
DAC0 / A12 / D84 |
3.3 V |
DAC1 OUT1 / ADC12 IN18 (ses jakı hat çıkışı L) |
DAC1 / A13 / D85 |
3.3 V |
DAC1 OUT2 / TIM2 CH1 / SPI1 SCK / ADC12 IN19 (ses jakı hat çıkışı R) |
D89 |
3.3 V |
SPI1 MISO (ön SPI başlığında |
D90 |
3.3 V |
SPI1 MOSI (ön SPI başlığında |
D91 |
3.3 V |
SPI1 SCK (ön SPI başlığında |
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 (ekran dokunmatik / kamera kontrol veriyolu) |
SCL1 / D101 |
3.3 V |
I2C4 SCL (ekran dokunmatik / kamera kontrol veriyolu) |
RESET |
3.3 V |
sıfırlamak için kart üzerindeki RESET düğmesine basın veya GND’ye çekin |
LED_RED |
3.3 V |
RGB LED kırmızı kanalı (aktif düşük) |
LED_GREEN |
3.3 V |
RGB LED yeşil kanalı (aktif düşük) |
LED_BLUE |
3.3 V |
RGB LED mavi kanalı (aktif düşük) |
Not
A8–A11, STM32H747’nin _C pinlerindeki yalnızca analog pedlerdir — bir GPIO işlevleri yoktur ve yalnızca ADC aracılığıyla okunabilirler.
Güç pinleri¶
Mega başlık pinleri:
VIN — 6–32 V giriş. Kartı, kart üzerindeki buck regülatör aracılığıyla besler.
+5V — USB’den bir diyot aracılığıyla veya kart üzerindeki buck regülatör aracılığıyla beslenen 5 V hattı.
+3V3 — ana 3,3 V hattı.
IOREF — kartın G/Ç voltajını (3,3 V) yansıtır.
AREF — ADC pinleri için analog voltaj referansı. Varsayılan olarak 3,3 V’tur; farklı bir referans kullanmak için harici olarak sürün.
OFF — +3,3 V hattını kapatmak ve sistemi kapatmak için GND’ye çekin.
VRTC — kartın geri kalanı kapalıyken çip üzerindeki RTC’yi çalışır durumda tutan 3,0 V düğme pil girişi (en fazla 3,3 V).
GND — ortak toprak.
Giga R1 şu yollardan herhangi biriyle beslenebilir:
USB‑C — kart üzerindeki buck regülatöre 5 V sağlar.
VIN pini — düzenlenmiş bir 6–32 V besleme doğrudan sürün.
Tüyo
Belirli bir aktif / derin uyku görev döngüsünde Giga R1’in bir pille ne kadar süre çalışacağını modellemek için pil ömrü tahmin aracını kullanın.
Kurtarma ve hata ayıklama pinleri¶
RESET — hem güç başlığında dışarıya açılan bir pin hem de kartın üst tarafında, SoC’nin NRST hattına bağlı anlık bir anahtar. Sıfırlamak için GND’ye çekin veya düğmeye basın.
Giga R1, Arduino’nun önyükleyicisine (bootloader) girmek için Arduino’nun standart çift dokunuşlu sıfırlamasını kullanır. RESET düğmesine hızlıca iki kez basın — kart, USB üzerinden bir DFU aygıtı olarak yeniden numaralandırılır ve OpenMV IDE yeni bir aygıt yazılımı imajı yazabilir.
Önyükleyici (bootloader) tamamen eksikse, SoC’yi ROM önyükleyici moduna zorlamak için RESET’e basarken BOOT0 düğmesini basılı tutun.
STM32 SWD sinyalleri kartın ön tarafındaki 10 pinli 1,27 mm Cortex Debug başlığında dışarıya açılır. Bunları bir SEGGER J‑Link, ST‑Link veya herhangi bir standart ARM JTAG/SWD probu aracılığıyla bağlayın. Tüm hata ayıklama sinyalleri 3,3 V referanslıdır.
Kart üzerindeki çevre birimleri¶
LED’ler¶
Giga R1, machine.LED aracılığıyla yazılımla denetlenebilen tek bir kullanıcı RGB LED’ine sahiptir:
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
Kart üzerindeki ayrı bir güç LED’i, +3,3 V hattı çalıştığında her zaman yanar ve kullanıcı tarafından denetlenemez.
Kamera konnektörü (J6)¶
J6, 22 pinli Arducam uyumlu bir kamera flex konnektörüdür. Desteklenen sensör modüllerinden herhangi birini takın; aygıt yazılımı bunları csi — kamera sensörleri modülü aracılığıyla otomatik olarak yoklar:
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()
Desteklenen sensörler:
OV5640 — 5 MP renkli, QSXGA’ya (2592 × 1944) kadar.
OV7670 — 0,3 MP renkli, VGA’ya (640 × 480) kadar.
GC2145 — 2 MP renkli, UXGA’ya (1600 × 1200) kadar.
HM01B0 — 320 × 320 tek renkli.
HM0360 — VGA (640 × 480) tek renkli.
Uyarı
Kamera başlatılmışken, aşağıdaki Mega başlık pinleri aygıt yazılımı tarafından kullanıma alınır ve kullanılamaz:
Pin |
Neden |
|---|---|
|
Kamera flex konnektöründeki DCMI veri + senkronizasyon sinyalleri |
|
TIM1 CH3 — kamera ana saati |
|
Kamera sıfırlama GPIO’su |
|
Kamera güç kesme GPIO’su |
|
I²C 4 — kamerayla paylaşılır; veriyolu kullanılabilir ancak sensörün I²C adresinden kaçının |
Makine öğrenimi¶
ml — Makine Öğrenmesi, niceliklendirilmiş TFLite modellerini Cortex‑M7 üzerinde CMSIS‑NN çekirdekleriyle çalıştırır — saniyede birkaç çerçevede kompakt tespit ediciler için yeterince hızlıdır. Salt okunur /rom dosya sistemindeki modeller, RAM’e kopyalanmadan doğrudan flash bellekten yüklenir. İşte tespit edilen yüzü ve onun altı yer işaretini her çerçeveye bindiren bir 128×128 BlazeFace tespit edicisi:
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 çekirdeği¶
Cortex‑M4 çekirdeği, işlemciler arası iletişim için openamp aracılığıyla erişilebilir hale gelir. OpenMV aygıt yazılımı yalnızca M7 üzerinde çalışır; M4’ün kendine ait bir MicroPython çalışma zamanı yoktur, dolayısıyla onu kullanmak ayrı bir C aygıt yazılımı imajı oluşturmak ve bunu openamp.RemoteProc aracılığıyla dosya sisteminden yüklemek anlamına gelir. Sanal bir UART uç noktası uygulayan önceden oluşturulmuş örnek aygıt yazılımı openamp_vuart deposunda mevcuttur — vuart.elf dosyasını oluşturmak için README dosyasını izleyin:
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)
Pratikte bu destek, çalışan bir çift çekirdekli platformdan ziyade openamp arayüzünün bir gösterimi olarak ele alınması en iyisidir — M4, M7’den bağımsız olarak sıfırlanamaz, dolayısıyla M4’ü durdurmak tam bir sistem yeniden başlatmasını zorlar.
Ekran (J5)¶
J5, Arduino Giga Display Shield için bir MIPI‑DSI konnektörüdür — ST7701 panel sürücüsü ve GT911 dokunmatik denetleyici çevresinde inşa edilmiş 480 × 800 kapasitif dokunmatik panel. Her iki sürücü de aygıt yazılımıyla birlikte donmuş olarak gelir. Çerçeve arabelleklerini (frame buffer) göndermek için display — ekran sürücüsü, dokunmatik giriş için gt911.GT911 kullanın.
Aşağıdaki örnek, kamerayı dikey 800 × 480 ekran penceresine yansıtır ve her dokunma temasını renkli bir daire olarak bindirir:
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())
Uyarı
Giga Display Shield, kamerayla aynı I²C 4 veriyolunu (SDA1/SCL1), LCD arka aydınlatma etkinleştirmesi için D74, GT911 dokunmatik IRQ ve sıfırlaması için D70/D71 ve DSI panelinin TE ve RESET sinyalleri için D68/D69 pinlerini kullanır.
Mikrofon (Display Shield)¶
Arduino Giga Display Shield, STM32H747’nin DFSDM çevre birimine bağlı dijital bir mikrofon taşır (mikrofon saati D75‘te, mikrofon verisi D73‘te). Mikrofon, audio — Audio Modülü aracılığıyla yakalanır. Her arabellek, işaretli 16 bitlik PCM bytearray olarak gelir ve DSP için ulab/numpy içine beslenmeye hazırdır:
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, aynı I²C 4 veriyolunda 0x68 adresinde bir Bosch BMI270 6 eksenli IMU (3B ivmeölçer + 3B jiroskop) taşır. Onu okumak için topluluk micropython_bmi270 sürücüsünü kullanın:
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)
Tam yazmaç haritası BMI270 veri sayfasında bulunur.
RGB LED (Display Shield)¶
Arduino Giga Display Shield, aynı I²C 4 veriyolunda bir ISSI IS31FL3197 3 kanallı LED sürücüsü tarafından sürülen kart üzerinde bir RGB LED taşır. Sürücünün AD pini GND’ye bağlıdır, dolayısıyla I²C adresi 0x50‘dedir. LED’i denetlemek için topluluk IS31FL3197 sürücüsünü kullanın:
from machine import I2C
from is31fl3197 import IS31FL3197
led = IS31FL3197(I2C(4, freq=400_000))
led.set_color(255, 0, 0) # full red
Tam yazmaç haritası IS31FL3197 veri sayfasında bulunur.
Wi‑Fi¶
Kart üzerindeki Murata 1DX (CYW4343W), network — ağ yapılandırması aracılığıyla bir istasyon arayüzü olarak erişilebilir hale gelir. Radyoyu çalıştırmadan önce birlikte verilen anteni kart üzerindeki U.FL konnektörüne bağlayın:
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¶
Aynı Murata 1DX ayrıca Bluetooth LE 5.1’i de dışarıya açar. asyncio dostu BLE için aioble — Asenkron BLE kullanın — örneğin, bir çevre birimi olarak yayın yapın ve bir merkezi aygıtın bağlanmasını bekleyin:
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())
Veriyolu referansı¶
GPIO¶
Serigrafili pinlerden herhangi birini okumak veya sürmek için machine.Pin kullanın. Çıkışlar 3,3 V CMOS’tur ve pin başına 20 mA’ya kadar (tüm başlık genelinde toplam 140 mA) çekebilir/sağlayabilir.
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())
Herhangi bir giriş pini ayrıca kenar geçişlerinde bir kesme tetikleyebilir:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Veriyolu |
TX |
RX |
Arduino adı |
|---|---|---|---|
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¶
Veriyolu |
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")
Veriyolu 2 (D20/D21, serigrafili SCL/SDA) varsayılan Arduino Wire veriyoludur. Veriyolu 4 (SCL1/SDA1) kamerayla ve Giga Display Shield’in GT911 dokunmatik denetleyicisiyle paylaşılır — bu veriyolundaki kullanıcı aygıtları aşağıdaki adreslerden (7 bit) kaçınmalıdır:
0x3C— OV5640 / GC21450x24— HM01B0 / HM03600x21— OV76700x5D— GT911 dokunmatik denetleyici (Giga Display Shield)
Aynı donanım, başka bir I²C denetleyicisine bir bellek bölgesi açmak için machine.I2CTarget aracılığıyla hedef (slave) modunda da kullanılabilir:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Veriyolu |
MOSI |
MISO |
SCK |
|---|---|---|---|
SPI1 |
D90 |
D89 |
D91 |
SPI5 |
D11 |
D12 |
D13 |
SPI1, kartın ön tarafındaki özel bir 6 pinli başlıkta dışarıya açılır. SPI5, D11/D12/D13 üzerindeki serigrafili COPI/CIPO/SCK etiketlerinde dışarıya açılır.
Not
Ön 6 pinli SPI1 başlığının (J7) pin çıkışı:
Pin |
Sinyal |
|---|---|
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)¶
Veriyolu |
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, A0–A11 üzerinde tümü 3,3 V referanslı on iki 12 bitlik ADC kanalını dışarıya açar — read_u16, pinde 0–3,3 V aralığında 0–65535 döndürür. A8–A11, GPIO çevre birimi olmayan yalnızca analog _C pedleridir:
from machine import ADC
import time
adc = ADC("A0")
while True:
voltage = adc.read_u16() * 3.3 / 65535
print(voltage)
time.sleep_ms(100)
Not
A7 ayrıca 3,5 mm TRRS ses jakındaki mikrofon girişine de bağlıdır — bir kulaklık takıldığında, ADC("A7") analog mikrofon sinyalini doğrudan okur.
DAC¶
İki 12 bitlik DAC kanalı, pyb.DAC aracılığıyla DAC0 ve DAC1 üzerinde dışarıya açılır. Her ikisi de 3,5 mm TRRS ses jakına sol ve sağ hat çıkışı kanalları olarak bağlıdır:
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 |
Zamanlayıcı / 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 |
Bunlardan herhangi birini machine.PWM aracılığıyla sürün:
from machine import Pin, PWM
pwm = PWM(Pin("D2"), freq=1_000, duty_u16=32768)
Uyarı
Kamera csi — kamera sensörleri aracılığıyla başlatıldığında TIM1, kamera ana saati için ayrılmıştır. Tek PWM işlevi TIM1 üzerinde olan pinler — D1, D10, D11, D12 — kamera etkinken PWM ile sürülemez. Listelenen diğer pinlerin tümünün TIM1 dışı alternatifleri vardır.
Not
Birkaç pin zamanlayıcı kanallarını paylaşır:
TIM2 CH4,
D2veD20üzerindedir.TIM2 CH1,
D83/A7veD85/A13üzerindedir.TIM3 CH1,
D7,D56veD68üzerindedir.TIM3 CH2,
D5veD15üzerindedir.TIM4 CH2,
D0veD6üzerindedir.TIM5 CH1,
D64veD83/A7üzerindedir.TIM5 CH4,
D2veD69üzerindedir.TIM8 CH1,
D4,D54veD68üzerindedir.TIM8 CH1N,
D5,D16,D57veD85/A13üzerindedir.TIM8 CH2,
D11,D15,D37veD59üzerindedir.TIM8 CH2N,
D12,D38,D61veD78/A2üzerindedir.TIM8 CH3,
D48veD58üzerindedir.TIM8 CH3N,
D10,D46veD79/A3üzerindedir.TIM15 CH1,
D3veD51üzerindedir.TIM15 CH2,
D2veD40üzerindedir.
Zamanlayıcı kanalı başına bir tüketici seçin.
Yazılımla bit‑banging yapılan veriyolları¶
Ekstra bir veriyoluna ihtiyacınız olursa machine.SoftI2C ve machine.SoftSPI herhangi bir GPIO üzerinde çalışır.
Termal sensör (kart dışı)¶
Aygıt yazılımı, harici olarak bağlanan termal görüntüleyiciler için fir — termal sensör sürücüsü (fir == far infrared) sürücüsünü içerir:
MLX90621 — 16 × 4 IR dizisi
MLX90640 — 32 × 24 IR dizisi
MLX90641 — 16 × 12 IR dizisi
AMG8833 — 8 × 8 IR dizisi
Modülü kartın I²C veriyoluna bağlayın ve çerçeveleri fir.init() + fir.snapshot() ile okuyun:
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 sürücüsü sensörle yalnızca I²C 1 üzerinden konuşur — modülü D8 (SCL) ve D9 (SDA) pinlerine bağlayın.
Zamanlama¶
time¶
time modülü; engelleyici gecikmeleri, monoton tikleri ve geçen zaman ölçümünü kapsar:
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)
Sanal zamanlayıcılar¶
machine.Timer, bir donanım zamanlayıcı yuvasını tüketmeden periyodik veya tek seferlik geri çağırmalar (callback) zamanlar. Sanal (yazılımsal) bir zamanlayıcı kullanmak için id olarak -1 geçin:
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"))
Periyot değerleri milisaniye cinsindendir. Yuvayı durdurmak ve serbest bırakmak için deinit() çağırın.
Gerçek zamanlı saat¶
machine.RTC, sıfırlamalar boyunca — ve VRTC pinine bir düğme pil bağlandığında tam güç kesintisi boyunca — duvar saati zamanını korur:
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())
Bekçi köpeği (Watchdog)¶
Uygulama takılırsa machine.WDT kartı sıfırlar. Bir kez başlatıldıktan sonra durdurulamaz veya yeniden yapılandırılamaz — onu ana döngünüzün içinde periyodik olarak besleyin:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Önyükleme ve çalışma zamanı bilgisi¶
Aygıt yazılımı güncellemesi (DFU)¶
Giga R1, Arduino’nun önyükleyicisine (bootloader) girmek için Arduino’nun standart çift dokunuşlu sıfırlamasını kullanır. RESET düğmesine hızlıca iki kez basın — kart, USB üzerinden bir DFU aygıtı olarak yeniden numaralandırılır ve OpenMV IDE yeni bir aygıt yazılımı imajı yazabilir. Önyükleyici tamamen eksikse, SoC’yi ROM önyükleyici moduna zorlamak için RESET’e basarken BOOT0 düğmesini basılı tutun.
Çalışan bir betik, machine.bootloader() çağırarak istek üzerine önyükleyiciye (bootloader) yeniden girebilir:
import machine
machine.bootloader()
Dosya sistemi ve önyükleme sırası¶
Giga R1 aygıt yazılımı önyüklemede en fazla iki dosya sistemi bağlar:
Dahili flash bellek — her zaman
/flashkonumunda bağlanır. Varsayılan olarakmain.pyveREADME.txtiçerir; ilk önyüklemede oluşturulur.ROMFS — MicroPython tarafından başlangıçta otomatik olarak
/romkonumunda bağlanan salt okunur, belleğe eşlenmiş dosya sistemi.
Bağlamanın ardından çalışma dizini /flash olarak ayarlanır. Yorumlayıcı daha sonra betikleri bu dizinden çalıştırır:
boot.py, her yumuşak sıfırlamada (soğuk önyükleme, REPL’denCtrl‑Dveya çalışan betik döndüğünde) çalıştırılır.main.py,boot.py‘den hemen sonra yalnızca soğuk önyüklemede çalıştırılır. Sonraki yumuşak sıfırlamalarboot.py‘yi yeniden çalıştırır ancak doğrudan REPL’e düşer —main.py‘yi yeniden çalıştırmak için kartı tamamen sıfırlamanız gerekir.
Yeni yazılmış bir kartta gelen varsayılan main.py, bir kalp atışı olarak yalnızca kullanıcı RGB LED’inin mavi kanalını yanıp söndürür (iki kısa darbe, kısa boşluk), böylece bağlı bir ana bilgisayar olmadan aygıt yazılımının temiz bir şekilde önyüklendiğini anlayabilirsiniz.
sys.path, her iki dosya sistemini ve onların lib/ alt dizinlerini içerecek şekilde genişletilir, böylece içe aktarılabilir modüller /flash/lib veya /rom/lib içinde bulunabilir.
USB üzerinden bağlandığında, /flash ana bilgisayarda bir USB yığın depolama sürücüsü olarak da numaralandırılır ve boot.py, main.py ve diğer dosyaları doğrudan düzenlemenize olanak tanır. Ana bilgisayarın önbelleğe alınmış yazmalarını boşaltması için kartı sıfırlamadan önce sürücüyü çıkarın.
Not
İşletim sistemi sürücüyü pasif bir blok aygıtı olarak ele aldığından, kamerada çalışan kod tarafından oluşturulan veya değiştirilen dosyalar, ana bilgisayar sürücüyü yeniden bağlayana kadar görünmez. Hem işletim sistemi hem de kamera aynı dosya sistemine aynı anda yazarsa, işletim sistemi kazanır ve kamera tarafından yapılan değişikliklerin üzerine yazar.
Not
Ana bilgisayar USB yığın depolama sürücüsünden okurken veya ona yazarken kullanıcı RGB LED’inin kırmızı kanalı kısaca yanabilir — bu, bir arıza değil, aygıt yazılımı tarafından sürülen bir etkinlik göstergesidir.
Depolama boyutları¶
Giga R1 şunlarla birlikte gelir:
/flash— 11 MB FAT dosya sistemi, okuma/yazma./rom— 4 MB salt okunur, belleğe eşlenmiş ROMFS; sıfır kopyalı mmap erişiminden yararlanan betikleri ve ML modellerini göndermek için kullanılır.
Donanım hatası (hard‑fault) göstergesi¶
Kullanıcı RGB LED’i tüm renkler arasında hızla geçiş yapıyorsa — belirgin tonlardan ziyade parıldayan beyaz bir LED gibi görünecek kadar hızlı — aygıt yazılımı kurtarılamaz bir donanım hatasına (hard fault) takılmıştır. Kurtarmak için aygıt yazılımını yeniden yazın; yeniden yazma yardımcı olmazsa, kart fiziksel olarak hasar görmüş olabilir.
Yazılım kitaplıkları¶
Modüllerin tam listesi için — Giga R1 yapısına özgü olanlar dahil — kitaplık dizinine bakın.