OpenMV Cam H7¶
OpenMV Cam H7 adalah papan visi mesin berbasis Cortex-M7 yang dibangun di atas STMicroelectronics STM32H743 pada 480 MHz dengan 1 MB SRAM internal, 2 MB flash internal, dan codec JPEG perangkat keras. Papan ini tersedia dalam dua revisi sensor — H7 dengan OV7725 dan H7 R2 dengan ON Semi MT9M114 — tetapi firmware, pinout, dan Python API-nya identik.
Untuk datasheet lengkap, foto, dan dimensi, lihat halaman produk OpenMV Cam H7.
Highlights¶
STMicroelectronics STM32H743 Cortex-M7 pada 480 MHz (1027 DMIPS).
Encoder/decoder JPEG perangkat keras.
1 MB SRAM internal — tanpa SDRAM eksternal.
2 MB flash internal (tanpa flash QSPI eksternal).
Sensor OV7725 (atau MT9M114 pada H7 R2).
USB full-speed (12 Mb/s) — terdeteksi sebagai VCP + USB mass storage oleh host.
Soket 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 output 3,3 V, 25 mA per pin (120 mA total di seluruh header), mampu interupsi. P6 tidak toleran 5 V saat digunakan dalam mode ADC atau DAC.
LED RGB pengguna dan dua LED IR 850 nm daya tinggi untuk pencahayaan aktif dalam kondisi cahaya rendah.
Catatan
H7 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 sudah 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 |
TIM4 CH3 |
RESET |
tarik ke GND untuk me-reset papan |
SYN |
pad frame-sync — terhubung ke sensor kamera saja |
BOOT0 |
tarik ke 3,3 V saat power-on untuk DFU / ROM bootloader |
LED_RED |
saluran merah LED RGB (aktif rendah) |
LED_GREEN |
saluran hijau LED RGB (aktif rendah) |
LED_BLUE |
saluran biru LED RGB (aktif rendah) |
LED_IR |
LED IR daya tinggi (kedua saluran dikendalikan bersama) |
Catatan
Pad SYN pada header terhubung langsung ke jalur trigger/eksposur sensor kamera — jalur ini tidak diarahkan ke MCU pada H7. Kendalikan atau baca secara eksternal; Anda tidak dapat mengubahnya dari MicroPython.
Pin daya¶
3.3V — rel 3,3 V yang diregulasi. Hingga 250 mA tersedia untuk shield (lebih sedikit jika kartu microSD sedang digunakan). Tidak seperti kamera yang lebih baru, pin ini bersifat dua arah — lihat peringatan di bawah.
VIN — input 3,6 – 5 V. Memberi daya pada papan melalui regulator on-board.
GND — ground bersama.
Konektor LiPo 3,7 V juga tersedia, tetapi H7 tidak memiliki pengisi daya baterai — hubungkan sel yang sudah terisi, atau suplai VIN / USB sebagai gantinya.
Catatan
Ketika USB dan VIN/LiPo keduanya hadir, input VIN/LiPo menang — saklar daya on-board memilihnya daripada USB untuk memberi daya pada papan.
Peringatan
Konektor baterai dan VIN terhubung bersama pada H7. Jangan mencolokkan LiPo dan menerapkan VIN secara bersamaan — kedua suplai akan saling bertentangan dan dapat merusak baterai, papan, atau keduanya.
Peringatan
Anda boleh memberi daya pada H7 dengan memasukkan 3,3 V langsung ke pin 3.3V jika tidak ingin melalui regulator on-board. Dalam hal itu, jangan juga menerapkan daya VIN atau USB secara bersamaan — back-driving regulator saat suplai lain aktif dapat merusak dan menghancurkan kamera secara permanen.
Tip
Gunakan estimator masa pakai baterai untuk memodelkan berapa lama H7 akan berjalan dengan baterai untuk siklus tugas aktif/tidur-dalam tertentu.
Pin pemulihan dan debug¶
RESET — tarik ke GND untuk me-reset papan. Melepaskannya memungkinkan MCU mulai secara normal.
BOOT0 — tarik ke 3,3 V saat memberi daya pada papan untuk masuk ke bootloader ROM STM32 (mode DFU). OpenMV IDE menggunakan mode ini untuk me-reflash bootloader on-board.
Papan ini mengekspos header debug SWD (RST / SWCLK / SWDIO) di sebelah header GPIO, kompatibel dengan adapter ST-LINK dan SEGGER J-Link.
Periferal onboard¶
LED¶
H7 memiliki satu LED RGB pengguna ditambah sepasang LED IR 850 nm daya tinggi:
LED RGB pengguna — dapat dikontrol 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 dikendalikan bersama melalui pin
LED_IR.LED_IRdihubungkan aktif tinggi dalam perangkat keras sementara firmware memperlakukan setiap LED on-board lainnya sebagai aktif rendah, jadi 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¶
OV7725 (atau MT9M114 pada H7 R2) 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()
Sensor duduk pada modul yang dapat dilepas — tukar dengan salah satu modul kamera OpenMV lainnya (global shutter, termal, resolusi lebih tinggi, dll.) tanpa mengubah sisa papan.
Kartu microSD¶
Ketika kartu dimasukkan, kartu tersebut dipasang secara otomatis di /sdcard dan dapat digunakan melalui sistem file reguler:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Referensi bus¶
GPIO¶
Gunakan machine.Pin untuk membaca atau mengkendalikan salah satu pin yang tercetak pada silkscreen. Output adalah 3,3 V CMOS, toleran 5 V pada sisi input, dan dapat menyerap/mengeluarkan hingga 25 mA per pin (120 mA total 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())
Setiap pin input 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 lainnya:
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. Dapat digunakan sebagai input ADC 12-bit atau output 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 / saluran |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM4 CH3 |
Catatan
TIM1 dicadangkan oleh firmware untuk menghasilkan clock piksel sensor kamera, sehingga saluran TIM1 yang secara fisik ada di P0/P1/P2 tidak dapat digunakan untuk PWM pengguna tanpa merusak kamera.
TIM4 dibagi dengan pyb.Servo — menginisiasi servo mengonfigurasi ulang seluruh timer untuk operasi 50 Hz, jadi jangan campurkan machine.PWM pada P7/P8/P9 dengan pyb.Servo dalam skrip yang sama.
Kendalikan salah satunya melalui machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Bus bit-banged perangkat lunak¶
machine.SoftI2C dan machine.SoftSPI bekerja pada GPIO manapun jika Anda membutuhkan bus tambahan.
Sensor termal (off-board)¶
Firmware mencakup 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).
Waktu¶
time¶
Modul time mencakup penundaan pemblokiran, tik monoton, 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 mengonsumsi 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 di antara 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 macet. 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()
Informasi boot dan runtime¶
Jendela USB bootloader¶
Setiap kali dinyalakan, kamera menjalankan bootloader singkat (beberapa detik) yang memungkinkan OpenMV IDE memperbarui firmware tanpa pengguna harus masuk ke mode DFU. Setelah jendela habis, bootloader menyerahkan ke boot.py lalu ke main.py.
Skrip yang berjalan dapat masuk kembali ke bootloader sesuai permintaan dengan memanggil machine.bootloader()
import machine
machine.bootloader()
Sistem file dan urutan boot¶
Firmware H7 memasang hingga tiga sistem file saat boot:
Flash internal — selalu dipasang di
/flash. Menyimpanmain.pydanREADME.txtsecara default; dibuat pada boot pertama kali.Kartu microSD — jika kartu dimasukkan, dipasang di
/sdcard.ROMFS — sistem file hanya-baca, dipetakan ke memori di
/romyang digunakan untuk mengirimkan aset data besar (misalnya model AI) yang mendapat manfaat dari akses zero-copy. Dipasang secara otomatis oleh MicroPython saat startup, sebelum Python pengguna mana pun berjalan.
Setelah pemasangan, direktori kerja diatur ke /sdcard ketika kartu ada, jika tidak ke /flash. Interpreter kemudian menjalankan skrip dari direktori tersebut:
boot.pydijalankan pada setiap soft reset (cold boot,Ctrl‑Ddari REPL, atau setiap kali skrip yang berjalan kembali).main.pydijalankan hanya pada cold boot, segera setelahboot.py. Soft reset berikutnya menjalankan kembaliboot.pytetapi langsung ke REPL — untuk menjalankan kembalimain.pyAnda harus me-reset papan sepenuhnya.
Meletakkan boot.py atau main.py ke kartu SD menggantikan salinan di flash tanpa menyentuhnya — kedua file dicari di direktori boot (/sdcard ketika kartu dipasang, jika tidak /flash).
main.py default yang dikirimkan pada papan yang baru di-flash hanya mengedipkan saluran biru LED RGB pengguna sebagai detak jantung (dua pulsa pendek, jeda pendek), sehingga Anda dapat mengetahui firmware berhasil boot tanpa host yang terhubung.
sys.path diperluas untuk menyertakan ketiga sistem file 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 bahkan dengan kartu yang ada), buat file kosong bernama SKIPSD di root /flash.
Ketika terhubung melalui USB, sistem file boot (/sdcard jika kartu ada, jika tidak /flash) juga dihitung sebagai drive USB mass-storage pada 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-nya.
Catatan
Karena OS memperlakukan drive sebagai perangkat blok pasif, file yang dibuat atau dimodifikasi oleh kode yang berjalan pada OpenMV Cam tidak akan muncul hingga host me-mount ulang drive. Jika OS dan OpenMV Cam menulis sistem file yang sama secara bersamaan, OS 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
Saluran merah LED RGB pengguna mungkin menyala sebentar saat host sedang membaca dari atau menulis ke drive USB mass-storage — ini adalah indikator aktivitas yang dikendalikan firmware, bukan kesalahan.
Ukuran penyimpanan¶
H7 dikirimkan dengan:
/flash— sistem file FAT 128 KB, baca/tulis./rom— ROMFS 128 KB hanya-baca, dipetakan ke memori./sdcard— ukuran penuh kartu microSD yang dimasukkan (jika ada), baca/tulis.
Indikator hard-fault¶
Jika LED RGB pengguna berputar 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. Re-flash firmware untuk memulihkan; jika re-flash tidak membantu, papan mungkin rusak secara fisik.
Pustaka perangkat lunak¶
Lihat indeks pustaka untuk daftar lengkap modul — termasuk mana yang unik untuk build H7.