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.

Arduino Giga R1 WiFi

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 — D0D75 (digital), A0A11 (analog), DAC0/DAC1 (keluaran DAC), CAN_RX/CAN_TX (FDCAN2), dan pasangan I²C SDA1/SCL1 pada baris dalam. Header SPI1 6-pin terpisah di depan papan memecah CIPO/COPI/SCK (D89/D90/D91).

  • JTAG / SWD tersedia pada header debug sisi atas untuk debug tingkat lanjut.

Pinout

Arduino Giga R1 WiFi Pinout

Referensi pin

Header bergaya Arduino Mega mengekspos 76 pin digital (D0D75), 12 pin analog (A0A11), 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 (CIPO pada header SPI depan)

D90

3,3 V

SPI1 MOSI (COPI pada header SPI depan)

D91

3,3 V

SPI1 SCK (SCK pada header SPI depan)

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

A8A11 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

D54D65

Sinyal data DCMI + sinkronisasi pada konektor flex kamera

D57

TIM1 CH3 — clock master kamera

D66

GPIO reset kamera

D67

GPIO power-down kamera

SDA1 / SCL1

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 / GC2145

  • 0x24 — HM01B0 / HM0360

  • 0x21 — OV7670

  • 0x5D — 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

D89 (CIPO)

2

+5V

3

D91 (SCK)

4

D90 (COPI)

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 Vread_u16 mengembalikan 0–65535 untuk 0–3,3 V pada pin. A8A11 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 D2 dan D20.

  • TIM2 CH1 ada di D83/A7 dan D85/A13.

  • TIM3 CH1 ada di D7, D56, dan D68.

  • TIM3 CH2 ada di D5 dan D15.

  • TIM4 CH2 ada di D0 dan D6.

  • TIM5 CH1 ada di D64 dan D83/A7.

  • TIM5 CH4 ada di D2 dan D69.

  • TIM8 CH1 ada di D4, D54, dan D68.

  • TIM8 CH1N ada di D5, D16, D57, dan D85/A13.

  • TIM8 CH2 ada di D11, D15, D37, dan D59.

  • TIM8 CH2N ada di D12, D38, D61, dan D78/A2.

  • TIM8 CH3 ada di D48 dan D58.

  • TIM8 CH3N ada di D10, D46, dan D79/A3.

  • TIM15 CH1 ada di D3 dan D51.

  • TIM15 CH2 ada di D2 dan D40.

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. Berisi main.py dan README.txt secara 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.py dieksekusi pada setiap soft reset (cold boot, Ctrl‑D dari REPL, atau kapan pun skrip yang berjalan selesai).

  • main.py dieksekusi hanya pada cold boot, segera setelah boot.py. Soft reset berikutnya menjalankan ulang boot.py tetapi langsung ke REPL — untuk menjalankan ulang main.py Anda 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.