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é.

OpenMV Cam H7

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ů

Rozložení pinů OpenMV Cam H7 OV7725

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_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 řízeny společně přes pin LED_IR. LED_IR je 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žívejte low() / high() namísto on() / 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 obsahuje main.py a README.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.py je spuštěn při každém softwarovém resetu (studený start, Ctrl‑D z REPL nebo kdykoli běžící skript skončí).

  • main.py je spuštěn pouze při studeném startu, bezprostředně po boot.py. Následné softwarové resety znovu spustí boot.py, ale skočí rovnou do REPL — pro opětovné spuštění 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 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.