OpenMV Cam H7 Plus¶
OpenMV Cam H7 Plus memadukan STMicroelectronics STM32H743 (Cortex‑M7 @ 480 MHz) dengan 32 MB SDRAM eksternal, 32 MB flash QSPI, codec JPEG perangkat keras, dan modul kamera OV5640 5MP pada carrier yang dapat dilepas. Memori tambahan sangat cocok untuk pengambilan gambar beresolusi tinggi dan buffer citra berukuran besar.
Untuk datasheet lengkap, foto, dan dimensi, lihat halaman produk OpenMV Cam H7 Plus.
Sorotan Utama¶
STMicroelectronics STM32H743 Cortex‑M7 pada 480 MHz (1027 DMIPS).
Encoder/decoder JPEG perangkat keras.
32 MB SDRAM eksternal (32‑bit @ 100 MHz, 400 MB/s) ditambah 1 MB SRAM internal.
2 MB flash internal + 32 MB flash QSPI eksternal (~100 MB/s baca).
Sensor rolling‑shutter OV5640 5MP.
USB full‑speed (12 Mb/s) — muncul sebagai VCP + penyimpanan massal USB pada host.
Slot microSD — SD hingga 2 GB, SDHC hingga 32 GB, SDXC hingga 2 TB.
Konektor baterai LiPo (tanpa pengisi daya on‑board — gunakan sel yang sudah terisi atau jalankan dari VIN/USB).
10 pin I/O, toleran 5 V dengan keluaran 3,3 V, 25 mA per pin (total 120 mA di seluruh header), mendukung interupsi. P6 tidak toleran 5 V saat digunakan dalam mode ADC atau DAC.
LED RGB pengguna dan dua LED IR 850 nm berdaya tinggi untuk pencahayaan aktif dalam visi cahaya rendah.
Catatan
H7 Plus tidak memiliki chip manajemen daya on‑board: tidak ada pengisi daya baterai, tidak ada ADC tegangan baterai, tidak ada LED status pengisian/daya, dan tidak ada tombol daya perangkat keras. Hubungkan LiPo yang telah terisi ke JST baterai atau jalankan papan dari USB / VIN.
Pinout¶
Referensi pin¶
Nama pin |
Fungsi |
|---|---|
P0 |
UART1 RX / SPI2 MOSI |
P1 |
UART1 TX / SPI2 MISO |
P2 |
SPI2 SCK / FDCAN2 TX |
P3 |
SPI2 NSS (CS) / FDCAN2 RX |
P4 |
I2C2 SCL / UART3 TX / TIM2 CH3 |
P5 |
I2C2 SDA / UART3 RX / TIM2 CH4 |
P6 |
ADC / DAC / TIM2 CH1 |
P7 |
I2C4 SCL / TIM4 CH1 |
P8 |
I2C4 SDA / TIM4 CH2 |
P9 |
digital I/O |
RESET |
hubungkan ke GND untuk me-reset papan |
SYN |
pad sinkronisasi bingkai — terhubung langsung ke sensor kamera |
BOOT0 |
hubungkan ke 3,3 V saat power-on untuk DFU / ROM bootloader |
LED_RED |
kanal merah LED RGB (aktif rendah) |
LED_GREEN |
kanal hijau LED RGB (aktif rendah) |
LED_BLUE |
kanal biru LED RGB (aktif rendah) |
LED_IR |
LED IR berdaya tinggi (kedua kanal digerakkan bersama) |
Catatan
Pad SYN pada header terhubung langsung ke jalur trigger/eksposur sensor kamera — tidak dirouting ke MCU pada H7 Plus. Kendalikan atau baca secara eksternal; Anda tidak dapat mengubahnya dari MicroPython.
Pin daya¶
3.3V — rel 3,3 V yang diregulasi. Tersedia hingga 250 mA untuk shield (lebih sedikit jika kartu microSD sedang digunakan). Berbeda dari kamera yang lebih baru, pin ini bersifat bidireksional — lihat peringatan di bawah.
VIN — input 3,6 – 5 V. Memberikan daya ke papan melalui regulator on‑board.
GND — ground umum.
Konektor LiPo 3,7 V juga tersedia, tetapi H7 Plus tidak memiliki pengisi daya baterai — hubungkan sel yang sudah terisi, atau gunakan VIN / USB sebagai gantinya.
Catatan
Ketika USB dan VIN/LiPo keduanya tersambung, input VIN/LiPo yang menang — saklar daya on‑board memilihnya di atas USB untuk memberi daya pada papan.
Peringatan
Konektor baterai dan VIN terhubung bersama pada H7 Plus. Jangan mencolokkan LiPo dan menerapkan VIN pada saat yang sama — kedua catu daya akan saling bertabrakan dan dapat merusak baterai, papan, atau keduanya.
Peringatan
Anda boleh memberi daya pada H7 Plus dengan memasukkan 3,3 V langsung ke pin 3.3V jika tidak ingin melewati regulator on‑board. Dalam hal itu, jangan juga menerapkan daya VIN atau USB secara bersamaan — back-driving regulator saat catu daya lain aktif dapat merusak dan menghancurkan kamera secara permanen.
Tip
Gunakan estimator masa pakai baterai untuk memodelkan berapa lama H7 Plus akan berjalan pada baterai untuk siklus kerja aktif / deep-sleep tertentu.
Pin pemulihan dan debug¶
RESET — hubungkan ke GND untuk me-reset papan. Melepaskannya memungkinkan MCU memulai secara normal.
BOOT0 — hubungkan ke 3,3 V saat menyalakan papan untuk masuk ke ROM bootloader STM32 (mode DFU). OpenMV IDE menggunakan mode ini untuk me-reflash bootloader on‑board.
Papan mengekspos header debug SWD (RST / SWCLK / SWDIO / SWO) di sebelah header GPIO, kompatibel dengan adapter ST‑LINK dan SEGGER J‑Link.
Catatan
Pin trace SWO digunakan bersama dengan jalur clock SPI pada header kamera. SWO tidak dapat digunakan bersamaan dengan modul kamera apa pun yang berkomunikasi dengan MCU melalui SPI — misalnya FLIR® Lepton® Adapter Module — pilih salah satu.
Periferal on-board¶
LED¶
H7 Plus memiliki satu LED RGB pengguna ditambah sepasang LED IR 850 nm berdaya tinggi:
LED RGB pengguna — dapat dikontrol melalui perangkat lunak, diekspos sebagai
LED_RED,LED_GREENdanLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
LED IR — kedua LED digerakkan bersama melalui pin
LED_IR.LED_IRterhubung secara aktif tinggi di perangkat keras sementara firmware memperlakukan setiap LED on‑board lainnya sebagai aktif rendah, sehingga gunakanlow()/high()daripadaon()/off()(yang akan membalik logikanya):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Sensor kamera¶
OV5640 dikendalikan 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()
OV5640 memiliki kompressor JPEG on-board. Atur csi.CSI.pixformat ke csi.JPEG dan sensor mengirimkan bingkai terkompresi langsung ke kamera melalui bus kamera, sehingga pengambilan gambar beresolusi tinggi menjadi praktis: csi.HD (1280×720), csi.FHD (1920×1080), dan csi.WQXGA2 5MP penuh (2592×1944) semua dapat di-stream sebagai JPEG. Sesuaikan kompresi dengan csi.CSI.quality (0-100, lebih tinggi = bingkai lebih besar, lebih detail):
cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)
Sensor terpasang pada modul yang dapat dilepas — ganti dengan modul kamera OpenMV lainnya (shutter global, termal, resolusi lebih tinggi, dll.) tanpa mengubah sisa papan.
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 read-only /rom dimuat langsung dari flash tanpa perlu disalin ke RAM. Berikut adalah detektor BlazeFace 128×128 yang menampilkan wajah yang terdeteksi dan enam landmark-nya pada 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()
# faces is a list of ((x, y, w, h), score, keypoints) tuples
for r, score, keypoints in model.predict([img]):
ml.utils.draw_predictions(img, [r], ("face",), ((0, 0, 255),), format=None)
# keypoints is a ndarray of shape (6, 2)
# 0 - right eye (x, y)
# 1 - left eye (x, y)
# 2 - nose (x, y)
# 3 - mouth (x, y)
# 4 - right ear (x, y)
# 5 - left ear (x, y)
ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))
print(clock.fps(), "fps")
Kartu microSD¶
Saat kartu dimasukkan, kartu tersebut akan dipasang secara otomatis di /sdcard dan dapat digunakan melalui sistem file biasa:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Referensi bus¶
GPIO¶
Gunakan machine.Pin untuk membaca atau menggerakkan salah satu pin yang tercetak pada silkscreen. Keluaran adalah 3,3 V CMOS, toleran 5 V pada sisi input, dan dapat menyerap/menyuplai hingga 25 mA per pin (total 120 mA di seluruh header).
from machine import Pin
out = Pin("P0", Pin.OUT)
out.on()
out.off()
out.value(1)
inp = Pin("P1", Pin.IN, Pin.PULL_UP)
print(inp.value())
Pin input mana pun juga dapat memicu interupsi pada transisi tepi:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Bus |
TX |
RX |
|---|---|---|
UART1 |
P1 |
P0 |
UART3 |
P4 |
P5 |
from machine import UART
uart = UART(3, baudrate=115200)
uart.write("hello")
uart.read(5)
I²C¶
Bus |
SCL |
SDA |
|---|---|---|
I2C2 |
P4 |
P5 |
I2C4 |
P7 |
P8 |
from machine import I2C
i2c = I2C(2, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")
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 |
CS |
|---|---|---|---|---|
SPI2 |
P0 |
P1 |
P2 |
P3 |
from machine import SPI
from machine import Pin
spi = SPI(2, baudrate=10_000_000)
cs = Pin("P3", 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 |
P2 |
P3 |
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 dan DAC¶
P6 adalah satu-satunya pin analog pengguna. Pin ini dapat digunakan sebagai input ADC 12‑bit atau keluaran DAC.
ADC — skala penuh pada 3,3 V di pin:
from machine import ADC import time adc = ADC("P6") while True: voltage = adc.read_u16() * 3.3 / 65535 print(voltage) time.sleep_ms(100)
DAC — melalui
pyb.DAC. Nilai 8‑bit mencakup 0–3,3 V:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
Dalam mode ADC atau DAC, P6 hanya toleran 3,3 V — jangan beri tegangan 5 V.
PWM¶
Pin |
Timer / kanal |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
Catatan
TIM1 dicadangkan oleh firmware untuk menghasilkan clock piksel sensor kamera, sehingga kanal TIM1 yang secara fisik ada di P0/P1/P2 tidak dapat digunakan untuk PWM pengguna tanpa merusak kamera.
TIM4 digunakan bersama dengan pyb.Servo — membuat instansi servo akan mengonfigurasi ulang seluruh timer untuk operasi 50 Hz, jadi jangan campur machine.PWM pada P7/P8 dengan pyb.Servo dalam skrip yang sama.
Kendalikan salah satu dari mereka melalui machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Bus bit-bang perangkat lunak¶
machine.SoftI2C dan machine.SoftSPI bekerja pada GPIO mana pun jika Anda membutuhkan bus tambahan.
Sensor termal (off‑board)¶
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 2 — hubungkan modul ke P4 (SCL) dan P5 (SDA).
Pengaturan waktu¶
time¶
Modul time mencakup penundaan pemblokiran, tik monotonic, 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 satu kali tanpa mengkonsumsi slot timer perangkat keras. Berikan -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:
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 me-reset papan jika aplikasi hang. Setelah dimulai, tidak dapat dihentikan atau dikonfigurasi ulang — feed 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¶
Jendela bootloader USB¶
Pada setiap power-up, kamera menjalankan bootloader singkat (beberapa detik) yang memungkinkan OpenMV IDE memperbarui firmware tanpa pengguna harus masuk ke mode DFU. Setelah jendela berakhir, bootloader menyerahkan ke boot.py dan kemudian main.py.
Skrip yang sedang berjalan dapat masuk kembali ke bootloader sesuai permintaan dengan memanggil machine.bootloader()
import machine
machine.bootloader()
Filesystem dan urutan boot¶
Firmware H7 Plus memasang hingga tiga filesystem saat boot:
Flash internal — selalu dipasang di
/flash. Menyimpanmain.pydanREADME.txtsecara default; dibuat pada boot pertama.Kartu microSD — jika kartu dimasukkan, kartu tersebut dipasang di
/sdcard.ROMFS — filesystem read-only yang dipetakan memori di
/rom, digunakan untuk mengirimkan aset data besar (misalnya model AI) yang menguntungkan dari akses zero‑copy. Dipasang secara otomatis oleh MicroPython saat startup, sebelum Python pengguna dijalankan.
Setelah pemasangan, direktori kerja diatur ke /sdcard jika kartu ada, jika tidak 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 berakhir).main.pydieksekusi hanya pada cold boot, segera setelahboot.py. Soft reset berikutnya menjalankan ulangboot.pytetapi langsung ke REPL — untuk menjalankan ulangmain.pyAnda harus me-reset penuh papan.
Menjatuhkan boot.py atau main.py ke kartu SD akan menimpa salinan di flash tanpa menyentuhnya — kedua file dicari di direktori boot (/sdcard saat kartu dipasang, jika tidak /flash).
main.py default yang dikirim pada papan yang baru di-flash hanya mengedipkan kanal biru LED RGB pengguna sebagai heartbeat (dua pulsa pendek, jeda pendek), sehingga Anda dapat mengetahui firmware berhasil boot tanpa host yang terhubung.
sys.path diperluas untuk menyertakan ketiga filesystem dan subdirektori lib/-nya, sehingga modul yang dapat diimpor dapat berada di /flash/lib, /sdcard/lib, atau /rom/lib.
Untuk memaksa sistem mengabaikan kartu SD yang dimasukkan (misalnya untuk menjalankan main.py flash meskipun ada kartu), buat file kosong bernama SKIPSD di root /flash.
Saat terhubung melalui USB, filesystem boot (/sdcard jika ada kartu, jika tidak /flash) juga dienumerasi sebagai drive penyimpanan massal USB di host, memungkinkan Anda mengedit boot.py, main.py, dan file lainnya secara langsung. Keluarkan drive sebelum me-reset kamera agar host membuang tulisan yang di-cache.
Catatan
Karena OS memperlakukan drive sebagai perangkat blok pasif, file yang dibuat atau dimodifikasi oleh kode yang berjalan pada OpenMV Cam tidak akan muncul sampai host me-mount ulang drive. Jika OS dan OpenMV Cam menulis ke filesystem yang sama secara bersamaan, OS yang akan menang dan menimpa perubahan yang dibuat oleh kamera. Gunakan kartu SD untuk data apa pun yang ditulis kembali oleh skrip, dan mount ulang sebelum membaca file tersebut dari host.
Catatan
Kanal merah LED RGB pengguna mungkin menyala sebentar saat host membaca dari atau menulis ke drive penyimpanan massal USB — ini adalah indikator aktivitas yang digerakkan firmware, bukan kesalahan.
Ukuran penyimpanan¶
H7 Plus dikirimkan dengan:
/flash— filesystem FAT 24 MB, baca/tulis./rom— ROMFS read-only yang dipetakan memori 8 MB, digunakan untuk mengirimkan skrip dan model ML yang menguntungkan dari akses mmap zero-copy./sdcard— ukuran penuh kartu microSD yang dimasukkan (jika ada), baca/tulis.
Indikator hard‑fault¶
Jika LED RGB pengguna bersiklus cepat melalui semua warna — cukup cepat sehingga cenderung terlihat seperti LED putih berkelip 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.
Library perangkat lunak¶
Lihat indeks library untuk daftar lengkap modul — termasuk mana yang unik untuk build H7 Plus.