OpenMV Cam H7¶
OpenMV Cam H7 je deska pro strojové vidění s jádrem Cortex‑M7, postavená kolem čipu STMicroelectronics STM32H743 běžícího na 480 MHz s 1 MB interní SRAM, 2 MB interní flash paměti a hardwarovým JPEG kodekem. Deska se dodává ve dvou revizích senzoru — H7 s OV7725 a H7 R2 s ON Semi MT9M114 — ale firmware, rozložení pinů a Python API jsou identické.
Kompletní datasheet, fotografie a rozměry najdete na produktové stránce OpenMV Cam H7.
Hlavní vlastnosti¶
STMicroelectronics STM32H743 Cortex‑M7 na 480 MHz (1027 DMIPS).
Hardwarový JPEG enkodér/dekodér.
1 MB interní SRAM — bez externí SDRAM.
2 MB interní flash paměti (bez externí QSPI flash paměti).
Senzor OV7725 (nebo MT9M114 na H7 R2).
Full‑speed USB (12 Mb/s) — vůči hostiteli se hlásí jako VCP + USB mass storage.
Slot pro microSD — SD až 2 GB, SDHC až 32 GB, SDXC až 2 TB.
Konektor pro LiPo baterii (bez nabíječky na desce — připojte nabitý článek nebo napájejte z VIN/USB).
10 I/O pinů, tolerantních k 5 V s 3,3 V výstupem, 25 mA na pin (celkem 120 mA přes header), schopných přerušení. P6 není tolerantní k 5 V, pokud se používá v režimu ADC nebo DAC.
Uživatelská RGB LED a dvě výkonné IR LED na 850 nm pro aktivní osvětlení při vidění za špatného světla.
Poznámka
H7 nemá na desce čip pro správu napájení: chybí nabíječka baterie, ADC pro napětí baterie, LED indikace nabíjení / stavu napájení i hardwarové tlačítko napájení. Připojte předem nabitý LiPo k bateriovému JST konektoru nebo napájejte desku z USB / VIN.
Rozložení pinů¶
Přehled pinů¶
Název pinu |
Funkce |
|---|---|
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 |
stáhnutím na GND resetujete desku |
SYN |
pad pro synchronizaci snímků (frame‑sync) — propojen pouze se senzorem kamery |
BOOT0 |
stáhnutím na 3,3 V při zapnutí spustíte DFU / ROM bootloader |
LED_RED |
červený kanál RGB LED (aktivní v nízké úrovni) |
LED_GREEN |
zelený kanál RGB LED (aktivní v nízké úrovni) |
LED_BLUE |
modrý kanál RGB LED (aktivní v nízké úrovni) |
LED_IR |
výkonné IR LED (oba kanály jsou řízeny společně) |
Poznámka
Pad SYN na headeru je propojen přímo se spouštěcí / expoziční linkou senzoru kamery — na H7 není propojen s MCU. Řiďte jej nebo čtěte externě; z MicroPythonu jej přepínat nelze.
Napájecí piny¶
3.3V — regulovaná napěťová větev 3,3 V. Pro shieldy je k dispozici až 250 mA (méně, pokud se používá microSD karta). Na rozdíl od novějších kamer je tento pin obousměrný — viz varování níže.
VIN — vstup 3,6 – 5 V. Napájí desku přes regulátor na desce.
GND — společná zem.
Přítomen je také konektor pro 3,7 V LiPo, ale H7 nemá nabíječku baterie — připojte předem nabitý článek nebo místo toho napájejte z VIN / USB.
Poznámka
Pokud jsou přítomny USB i VIN/LiPo, vyhrává vstup VIN/LiPo — napájecí přepínač na desce jej k napájení desky upřednostní před USB.
Varování
Bateriový konektor a VIN jsou na H7 propojeny dohromady. Nepřipojujte LiPo a zároveň nepřivádějte VIN — oba zdroje se budou navzájem přetlačovat a mohou poškodit baterii, desku nebo obojí.
Varování
H7 můžete napájet přivedením 3,3 V přímo na pin 3.3V, pokud nechcete jít přes regulátor na desce. V takovém případě zároveň nepřivádějte VIN ani napájení z USB — zpětné napájení regulátoru, zatímco je aktivní jiný zdroj, může kameru trvale poškodit a zničit.
Tip
Pomocí odhadovače výdrže baterie můžete namodelovat, jak dlouho H7 vydrží na baterii při daném poměru aktivního provozu a hlubokého spánku.
Piny pro obnovu a ladění¶
RESET — stáhnutím na GND resetujete desku. Po uvolnění se MCU normálně spustí.
BOOT0 — stáhnutím na 3,3 V při napájení desky vstoupíte do ROM bootloaderu STM32 (režim DFU). OpenMV IDE tento režim používá k přehrání bootloaderu na desce.
Deska vyvádí ladicí header SWD (RST / SWCLK / SWDIO) vedle GPIO headeru, kompatibilní s adaptéry ST‑LINK a SEGGER J‑Link.
Periferie na desce¶
LED¶
H7 má jedinou uživatelskou RGB LED plus dvojici výkonných IR LED na 850 nm:
Uživatelská RGB LED — softwarově ovladatelná, vyvedená jako
LED_RED,LED_GREENaLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
IR LED — obě LED jsou řízeny společně přes pin
LED_IR.LED_IRje v hardwaru zapojena jako aktivní v vysoké úrovni, zatímco firmware považuje každou ostatní LED na desce za aktivní v nízké úrovni, takže používejtelow()/high()namístoon()/off()(které by smysl invertovaly):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Senzor kamery¶
OV7725 (nebo MT9M114 na H7 R2) je řízen přes modul csi — kamerové senzory
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 je umístěn na vyměnitelném modulu — vyměňte jej za kterýkoli z dalších modulů kamer OpenMV (global shutter, termální, vyšší rozlišení atd.) bez změny zbytku desky.
microSD karta¶
Po vložení karty se automaticky připojí na /sdcard a je použitelná přes běžný souborový systém:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Přehled sběrnic¶
GPIO¶
Pomocí machine.Pin můžete číst nebo řídit kterýkoli z pinů popsaných na potisku. Výstupy jsou 3,3 V CMOS, tolerantní k 5 V na vstupní straně a dokážou pojmout/dodat až 25 mA na pin (celkem 120 mA přes celý 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())
Kterýkoli vstupní pin také může vyvolat přerušení při přechodech hrany:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Sběrnice |
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¶
Sběrnice |
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")
Stejný hardware lze také použít v režimu cíle (slave) přes machine.I2CTarget a vystavit paměťovou oblast jinému řadiči I²C:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Sběrnice |
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)¶
Sběrnice |
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 a DAC¶
P6 je jediný uživatelský analogový pin. Lze jej použít buď jako 12bitový vstup ADC, nebo jako výstup DAC.
ADC — plný rozsah při 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 — přes
pyb.DAC. 8bitová hodnota pokrývá 0–3,3 V:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
V režimu ADC nebo DAC je P6 tolerantní pouze k 3,3 V — nepřivádějte na něj 5 V.
PWM¶
Pin |
Časovač / kanál |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM4 CH3 |
Poznámka
TIM1 je firmwarem vyhrazen pro generování pixelových hodin senzoru kamery, takže kanály TIM1, které jsou fyzicky na P0/P1/P2, nelze použít pro uživatelské PWM, aniž by se kamera rozbila.
TIM4 je sdílen s pyb.Servo — vytvoření instance serva překonfiguruje celý časovač na provoz 50 Hz, takže ve stejném skriptu nekombinujte machine.PWM na P7/P8/P9 s pyb.Servo.
Kterýkoli z nich řiďte přes machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Softwarově bit‑bangované sběrnice¶
machine.SoftI2C a machine.SoftSPI fungují na libovolném GPIO, pokud potřebujete další sběrnici.
Termální senzor (mimo desku)¶
Firmware zahrnuje ovladač fir — ovladač termálního senzoru (fir == far infrared, vzdálené infračervené záření) pro externě zapojené termální zobrazovače:
MLX90621 — IR pole 16 × 4
MLX90640 — IR pole 32 × 24
MLX90641 — IR pole 16 × 12
AMG8833 — IR pole 8 × 8
Zapojte modul na sběrnici I²C desky a čtěte snímky pomocí 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())
Ovladač fir komunikuje se senzorem pouze přes I²C 2 — zapojte modul na P4 (SCL) a P5 (SDA).
Časování¶
time¶
Modul time pokrývá blokující prodlevy, monotónní tiky a měření uplynulého času:
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)
Virtuální časovače¶
machine.Timer plánuje periodické nebo jednorázové callbacky bez spotřeby slotu hardwarového časovače. Předejte -1 jako id, abyste použili virtuální (softwarový) časovač:
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"))
Hodnoty periody jsou v milisekundách. Voláním deinit() časovač zastavíte a slot uvolníte.
Hodiny reálného času¶
machine.RTC udržuje skutečný čas napříč resety:
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 resetuje desku, pokud aplikace zamrzne. Po spuštění jej nelze zastavit ani překonfigurovat — periodicky jej krmte uvnitř hlavní smyčky:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Informace o bootu a běhu¶
Okno USB bootloaderu¶
Při každém zapnutí kamera spustí krátký bootloader (několik sekund), který umožňuje OpenMV IDE aktualizovat firmware, aniž by uživatel musel vstupovat do režimu DFU. Po vypršení okna bootloader předá řízení boot.py a poté main.py.
Běžící skript může na požádání znovu vstoupit do bootloaderu voláním machine.bootloader()
import machine
machine.bootloader()
Souborový systém a pořadí bootu¶
Firmware H7 při bootu připojuje až tři souborové systémy:
Interní flash paměť — vždy připojena na
/flash. Ve výchozím stavu obsahujemain.pyaREADME.txt; vytvořena při úplně prvním bootu.microSD karta — pokud je vložena karta, je připojena na
/sdcard.ROMFS — souborový systém určený pouze pro čtení, mapovaný do paměti na
/rom, používaný pro dodávání velkých datových prostředků (např. AI modelů), které těží z přístupu bez kopírování. Připojen automaticky MicroPythonem při startu, ještě před spuštěním jakéhokoli uživatelského Pythonu.
Po připojení je pracovní adresář nastaven na /sdcard, je‑li karta přítomna, jinak na /flash. Interpret pak spouští skripty z tohoto adresáře:
boot.pyje spuštěn při každém softwarovém resetu (studený start,Ctrl‑Dz REPL nebo kdykoli běžící skript skončí).main.pyje spuštěn pouze při studeném startu, bezprostředně poboot.py. Následné softwarové resety znovu spustíboot.py, ale skočí rovnou do REPL — pro opětovné spuštěnímain.pymusíte desku plně resetovat.
Vložení souboru boot.py nebo main.py na SD kartu přepíše kopii ve flash paměti, aniž by se jí dotklo — oba soubory se hledají v boot adresáři (/sdcard, je‑li karta připojena, jinak /flash).
Výchozí main.py dodávaný na čerstvě nahrané desce jen bliká modrým kanálem uživatelské RGB LED jako srdeční tep (dva krátké pulzy, krátká mezera), takže poznáte, že firmware naběhl správně, aniž by byl připojen jakýkoli hostitel.
sys.path je rozšířen o všechny tři souborové systémy a jejich podadresáře lib/, takže importovatelné moduly mohou být v /flash/lib, /sdcard/lib nebo /rom/lib.
Chcete‑li systém přimět, aby ignoroval vloženou SD kartu (například ke spuštění main.py z flash paměti i při přítomnosti karty), vytvořte prázdný soubor s názvem SKIPSD v kořeni /flash.
Při připojení přes USB se boot souborový systém (/sdcard, je‑li karta přítomna, jinak /flash) na hostiteli rovněž hlásí jako USB mass‑storage disk, což vám umožní přímo upravovat boot.py, main.py a jakékoli další soubory. Před resetem kamery disk vysuňte, aby hostitel vyprázdnil své uložené zápisy do mezipaměti.
Poznámka
Protože operační systém zachází s diskem jako s pasivním blokovým zařízením, soubory vytvořené nebo upravené kódem běžícím na OpenMV Cam se neobjeví, dokud hostitel disk znovu nepřipojí. Pokud OS i OpenMV Cam zapisují do stejného souborového systému ve stejnou dobu, vyhraje OS a přepíše změny provedené kamerou. Pro jakákoli data, která skript zapisuje zpět, používejte SD kartu a před čtením těchto souborů z hostitele disk znovu připojte.
Poznámka
Červený kanál uživatelské RGB LED se může krátce rozsvítit, zatímco hostitel čte z USB mass‑storage disku nebo na něj zapisuje — jde o indikátor aktivity řízený firmwarem, nikoli o závadu.
Velikosti úložiště¶
H7 se dodává s:
/flash— FAT souborový systém o velikosti 128 KB, pro čtení i zápis./rom— ROMFS o velikosti 128 KB, určený pouze pro čtení a mapovaný do paměti./sdcard— plná velikost vložené microSD karty (pokud je přítomna), pro čtení i zápis.
Indikátor hard fault¶
Pokud uživatelská RGB LED rychle cyklicky mění všechny barvy — dostatečně rychle na to, aby spíše vypadala jako blikající bílá LED než jako odlišné odstíny — firmware narazil na neopravitelnou hard fault. K obnově přehrajte firmware; pokud přehrání nepomůže, deska může být fyzicky poškozena.
Softwarové knihovny¶
Kompletní seznam modulů — včetně těch, které jsou jedinečné pro build H7 — najdete v indexu knihoven.