OpenMV Cam H7¶
OpenMV Cam H7 je Cortex‑M7 ploča za strojni vid izgrađena oko STMicroelectronics STM32H743 na 480 MHz s 1 MB unutarnjeg SRAM‑a, 2 MB unutarnje flash memorije i hardverskim JPEG kodekom. Ploča dolazi u dvije revizije senzora — H7 s OV7725 i H7 R2 s ON Semi MT9M114 — ali su ugrađeni program (firmware), raspored pinova i Python API identični.
Za potpunu tehničku dokumentaciju, fotografije i dimenzije pogledajte stranicu proizvoda OpenMV Cam H7.
Istaknute značajke¶
STMicroelectronics STM32H743 Cortex‑M7 na 480 MHz (1027 DMIPS).
Hardverski JPEG koder/dekoder.
1 MB unutarnjeg SRAM‑a — bez vanjskog SDRAM‑a.
2 MB unutarnje flash memorije (bez vanjske QSPI flash memorije).
Senzor OV7725 (ili MT9M114 na H7 R2).
Full‑speed USB (12 Mb/s) — domaćinu se prikazuje kao VCP + USB masovna pohrana.
microSD utor — SD do 2 GB, SDHC do 32 GB, SDXC do 2 TB.
Priključak za LiPo bateriju (bez ugrađenog punjača — priključite napunjenu ćeliju ili napajajte s VIN/USB).
10 ulazno/izlaznih pinova, podnose 5 V s izlazom od 3,3 V, 25 mA po pinu (ukupno 120 mA kroz cijeli konektor), s mogućnošću prekida. P6 ne podnosi 5 V kada se koristi u ADC ili DAC načinu rada.
Korisnička RGB LED i dvije IR LED diode velike snage na 850 nm za aktivno osvjetljenje pri vidu u slabom svjetlu.
Napomena
H7 nema ugrađeni čip za upravljanje napajanjem: nema punjača baterije, nema ADC‑a za napon baterije, nema LED dioda za status punjenja / napajanja i nema hardverskog gumba za napajanje. Priključite prethodno napunjenu LiPo bateriju na JST priključak baterije ili napajajte ploču s USB‑a / VIN‑a.
Raspored pinova¶
Referenca pinova¶
Naziv pina |
Funkcija |
|---|---|
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 |
spojite na GND za resetiranje ploče |
SYN |
pad za sinkronizaciju sličica — spojen samo na senzor kamere |
BOOT0 |
spojite na 3,3 V pri uključivanju za DFU / ROM pokretač (bootloader) |
LED_RED |
crveni kanal RGB LED diode (aktivan na niskoj razini) |
LED_GREEN |
zeleni kanal RGB LED diode (aktivan na niskoj razini) |
LED_BLUE |
plavi kanal RGB LED diode (aktivan na niskoj razini) |
LED_IR |
IR LED diode velike snage (oba kanala upravljana zajedno) |
Napomena
Pad SYN na konektoru izravno je spojen na okidačku / ekspozicijsku liniju senzora kamere — na H7 ne vodi do MCU‑a. Pobuđujte ga ili očitavajte izvana; ne možete ga prebacivati iz MicroPythona.
Pinovi za napajanje¶
3.3V — regulirana napajačka linija od 3,3 V. Do 250 mA dostupno za proširenja (manje ako se koristi microSD kartica). Za razliku od novijih kamera, ovaj pin je dvosmjeran — pogledajte upozorenje u nastavku.
VIN — ulaz od 3,6 – 5 V. Napaja ploču preko ugrađenog regulatora.
GND — zajednička masa.
Prisutan je i priključak za LiPo bateriju od 3,7 V, ali H7 nema punjač baterije — priključite prethodno napunjenu ćeliju ili umjesto toga napajajte s VIN‑a / USB‑a.
Napomena
Kada su prisutni i USB i VIN/LiPo, ulaz VIN/LiPo pobjeđuje — ugrađena sklopka za napajanje bira njega umjesto USB‑a za napajanje ploče.
Upozorenje
Priključak baterije i VIN su međusobno povezani na H7. Nemojte istovremeno priključiti LiPo bateriju i dovesti VIN — dva napajanja će se boriti jedno protiv drugog i mogu oštetiti bateriju, ploču ili oboje.
Upozorenje
Možete napajati H7 dovodeći 3,3 V izravno na 3.3V pin ako ne želite ići kroz ugrađeni regulator. U tom slučaju nemojte istovremeno dovoditi i VIN ili USB napajanje — povratno pobuđivanje regulatora dok je aktivno drugo napajanje može trajno oštetiti i uništiti kameru.
Savjet
Upotrijebite procjenjivač trajanja baterije za modeliranje koliko dugo će H7 raditi na bateriji za zadani radni ciklus aktivnosti / dubokog mirovanja.
Pinovi za oporavak i otklanjanje pogrešaka¶
RESET — spojite na GND za resetiranje ploče. Otpuštanje omogućuje MCU‑u da se normalno pokrene.
BOOT0 — spojite na 3,3 V dok napajate ploču za ulazak u STM32 ROM pokretač (bootloader) (DFU način rada). OpenMV IDE koristi ovaj način rada za ponovno upisivanje ugrađenog pokretača (bootloader).
Ploča izlaže SWD debug konektor (RST / SWCLK / SWDIO) pokraj GPIO konektora, kompatibilan s ST‑LINK i SEGGER J‑Link adapterima.
Ugrađene periferije¶
LED diode¶
H7 ima jednu korisničku RGB LED diodu plus par IR LED dioda velike snage na 850 nm:
Korisnička RGB LED — softverski upravljiva, izložena kao
LED_RED,LED_GREENiLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
IR LED diode — obje LED diode upravljane su zajedno preko
LED_IRpina.LED_IRje u hardveru ožičen kao aktivan na visokoj razini, dok ugrađeni program svaku drugu ugrađenu LED diodu tretira kao aktivnu na niskoj razini, pa upotrijebitelow()/high()umjestoon()/off()(koje bi invertirale smisao):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Senzor kamere¶
OV7725 (ili MT9M114 na H7 R2) upravljan je preko modula csi — senzori kamere
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()
Senzor se nalazi na odvojivom modulu — zamijenite ga bilo kojim drugim OpenMV modulom kamere (globalna zatvarač, termalni, veća razlučivost itd.) bez mijenjanja ostatka ploče.
microSD kartica¶
Kada se kartica umetne, automatski se montira na /sdcard i može se koristiti kroz uobičajeni datotečni sustav:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Referenca sabirnica¶
GPIO¶
Upotrijebite machine.Pin za očitavanje ili pobuđivanje bilo kojeg od pinova označenih sitotiskom. Izlazi su 3,3 V CMOS, podnose 5 V na ulaznoj strani i mogu ponirati/izvirati do 25 mA po pinu (ukupno 120 mA kroz cijeli konektor).
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())
Bilo koji ulazni pin također može pokrenuti prekid pri prijelazima ruba:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Sabirnica |
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¶
Sabirnica |
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")
Isti hardver može se koristiti i u ciljnom (slave) načinu rada preko machine.I2CTarget za izlaganje memorijskog područja drugom I²C kontroleru:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Sabirnica |
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)¶
Sabirnica |
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 i DAC¶
P6 je jedini korisnički analogni pin. Može se koristiti kao 12‑bitni ADC ulaz ili kao DAC izlaz.
ADC — pun raspon na 3,3 V na pinu:
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 — preko
pyb.DAC. 8‑bitna vrijednost pokriva 0–3,3 V:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
U ADC ili DAC načinu rada P6 podnosi samo 3,3 V — nemojte mu dovoditi 5 V.
PWM¶
Pin |
Mjerač vremena / kanal |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM4 CH3 |
Napomena
TIM1 je rezerviran od strane ugrađenog programa za generiranje pikselnog takta senzora kamere, pa se TIM1 kanali koji su fizički na P0/P1/P2 ne mogu koristiti za korisnički PWM bez prekidanja rada kamere.
TIM4 se dijeli s pyb.Servo — instanciranje serva rekonfigurira cijeli mjerač vremena za rad na 50 Hz, pa nemojte miješati machine.PWM na P7/P8/P9 s pyb.Servo u istoj skripti.
Pobuđujte bilo koji od njih preko machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Softverski bit‑bang sabirnice¶
machine.SoftI2C i machine.SoftSPI rade na bilo kojem GPIO pinu ako vam je potrebna dodatna sabirnica.
Termalni senzor (izvan ploče)¶
Ugrađeni program uključuje upravljački program fir — upravljački program termalnog senzora (fir == daleko infracrveno) za izvana ožičene termalne snimače:
MLX90621 — IR matrica 16 × 4
MLX90640 — IR matrica 32 × 24
MLX90641 — IR matrica 16 × 12
AMG8833 — IR matrica 8 × 8
Ožičite modul na I²C sabirnicu ploče i čitajte sličice s 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())
Upravljački program fir komunicira sa senzorom samo preko I²C 2 — ožičite modul na P4 (SCL) i P5 (SDA).
Vremenski raspored¶
time¶
Modul time pokriva blokirajuća kašnjenja, monotone otkucaje i mjerenje proteklog vremena:
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)
Virtualni mjerači vremena¶
machine.Timer zakazuje periodične ili jednokratne povratne pozive bez trošenja utora hardverskog mjerača vremena. Proslijedite -1 kao id za korištenje virtualnog (softverskog) mjerača vremena:
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"))
Vrijednosti perioda izražene su u milisekundama. Pozovite deinit() za zaustavljanje i oslobađanje utora.
Sat stvarnog vremena¶
machine.RTC čuva vrijeme zidnog sata kroz resetiranja:
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 resetira ploču ako se aplikacija zaglavi. Jednom pokrenut, ne može se zaustaviti ni rekonfigurirati — hranite ga periodično unutar svoje glavne petlje:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Informacije o pokretanju i izvođenju¶
Prozor USB pokretača (bootloader)¶
Pri svakom uključivanju kamera pokreće kratak pokretač (bootloader) (nekoliko sekundi) koji omogućuje OpenMV IDE‑u da ažurira ugrađeni program bez potrebe da korisnik ulazi u DFU način rada. Nakon isteka prozora pokretač (bootloader) predaje kontrolu datoteci boot.py, a zatim main.py.
Skripta koja se izvodi može na zahtjev ponovno ući u pokretač (bootloader) pozivanjem machine.bootloader()
import machine
machine.bootloader()
Datotečni sustav i redoslijed pokretanja¶
Ugrađeni program H7 montira do tri datotečna sustava pri pokretanju:
Unutarnja flash memorija — uvijek montirana na
/flash. Sadržimain.pyiREADME.txtpo zadanom; stvara se pri prvom pokretanju.microSD kartica — ako je kartica umetnuta, montira se na
/sdcard.ROMFS — datotečni sustav samo za čitanje, mapiran u memoriju, na
/rom, koji se koristi za isporuku velikih podatkovnih resursa (npr. AI modela) koji imaju koristi od pristupa bez kopiranja. MicroPython ga montira automatski pri pokretanju, prije nego što se pokrene bilo koji korisnički Python.
Nakon montiranja, radni direktorij postavlja se na /sdcard kada je kartica prisutna, inače na /flash. Interpreter zatim izvodi skripte iz tog direktorija:
boot.pyse izvršava pri svakom mekom resetiranju (hladno pokretanje,Ctrl‑Diz REPL‑a ili kad god se skripta koja se izvodi vrati).main.pyse izvršava samo pri hladnom pokretanju, odmah nakonboot.py. Naknadna meka resetiranja ponovno pokrećuboot.py, ali skaču izravno na REPL — za ponovno pokretanjemain.pymorate u potpunosti resetirati ploču.
Postavljanje boot.py ili main.py na SD karticu nadjačava kopiju u flash memoriji bez njezinog mijenjanja — obje se datoteke traže u direktoriju za pokretanje (/sdcard kada je kartica montirana, inače /flash).
Zadani main.py koji se isporučuje na svježe upisanoj ploči samo trepće plavim kanalom korisničke RGB LED diode kao otkucaj srca (dva kratka impulsa, kratka stanka), tako da možete reći da se ugrađeni program uredno pokrenuo bez ikakvog priključenog domaćina.
sys.path je proširen kako bi uključio sva tri datotečna sustava i njihove lib/ poddirektorije, pa moduli koji se mogu uvoziti mogu se nalaziti u /flash/lib, /sdcard/lib ili /rom/lib.
Da biste prisilili sustav da zanemari umetnutu SD karticu (na primjer da pokrenete main.py iz flash memorije čak i uz prisutnu karticu), stvorite praznu datoteku pod nazivom SKIPSD u korijenu /flash.
Kada je povezan preko USB‑a, datotečni sustav za pokretanje (/sdcard ako je kartica prisutna, inače /flash) također se nabraja kao USB pogon za masovnu pohranu na domaćinu, omogućujući vam izravno uređivanje boot.py, main.py i bilo kojih drugih datoteka. Izbacite pogon prije resetiranja kamere kako bi domaćin ispraznio svoje predmemorirane zapise.
Napomena
Budući da OS tretira pogon kao pasivni blok uređaj, datoteke koje stvori ili izmijeni kod koji se izvodi na OpenMV Cam neće se pojaviti dok domaćin ponovno ne montira pogon. Ako i OS i OpenMV Cam istovremeno pišu na isti datotečni sustav, OS će pobijediti i prebrisati izmjene koje je napravila kamera. Koristite SD karticu za sve podatke koje skripta zapisuje natrag i ponovno montirajte prije čitanja tih datoteka s domaćina.
Napomena
Crveni kanal korisničke RGB LED diode može se nakratko upaliti dok domaćin čita s USB pogona za masovnu pohranu ili piše na njega — to je indikator aktivnosti pokretan ugrađenim programom, a ne kvar.
Veličine pohrane¶
H7 se isporučuje s:
/flash— 128 KB FAT datotečni sustav, za čitanje/pisanje./rom— 128 KB ROMFS mapiran u memoriju, samo za čitanje./sdcard— pune veličine bilo koje umetnute microSD kartice (kada je prisutna), za čitanje/pisanje.
Indikator teškog kvara (hard‑fault)¶
Ako korisnička RGB LED dioda brzo izmjenjuje sve boje — dovoljno brzo da obično izgleda kao treperava bijela LED dioda umjesto kao zasebne nijanse — ugrađeni program je naišao na nepopravljiv teški kvar (hard fault). Ponovno upišite ugrađeni program za oporavak; ako ponovno upisivanje ne pomogne, ploča je možda fizički oštećena.
Softverske biblioteke¶
Pogledajte indeks biblioteke za potpuni popis modula — uključujući one koji su jedinstveni za H7 verziju.