OpenMV Cam H7 Plus¶
OpenMV Cam H7 Plus kombinuje čip STMicroelectronics STM32H743 (Cortex‑M7 @ 480 MHz) s 32 MB externí SDRAM, 32 MB QSPI flash paměti, hardwarovým JPEG kodekem a 5MP kamerovým modulem OV5640 na vyměnitelném nosiči. Rozšířená paměť se dobře hodí pro snímání ve vysokém rozlišení a velké obrazové buffery.
Kompletní katalogový list, fotografie a rozměry najdete na produktové stránce OpenMV Cam H7 Plus.
Hlavní vlastnosti¶
STMicroelectronics STM32H743 Cortex‑M7 na 480 MHz (1027 DMIPS).
Hardwarový JPEG enkodér/dekodér.
32 MB externí SDRAM (32‑bitová @ 100 MHz, 400 MB/s) plus 1 MB interní SRAM.
2 MB interní flash paměti + 32 MB externí QSPI flash paměti (~100 MB/s čtení).
OV5640 5MP senzor s rolling shutterem.
Full‑speed USB (12 Mb/s) — hostiteli se hlásí jako VCP + USB velkokapacitní úložiště.
Slot pro microSD — SD do 2 GB, SDHC do 32 GB, SDXC do 2 TB.
Konektor pro LiPo baterii (bez integrované nabíječky — připojte nabitý článek nebo napájejte z VIN/USB).
10 I/O pinů, odolných do 5 V s výstupem 3,3 V, 25 mA na pin (120 mA celkem napříč konektorem), schopných přerušení. P6 není odolný do 5 V, pokud je použit v režimu ADC nebo DAC.
Uživatelská RGB LED a dvě výkonné 850 nm IR LED pro aktivní osvětlení při strojovém vidění v šeru.
Poznámka
H7 Plus nemá žádný integrovaný čip pro správu napájení: chybí nabíječka baterie, ADC pro měření napětí baterie, LED pro stav nabíjení / napájení i hardwarové tlačítko napájení. Připojte předem nabitý LiPo článek 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 |
digitální I/O |
RESET |
stáhnutím na GND resetujete desku |
SYN |
pad pro synchronizaci snímků — připojen pouze ke kamerovému senzoru |
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 nule) |
LED_GREEN |
zelený kanál RGB LED (aktivní v nule) |
LED_BLUE |
modrý kanál RGB LED (aktivní v nule) |
LED_IR |
výkonné IR LED (oba kanály ovládané společně) |
Poznámka
Pad SYN na konektoru je připojen přímo na trigger / expoziční linku kamerového senzoru — na H7 Plus se nepropojuje s MCU. Ovládejte jej nebo čtěte externě; z MicroPythonu jej přepínat nelze.
Napájecí piny¶
3.3V — stabilizovaná napájecí 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 integrovaný stabilizátor.
GND — společná zem.
Přítomen je také konektor pro 3,7 V LiPo, ale H7 Plus nemá nabíječku baterie — připojte předem nabitý článek, nebo místo toho napájejte přes VIN / USB.
Poznámka
Pokud jsou přítomny USB i VIN/LiPo zároveň, vítězí vstup VIN/LiPo — integrovaný přepínač napájení dá pro napájení desky přednost jemu před USB.
Varování
Bateriový konektor a VIN jsou na H7 Plus propojeny dohromady. Nepřipojujte LiPo a zároveň nepřivádějte VIN — oba zdroje se budou navzájem přetahovat a mohou poškodit baterii, desku, nebo obojí.
Varování
H7 Plus můžete napájet přivedením 3,3 V přímo na pin 3.3V, pokud nechcete jít přes integrovaný stabilizátor. V takovém případě zároveň nepřivádějte napájení VIN ani USB — zpětné napájení stabilizá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 modelovat, jak dlouho H7 Plus vydrží na baterii pro daný pracovní cyklus aktivního / 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 během napájení desky vstoupíte do ROM bootloaderu STM32 (režim DFU). OpenMV IDE tento režim používá k přeflashování integrovaného bootloaderu.
Deska má vyveden SWD ladicí konektor (RST / SWCLK / SWDIO / SWO) vedle GPIO konektoru, kompatibilní s adaptéry ST‑LINK a SEGGER J‑Link.
Poznámka
Trasovací pin SWO je sdílen se SPI hodinovou linkou kamerového konektoru. SWO nelze používat současně s žádným kamerovým modulem, který s MCU komunikuje přes SPI — například s modulem FLIR® Lepton® Adapter Module — zvolte jedno nebo druhé.
Integrované periferie¶
LED¶
H7 Plus má jednu uživatelskou RGB LED plus dvojici výkonných 850 nm IR LED:
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 ovládány společně přes pin
LED_IR.LED_IRje v hardwaru zapojen jako aktivní ve vysoké úrovni, zatímco firmware zachází se všemi ostatními integrovanými LED jako s aktivními v nule, takže použijtelow()/high()namístoon()/off()(které by smysl obrátily):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Kamerový senzor¶
OV5640 je ovládán 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()
OV5640 má integrovaný JPEG kompresor. Nastavte csi.CSI.pixformat na csi.JPEG a senzor dodává komprimované snímky přímo do kamery přes kamerovou sběrnici, což umožňuje praktické snímání ve vysokém rozlišení: csi.HD (1280×720), csi.FHD (1920×1080) i plné 5MP csi.WQXGA2 (2592×1944) — všechna proudí jako JPEG. Kompresi vyladíte pomocí csi.CSI.quality (0-100, vyšší = větší snímky, více detailů):
cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)
Senzor je umístěn na vyměnitelném modulu — vyměňte jej za kterýkoli z dalších kamerových modulů OpenMV (global shutter, termální, vyšší rozlišení atd.) bez nutnosti měnit zbytek desky.
Strojové učení¶
ml — Strojové učení spouští kvantizované TFLite modely na Cortex‑M7 s jádry CMSIS‑NN — dostatečně rychle pro kompaktní detektory při několika snímcích za sekundu. Modely na souborovém systému /rom určeném jen ke čtení se načítají přímo z flash paměti bez kopírování do RAM. Zde je 128×128 BlazeFace detektor, který do každého snímku překresluje detekovaný obličej a jeho šest význačných bodů:
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")
microSD karta¶
Po vložení karty se automaticky připojí do /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 čtete nebo ovládáte kterýkoli z popsaných pinů. Výstupy jsou 3,3 V CMOS, na vstupní straně odolné do 5 V a mohou pohlcovat/dodávat až 25 mA na pin (120 mA celkem napříč celým konektorem).
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 může také vyvolat přerušení při hranových přechodech:
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 přes machine.I2CTarget použít i v cílovém režimu (slave) k vystavení paměťové oblasti jinému I²C řadiči:
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 12‑bitový ADC vstup, nebo jako DAC výstup.
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. 8‑bitová 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 odolný pouze do 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 |
Poznámka
TIM1 je firmwarem vyhrazen pro generování pixel clocku kamerového senzoru, takže kanály TIM1, které jsou fyzicky na P0/P1/P2, nelze použít pro uživatelské PWM, aniž by se narušila funkce kamery.
TIM4 je sdílen s pyb.Servo — vytvoření instance serva překonfiguruje celý časovač pro provoz na 50 Hz, takže v jednom skriptu nekombinujte machine.PWM na P7/P8 s pyb.Servo.
Kterýkoli z nich ovládejte 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 (externí)¶
Firmware obsahuje 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 I²C sběrnici 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, aniž by zabíral slot hardwarového časovače. Pro použití virtuálního (softwarového) časovače předejte jako id hodnotu -1
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 uvolníte jeho slot.
Hodiny reálného času¶
machine.RTC udržuje reálný čas i přes 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 — pravidelně 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 spuštění 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í tohoto okna bootloader předá řízení souboru boot.py a poté main.py.
Běžící skript může bootloader znovu spustit na vyžádání voláním machine.bootloader()
import machine
machine.bootloader()
Souborový systém a pořadí spouštění¶
Firmware H7 Plus při spuštění připojuje až tři souborové systémy:
Interní flash — vždy připojen v
/flash. Ve výchozím stavu obsahujemain.pyaREADME.txt; vytvoří se při úplně prvním spuštění.microSD karta — pokud je karta vložena, je připojena v
/sdcard.ROMFS — souborový systém určený jen ke čtení, mapovaný do paměti v
/rom, používaný k distribuci velkých datových aktiv (např. AI modelů), která těží z přístupu bez kopírování. MicroPython jej připojuje automaticky 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, pokud je karta přítomna, jinak na /flash. Interpret poté spouští skripty z tohoto adresáře:
boot.pyse vykoná při každém softwarovém resetu (studený start,Ctrl‑Dz REPL nebo kdykoli běžící skript skončí).main.pyse vykoná pouze při studeném startu, bezprostředně poboot.py. Následující softwarové resety znovu spustíboot.py, ale skočí rovnou do REPL — abyste znovu spustilimain.py, musí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 vyhledávají ve spouštěcím adresáři (/sdcard, když je karta připojena, jinak /flash).
Výchozí main.py dodaný na čerstvě naflashované desce pouze bliká modrým kanálem uživatelské RGB LED jako tep srdce (dva krátké pulzy, krátká pauza), takže poznáte, že firmware naběhl správně bez připojeného hostitele.
sys.path je rozšířen tak, aby zahrnoval všechny tři souborové systémy a jejich podadresáře lib/, takže importovatelné moduly mohou být umístěny v /flash/lib, /sdcard/lib nebo /rom/lib.
Chcete‑li donutit systém ignorovat vloženou SD kartu (například pro spuštění main.py z flash paměti i s přítomnou kartou), vytvořte prázdný soubor s názvem SKIPSD v kořeni /flash.
Při připojení přes USB se spouštěcí souborový systém (/sdcard, pokud je karta přítomna, jinak /flash) na hostiteli vyčíslí také jako USB velkokapacitní úložiště, což vám umožní přímo upravovat boot.py, main.py a jakékoli další soubory. Před resetováním kamery disk vysuňte (eject), aby hostitel zapsal své uložené změny.
Poznámka
Protože OS s diskem zachází 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, OS zvítězí a přepíše změny provedené kamerou. Pro jakákoli data, která skript zapisuje zpět, použijte SD kartu a před čtením těchto souborů z hostitele ji 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 velkokapacitního úložiště nebo do něj zapisuje — jde o firmwarem řízený indikátor aktivity, nikoli o chybu.
Velikosti úložiště¶
H7 Plus se dodává s:
/flash— 24 MB FAT souborový systém, pro čtení i zápis./rom— 8 MB ROMFS jen pro čtení, mapovaný do paměti, používaný k distribuci skriptů a ML modelů, které těží z přístupu mmap bez kopírování./sdcard— plná velikost vložené microSD karty (pokud je přítomna), pro čtení i zápis.
Indikátor hard‑faultu¶
Pokud uživatelská RGB LED rychle cykluje přes všechny barvy — tak rychle, že to spíše vypadá jako mihotavá bílá LED než jako jednotlivé odstíny — firmware narazil na neobnovitelný hard fault. K obnovení přeflashujte firmware; pokud přeflashování nepomůže, deska může být fyzicky poškozena.
Softwarové knihovny¶
Kompletní seznam modulů — včetně toho, které jsou jedinečné pro build H7 Plus — najdete v indexu knihoven.