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.

OpenMV Cam H7 Plus

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ů

Rozložení pinů OpenMV Cam H7 Plus OV5640

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_GREEN a LED_BLUE

    from 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_IR je 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žijte low() / high() namísto on() / 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 obsahuje main.py a README.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.py se vykoná při každém softwarovém resetu (studený start, Ctrl‑D z REPL nebo kdykoli běžící skript skončí).

  • main.py se vykoná pouze při studeném startu, bezprostředně po boot.py. Následující softwarové resety znovu spustí boot.py, ale skočí rovnou do REPL — abyste znovu spustili main.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:

  • /flash24 MB FAT souborový systém, pro čtení i zápis.

  • /rom8 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.