Arduino Giga R1 WiFi¶
Arduino Giga R1 WiFi adalah papan berformat Mega berukuran 101 × 53 mm yang dibangun di sekitar STMicroelectronics STM32H747XI — sebuah SoC dual-core yang menggabungkan Cortex‑M7 pada 480 MHz dengan Cortex‑M4 pada 240 MHz. Firmware OpenMV berjalan sepenuhnya pada inti M7. Giga menambahkan konektor flex kamera Arducam 22-pin, konektor MIPI‑DSI untuk Arduino Giga Display Shield, dan jack audio stereo 3,5 mm ke tata letak header Arduino Mega standar.
Untuk datasheet lengkap, foto, dan dimensi, lihat halaman produk Arduino Giga R1 WiFi.
Fitur Utama¶
STMicroelectronics STM32H747XI dual Cortex‑M7 (480 MHz) + Cortex‑M4 (240 MHz). Firmware OpenMV berjalan hanya pada inti M7; inti M4 diekspos melalui openamp untuk Komunikasi Antar-Prosesor.
SDRAM eksternal 8 MB ditambah flash internal 2 MB dan flash QSPI eksternal 16 MB.
Enkoder/dekoder JPEG berbasis perangkat keras.
Konektor flex kamera kompatibel Arducam 22-pin (
J6) — dukungan driver untuk modul sensor OV5640 (5MP), OV7670, GC2145, HM01B0, dan HM0360.Konektor layar MIPI‑DSI (
J5) untuk Arduino Giga Display Shield (panel sentuh kapasitif 480×800) ditambah mesin tampilan LTDC RGB untuk carrier tingkat lanjut.Jack audio 3,5 mm dengan line-out stereo dan input mikrofon.
Wi‑Fi b/g/n (2,4 GHz) + Bluetooth LE 5.1 via modul Murata 1DX (CYW4343W) — terhubung ke antena yang disertakan melalui konektor U.FL di papan.
USB‑C (full-speed) untuk daya / serial / pemrograman.
I/O Pengguna pada header bergaya Mega —
D0–D75(digital),A0–A11(analog),DAC0/DAC1(keluaran DAC),CAN_RX/CAN_TX(FDCAN2), dan pasangan I²CSDA1/SCL1pada baris dalam. Header SPI1 6-pin terpisah di depan papan memecahCIPO/COPI/SCK(D89/D90/D91).JTAG / SWD tersedia pada header debug sisi atas untuk debug tingkat lanjut.
Pinout¶
Referensi pin¶
Header bergaya Arduino Mega mengekspos 76 pin digital (D0–D75), 12 pin analog (A0–A11), dua keluaran DAC (DAC0/DAC1), pasangan I²C sekunder (SDA1/SCL1), dan pasangan FDCAN2 (CAN_RX/CAN_TX). Header SPI1 6-pin terpisah di depan papan memecah CIPO/COPI/SCK (D89/D90/D91).
Nama pin |
Referensi |
Fungsi |
|---|---|---|
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 (clock master kamera — 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 (I²C layar) |
D64 |
3,3 V |
TIM5 CH1 (kamera DCMI D1) |
D65 |
3,3 V |
TIM12 CH2 (kamera DCMI D0) |
D66 |
3,3 V |
GPIO (reset kamera — diklaim saat kamera aktif) |
D67 |
3,3 V |
GPIO (power-down kamera — diklaim saat kamera aktif) |
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 (data mikrofon DFSDM Display Shield) |
D74 |
3,3 V |
GPIO (lampu latar layar — diklaim oleh Giga Display Shield) |
D75 |
3,3 V |
SPI2 SCK (clock mikrofon DFSDM Display Shield) |
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 (input mikrofon jack audio) |
A8 |
3,3 V |
ADC3 IN0 (hanya analog) |
A9 |
3,3 V |
ADC3 IN1 (hanya analog) |
A10 |
3,3 V |
ADC12 IN1 (hanya analog) |
A11 |
3,3 V |
ADC12 IN0 (hanya analog) |
DAC0 / A12 / D84 |
3,3 V |
DAC1 OUT1 / ADC12 IN18 (line-out L jack audio) |
DAC1 / A13 / D85 |
3,3 V |
DAC1 OUT2 / TIM2 CH1 / SPI1 SCK / ADC12 IN19 (line-out R jack audio) |
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 (bus kontrol sentuh layar / kamera) |
SCL1 / D101 |
3,3 V |
I2C4 SCL (bus kontrol sentuh layar / kamera) |
RESET |
3,3 V |
tekan tombol RESET di papan atau tarik ke GND untuk mereset |
LED_RED |
3,3 V |
Saluran merah LED RGB (aktif rendah) |
LED_GREEN |
3,3 V |
Saluran hijau LED RGB (aktif rendah) |
LED_BLUE |
3,3 V |
Saluran biru LED RGB (aktif rendah) |
Catatan
A8–A11 adalah pad hanya-analog pada pin _C STM32H747 — tidak memiliki fungsi GPIO dan hanya dapat dibaca melalui ADC.
Pin daya¶
Pin header Mega:
VIN — input 6–32 V. Memberi daya pada papan melalui regulator buck di papan.
+5V — rel 5 V yang disuplai dari USB melalui dioda atau regulator buck di papan.
+3V3 — rel utama 3,3 V.
IOREF — mencerminkan tegangan I/O papan (3,3 V).
AREF — referensi tegangan analog untuk pin ADC. Default ke 3,3 V; drive secara eksternal untuk menggunakan referensi yang berbeda.
OFF — tarik ke GND untuk mematikan rel +3,3 V dan mematikan sistem.
VRTC — input koin sel 3,0 V (maksimum 3,3 V) yang menjaga RTC di chip tetap berjalan saat sisa papan mati.
GND — ground umum.
Giga R1 dapat diberi daya melalui salah satu jalur ini:
USB‑C — menyuplai 5 V ke regulator buck di papan.
Pin VIN — hubungkan suplai 6–32 V yang diatur secara langsung.
Tip
Gunakan estimator masa pakai baterai untuk memodelkan berapa lama Giga R1 akan berjalan dengan baterai untuk siklus kerja aktif / tidur-dalam tertentu.
Pin pemulihan dan debug¶
RESET — pin yang tersedia pada header daya maupun sakelar sesaat di atas papan, terhubung ke jalur NRST SoC. Tarik ke GND atau tekan tombol untuk mereset.
Giga R1 menggunakan double-tap reset standar Arduino untuk masuk ke bootloader Arduino. Tekan tombol RESET dua kali dengan cepat — papan akan re-enumerasi melalui USB sebagai perangkat DFU dan OpenMV IDE dapat mem-flash image firmware baru.
Jika bootloader tidak ada sama sekali, tahan tombol BOOT0 sambil menekan RESET untuk memaksa SoC masuk ke mode bootloader ROM.
Sinyal SWD STM32 tersedia pada header debug Cortex 10-pin 1,27 mm di depan papan. Hubungkan melalui SEGGER J‑Link, ST‑Link, atau probe JTAG/SWD ARM standar. Semua sinyal debug bereferensi 3,3 V.
Periferal di papan¶
LED¶
Giga R1 memiliki satu LED RGB pengguna, yang dapat dikontrol perangkat lunak melalui machine.LED
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
LED daya terpisah di papan menyala setiap kali rel +3,3 V aktif dan tidak dapat dikontrol pengguna.
Konektor kamera (J6)¶
J6 adalah konektor flex kamera kompatibel Arducam 22-pin. Pasang salah satu modul sensor yang didukung dan firmware akan mendeteksinya secara otomatis melalui modul csi --- sensor kamera
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()
Sensor yang didukung:
OV5640 — warna 5 MP, hingga QSXGA (2592 × 1944).
OV7670 — warna 0,3 MP, hingga VGA (640 × 480).
GC2145 — warna 2 MP, hingga UXGA (1600 × 1200).
HM01B0 — monokrom 320 × 320.
HM0360 — monokrom VGA (640 × 480).
Peringatan
Selama kamera diinisialisasi, pin header Mega berikut diklaim oleh firmware dan tidak dapat digunakan:
Pin |
Alasan |
|---|---|
|
Sinyal data DCMI + sinkronisasi pada konektor flex kamera |
|
TIM1 CH3 — clock master kamera |
|
GPIO reset kamera |
|
GPIO power-down kamera |
|
I²C 4 — berbagi dengan kamera; bus dapat digunakan tetapi hindari alamat I²C sensor |
Machine learning¶
ml --- Machine Learning menjalankan model TFLite terkuantisasi pada Cortex‑M7 dengan kernel CMSIS‑NN — cukup cepat untuk detektor kompak pada beberapa bingkai per detik. Model pada filesystem /rom yang hanya-baca dimuat langsung dari flash tanpa menyalin ke RAM. Berikut ini detektor BlazeFace 128×128 yang menampilkan wajah terdeteksi dan enam titik kuncinya di setiap bingkai:
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")
Inti M4¶
Inti Cortex‑M4 diekspos melalui openamp untuk komunikasi antar-prosesor. Firmware OpenMV berjalan hanya pada M7; M4 tidak memiliki runtime MicroPython sendiri, sehingga menggunakannya berarti membangun image firmware C terpisah dan memuatnya dari filesystem melalui openamp.RemoteProc. Contoh firmware pre-built yang mengimplementasikan endpoint virtual UART tersedia di repositori openamp_vuart — ikuti README-nya untuk membangun 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)
Dalam praktiknya, dukungan ini paling baik diperlakukan sebagai demonstrasi antarmuka openamp daripada platform dual-core yang berfungsi penuh — M4 tidak dapat direset secara independen dari M7, sehingga menghentikan M4 memaksa reboot sistem penuh.
Layar (J5)¶
J5 adalah konektor MIPI‑DSI untuk Arduino Giga Display Shield — panel sentuh kapasitif 480 × 800 yang dibangun di sekitar driver panel ST7701 dan kontroler sentuh GT911. Kedua driver dikirim bersama firmware. Gunakan display --- driver display untuk mendorong framebuffer dan gt911.GT911 untuk input sentuh.
Contoh di bawah ini mencerminkan kamera ke jendela tampilan potret 800 × 480 dan menampilkan setiap titik sentuh sebagai lingkaran berwarna:
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())
Peringatan
Giga Display Shield menggunakan bus I²C 4 yang sama (SDA1/SCL1) dengan kamera, D74 untuk aktifkan lampu latar LCD, D70/D71 untuk IRQ dan reset sentuh GT911, dan D68/D69 untuk sinyal TE dan RESET panel DSI.
Mikrofon (Display Shield)¶
Arduino Giga Display Shield membawa mikrofon digital yang terhubung ke periferal DFSDM STM32H747 (clock mikrofon pada D75, data mikrofon pada D73). Mikrofon ditangkap melalui audio --- Modul Audio. Setiap buffer tiba sebagai bytearray PCM 16-bit bertanda, siap untuk dimasukkan ke ulab/numpy untuk 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 membawa Bosch BMI270 IMU 6-sumbu (akselerometer 3D + giroskop 3D) pada bus I²C 4 yang sama di alamat 0x68. Gunakan driver komunitas micropython_bmi270 untuk membacanya:
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)
Peta register lengkap ada di datasheet BMI270.
LED RGB (Display Shield)¶
Arduino Giga Display Shield membawa LED RGB di papan yang dikendalikan oleh driver LED 3-saluran ISSI IS31FL3197 pada bus I²C 4 yang sama. Pin AD driver terhubung ke GND, sehingga berada di alamat I²C 0x50. Gunakan driver komunitas IS31FL3197 untuk mengontrol LED:
from machine import I2C
from is31fl3197 import IS31FL3197
led = IS31FL3197(I2C(4, freq=400_000))
led.set_color(255, 0, 0) # full red
Peta register lengkap ada di datasheet IS31FL3197.
Wi‑Fi¶
Murata 1DX (CYW4343W) di papan diekspos melalui network --- konfigurasi jaringan sebagai antarmuka stasiun. Hubungkan antena yang disertakan ke konektor U.FL di papan sebelum mengaktifkan radio:
import network, time
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
while not wlan.isconnected():
time.sleep(1)
print("Wi‑Fi IP:", wlan.ipconfig("addr4")[0])
Bluetooth¶
Murata 1DX yang sama juga mengekspos Bluetooth LE 5.1. Gunakan aioble --- Async BLE untuk BLE yang ramah asyncio — misalnya, iklan sebagai periferal dan tunggu central untuk terhubung:
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())
Referensi bus¶
GPIO¶
Gunakan machine.Pin untuk membaca atau menggerakkan salah satu pin yang tercetak di silkscreen. Keluaran adalah CMOS 3,3 V dan dapat sink/source hingga 20 mA per pin (140 mA total di seluruh header).
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())
Setiap pin input juga dapat memicu interupsi pada transisi tepi:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Bus |
TX |
RX |
Nama 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¶
Bus |
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")
Bus 2 (D20/D21, silkscreen SCL/SDA) adalah bus Wire Arduino default. Bus 4 (SCL1/SDA1) berbagi dengan kamera dan kontroler sentuh GT911 Giga Display Shield — perangkat pengguna pada bus ini harus menghindari alamat berikut (7-bit):
0x3C— OV5640 / GC21450x24— HM01B0 / HM03600x21— OV76700x5D— Kontroler sentuh GT911 (Giga Display Shield)
Perangkat keras yang sama juga dapat digunakan dalam mode target (slave) melalui machine.I2CTarget untuk mengekspos wilayah memori ke kontroler I²C lain:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Bus |
MOSI |
MISO |
SCK |
|---|---|---|---|
SPI1 |
D90 |
D89 |
D91 |
SPI5 |
D11 |
D12 |
D13 |
SPI1 tersedia pada header 6-pin khusus di depan papan. SPI5 tersedia pada label COPI/CIPO/SCK yang tercetak di silkscreen pada D11/D12/D13.
Catatan
Pinout header SPI1 6-pin depan (J7):
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)¶
Bus |
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 mengekspos dua belas saluran ADC 12-bit pada A0–A11, semua bereferensi 3,3 V — read_u16 mengembalikan 0–65535 untuk 0–3,3 V pada pin. A8–A11 adalah pad _C hanya-analog tanpa periferal 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)
Catatan
A7 juga terhubung ke input mikrofon pada jack audio TRRS 3,5 mm — ketika headset terpasang, ADC("A7") membaca sinyal mikrofon analog secara langsung.
DAC¶
Dua saluran DAC 12-bit tersedia pada DAC0 dan DAC1 melalui pyb.DAC. Keduanya terhubung ke jack audio TRRS 3,5 mm sebagai saluran line-out kiri dan kanan:
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 |
Timer / saluran |
|---|---|
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 |
Gerakkan salah satunya melalui machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("D2"), freq=1_000, duty_u16=32768)
Peringatan
TIM1 dicadangkan untuk clock master kamera saat kamera diinisialisasi melalui csi --- sensor kamera. Pin yang satu-satunya fungsi PWM-nya ada di TIM1 — D1, D10, D11, D12 — tidak dapat digerakkan PWM saat kamera aktif. Pin lain yang tercantum semuanya memiliki alternatif non-TIM1.
Catatan
Beberapa pin berbagi saluran timer:
TIM2 CH4 ada di
D2danD20.TIM2 CH1 ada di
D83/A7danD85/A13.TIM3 CH1 ada di
D7,D56, danD68.TIM3 CH2 ada di
D5danD15.TIM4 CH2 ada di
D0danD6.TIM5 CH1 ada di
D64danD83/A7.TIM5 CH4 ada di
D2danD69.TIM8 CH1 ada di
D4,D54, danD68.TIM8 CH1N ada di
D5,D16,D57, danD85/A13.TIM8 CH2 ada di
D11,D15,D37, danD59.TIM8 CH2N ada di
D12,D38,D61, danD78/A2.TIM8 CH3 ada di
D48danD58.TIM8 CH3N ada di
D10,D46, danD79/A3.TIM15 CH1 ada di
D3danD51.TIM15 CH2 ada di
D2danD40.
Pilih satu konsumen per saluran timer.
Bus bit-bang perangkat lunak¶
machine.SoftI2C dan machine.SoftSPI bekerja pada GPIO mana pun jika Anda membutuhkan bus tambahan.
Sensor termal (di luar papan)¶
Firmware menyertakan driver fir --- driver sensor termal (fir == far infrared) untuk imager termal yang dihubungkan secara eksternal:
MLX90621 — array IR 16 × 4
MLX90640 — array IR 32 × 24
MLX90641 — array IR 16 × 12
AMG8833 — array IR 8 × 8
Hubungkan modul ke bus I²C papan dan baca bingkai dengan 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())
Driver fir hanya berkomunikasi dengan sensor melalui I²C 1 — hubungkan modul ke D8 (SCL) dan D9 (SDA).
Timing¶
time¶
Modul time mencakup penundaan pemblokiran, tick monotonis, dan pengukuran waktu yang telah berlalu:
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)
Timer virtual¶
machine.Timer menjadwalkan callback periodik atau sekali-jalan tanpa menghabiskan slot timer perangkat keras. Gunakan -1 sebagai id untuk menggunakan timer virtual (perangkat lunak):
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"))
Nilai periode dalam milidetik. Panggil deinit() untuk menghentikan dan melepaskan slot.
Real-time clock¶
machine.RTC menjaga waktu jam dinding saat reset — dan saat mati total ketika koin sel terhubung ke pin VRTC
from machine import RTC
rtc = RTC()
rtc.datetime((2026, 4, 30, 4, 12, 0, 0, 0)) # Y, M, D, weekday, h, m, s, subsec
print(rtc.datetime())
Watchdog¶
machine.WDT mereset papan jika aplikasi hang. Setelah dimulai tidak dapat dihentikan atau dikonfigurasi ulang — beri makan secara berkala di dalam loop utama Anda:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Info boot dan runtime¶
Pembaruan firmware (DFU)¶
Giga R1 menggunakan double-tap reset standar Arduino untuk masuk ke bootloader Arduino. Tekan tombol RESET dua kali dengan cepat — papan akan re-enumerasi melalui USB sebagai perangkat DFU dan OpenMV IDE dapat mem-flash image firmware baru. Jika bootloader tidak ada sama sekali, tahan tombol BOOT0 sambil menekan RESET untuk memaksa SoC masuk ke mode bootloader ROM.
Skrip yang sedang berjalan dapat masuk kembali ke bootloader sesuai permintaan dengan memanggil machine.bootloader()
import machine
machine.bootloader()
Filesystem dan urutan boot¶
Firmware Giga R1 memasang hingga dua filesystem saat boot:
Flash internal — selalu dipasang di
/flash. Berisimain.pydanREADME.txtsecara default; dibuat pada boot pertama.ROMFS — filesystem hanya-baca yang dipetakan ke memori di
/rom, dipasang secara otomatis oleh MicroPython saat startup.
Setelah pemasangan, direktori kerja diatur ke /flash. Interpreter kemudian menjalankan skrip dari direktori tersebut:
boot.pydieksekusi pada setiap soft reset (cold boot,Ctrl‑Ddari REPL, atau kapan pun skrip yang berjalan selesai).main.pydieksekusi hanya pada cold boot, segera setelahboot.py. Soft reset berikutnya menjalankan ulangboot.pytetapi langsung ke REPL — untuk menjalankan ulangmain.pyAnda harus mereset papan sepenuhnya.
main.py default yang dikirim pada papan yang baru di-flash hanya mengedipkan saluran biru LED RGB pengguna sebagai heartbeat (dua pulsa pendek, jeda pendek), sehingga Anda dapat mengetahui firmware berhasil boot tanpa host yang terpasang.
sys.path diperluas untuk menyertakan kedua filesystem dan subdirektori lib/-nya, sehingga modul yang dapat diimpor dapat berada di /flash/lib atau /rom/lib.
Saat terhubung melalui USB, /flash juga dienumerasi sebagai drive penyimpanan massal USB di host, memungkinkan Anda mengedit boot.py, main.py, dan file lainnya secara langsung. Eject drive sebelum mereset papan agar host mengeluarkan tulisan yang di-cache.
Catatan
Karena OS memperlakukan drive sebagai perangkat blok pasif, file yang dibuat atau dimodifikasi oleh kode yang berjalan pada kamera tidak akan muncul sampai host me-mount ulang drive. Jika OS dan kamera menulis filesystem yang sama pada waktu yang bersamaan, OS akan menang dan menimpa perubahan yang dilakukan kamera.
Catatan
Saluran merah LED RGB pengguna mungkin menyala sebentar saat host membaca atau menulis ke drive penyimpanan massal USB — ini adalah indikator aktivitas yang dikendalikan firmware, bukan kesalahan.
Ukuran penyimpanan¶
Giga R1 dikirim dengan:
/flash— filesystem FAT 11 MB, baca/tulis./rom— ROMFS hanya-baca yang dipetakan ke memori 4 MB, digunakan untuk mengirimkan skrip dan model ML yang mendapat manfaat dari akses mmap tanpa-salin.
Indikator hard-fault¶
Jika LED RGB pengguna bersiklus cepat melalui semua warna — cukup cepat sehingga cenderung terlihat seperti LED putih berkedip daripada warna yang berbeda — firmware telah mengalami hard fault yang tidak dapat dipulihkan. Flash ulang firmware untuk memulihkan; jika reflashing tidak membantu, papan mungkin rusak secara fisik.
Pustaka perangkat lunak¶
Lihat indeks pustaka untuk daftar lengkap modul — termasuk modul yang unik untuk build Giga R1.