OpenMV Cam M7¶
OpenMV Cam M7 je deska pro strojové vidění s jádrem Cortex‑M7, postavená kolem čipu STMicroelectronics STM32F765 na 216 MHz s 512 KB interní SRAM a 2 MB interní flash paměti. Přibalený senzor OV7725 snímá snímky 640×480 ve stupních šedi nebo 320×240 v RGB565 rychlostí až 150 FPS a 10pinová uživatelská lišta zpřístupňuje periferie UART, I²C, SPI, CAN, ADC/DAC a PWM.
Kompletní katalogový list, fotografie a rozměry najdete na produktové stránce OpenMV Cam M7.
Hlavní vlastnosti¶
STMicroelectronics STM32F765 Cortex‑M7 na 216 MHz.
512 KB interní SRAM — žádná externí SDRAM.
2 MB interní flash (žádná externí QSPI flash).
Senzor OV7725 — 640×480 ve stupních šedi nebo 320×240 v RGB565 rychlostí až 150 FPS.
Full‑speed USB (12 Mb/s) — vůči hostiteli se hlásí jako VCP + USB velkokapacitní úložiště.
Slot pro microSD — SD až 2 GB, SDHC až 32 GB, SDXC až 2 TB.
10 I/O pinů, odolných vůči 5 V s výstupem 3,3 V, 25 mA na pin (celkem 120 mA přes celou lištu), s podporou přerušení. P6 není odolný vůči 5 V při použití v režimu ADC nebo DAC.
Uživatelská RGB LED a dvě výkonné IR LED 850 nm pro aktivní osvětlení při vidění za slabého světla.
Poznámka
M7 nemá žádný čip pro správu napájení na desce: nemá konektor na baterii, nabíječku baterie, ADC pro měření napětí baterie, LED pro indikaci nabíjení / stavu napájení ani hardwarové tlačítko napájení. Desku napájejte přes USB nebo VIN.
Rozložení pinů¶
Přehled pinů¶
Název pinu |
Funkce |
|---|---|
P0 |
UART1 RX / SPI2 MOSI |
P1 |
UART1 TX / SPI2 MISO |
P2 |
SPI2 SCK / CAN2 TX |
P3 |
SPI2 NSS (CS) / CAN2 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 |
připojením na GND restartujete desku |
SYN |
pad pro synchronizaci snímků — připojen pouze k senzoru kamery |
BOOT0 |
připojení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 řízeny společně) |
Poznámka
Pad SYN na liště je připojen přímo k spouštěcí / expoziční lince senzoru kamery — na M7 nevede k MCU. Řiďte jej nebo čtěte externě; z MicroPythonu jej přepínat nelze.
Napájecí piny¶
3.3V — regulovaná 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 regulátor na desce.
GND — společná zem.
Poznámka
Pokud jsou přítomny USB i VIN zároveň, desku napájí ten s vyšším napětím — diody na desce jednoduše vyberou silnější větev.
Varování
M7 smíte 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ě současně nepřivádějte také napájení z VIN nebo USB — zpětné buzení regulátoru, zatímco je aktivní jiný zdroj, může trvale poškodit a zničit kameru.
Tip
Pomocí odhadu výdrže baterie můžete modelovat, jak dlouho M7 vydrží na baterii při daném poměru aktivního / hlubokého spánku.
Piny pro obnovu a ladění¶
RESET — připojením na GND restartujete desku. Jeho uvolnění nechá MCU normálně nastartovat.
BOOT0 — připojením na 3,3 V během napájení desky vstoupíte do STM32 ROM bootloaderu (režim DFU). OpenMV IDE tento režim používá k přeflashování bootloaderu na desce.
Deska zpřístupňuje ladicí lištu SWD (RST / SWCLK / SWDIO) vedle GPIO lišty, kompatibilní s adaptéry ST‑LINK a SEGGER J‑Link.
Periferie na desce¶
LED¶
M7 má jednu uživatelskou RGB LED a dvojici výkonných IR LED 850 nm:
Uživatelská RGB LED — softwarově ovladatelná, zpřístupněná 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 jedničce, zatímco firmware považuje každou ostatní LED na desce za aktivní v nule, takže použijtelow()/high()namístoon()/off()(které by logiku obrátily):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Senzor kamery¶
OV7725 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 na M7 připájen k desce — není na vyměnitelném modulu.
microSD karta¶
Když je karta vložena, automaticky se 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 popsaných pinů. Výstupy jsou 3,3 V CMOS, na vstupní straně odolné vůči 5 V a mohou pohlcovat/dodávat až 25 mA na pin (celkem 120 mA přes celou lištu).
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 také použít v cílovém (slave) režimu přes machine.I2CTarget k zpřístupnění 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¶
Sběrnice |
TX |
RX |
|---|---|---|
CAN2 |
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 odolný pouze vůči 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 to narušilo kameru.
TIM4 je sdílen s pyb.Servo — vytvoření instance serva překonfiguruje celý časovač na provoz 50 Hz, takže v jednom 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ě emulované sběrnice (bit‑banging)¶
machine.SoftI2C a machine.SoftSPI fungují na libovolném GPIO, pokud potřebujete další sběrnici.
Teplotní senzor (mimo desku)¶
Firmware obsahuje ovladač fir — ovladač termálního senzoru (fir == far infrared, vzdálené infračervené záření) pro externě zapojené termovizní senzory:
MLX90621 — IR pole 16 × 4
MLX90640 — IR pole 32 × 24
MLX90641 — IR pole 16 × 12
AMG8833 — IR pole 8 × 8
Modul připojte na I²C sběrnici desky a snímky čtěte 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 — modul zapojte 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. Předáním -1 jako id použijete 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 uvolníte slot.
Hodiny reálného času¶
machine.RTC udržuje reálný čas i přes restarty:
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 restartuje desku, pokud aplikace zamrzne. Po spuštění jej nelze zastavit ani překonfigurovat — pravidelně jej obnovujte 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í okna bootloader předá řízení boot.py a poté main.py.
Běžící skript může bootloader na vyžádání znovu spustit voláním machine.bootloader()
import machine
machine.bootloader()
Souborový systém a pořadí spouštění¶
Firmware M7 při spuštění připojí až tři souborové systémy:
Interní flash — vždy připojena na
/flash. Ve výchozím stavu obsahujemain.pyaREADME.txt; vytvořena při úplně prvním spuštění.microSD karta — pokud je karta vložena, je připojena na
/sdcard.ROMFS — souborový systém pouze pro čtení mapovaný do paměti na
/rom, používaný k 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 Python kódu.
Po připojení je pracovní adresář nastaven na /sdcard, pokud je karta přítomna, jinak na /flash. Interpret pak spouští skripty z tohoto adresáře:
boot.pyse spustí při každém softwarovém resetu (studený start,Ctrl‑Dz REPL nebo kdykoli běžící skript skončí).main.pyse spustí pouze při studeném startu, ihned poboot.py. Následné softwarové resety znovu spustíboot.py, ale skočí rovnou do REPL — k opětovnému spuštěnímain.pymusíte desku zcela restartovat.
Umístěním boot.py nebo main.py na SD kartu přepíšete kopii ve flash paměti, aniž byste se jí dotkli — oba soubory se hledají v zaváděcím adresáři (/sdcard, když je karta připojena, jinak /flash).
Výchozí main.py dodávaný na čerstvě naflashované desce pouze bliká modrým kanálem uživatelské RGB LED jako kontrolka srdečního tepu (dva krátké pulzy, krátká pauza), takže poznáte, že firmware naběhl čistě i 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 uloženy v /flash/lib, /sdcard/lib nebo /rom/lib.
Chcete‑li systém přimět ignorovat vloženou SD kartu (například ke spuštění main.py z flash paměti i s přítomnou kartou), vytvořte v kořeni /flash prázdný soubor s názvem SKIPSD.
Při připojení přes USB se zaváděcí souborový systém (/sdcard, pokud je karta přítomna, jinak /flash) na hostiteli také hlásí jako USB velkokapacitní úložiště, což vám umožňuje přímo upravovat boot.py, main.py a jakékoli další soubory. Před restartem kamery jednotku vysuňte (eject), aby hostitel vyprázdnil svůj cache zápis.
Poznámka
Protože OS s jednotkou 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 jednotku znovu nepřipojí. Pokud OS i OpenMV Cam zapisují do stejného souborového systému zároveň, OS zvítězí a přepíše změny provedené kamerou. Pro veškerá data, která skript zapisuje zpět, použijte SD kartu a před čtením těchto souborů z hostitele kartu 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 indikátor aktivity řízený firmwarem, nikoli o závadu.
Velikosti úložišť¶
M7 se dodává s:
/flash— FAT souborový systém 96 KB, pro čtení/zápis./rom— ROMFS 256 KB pouze pro čtení, mapovaný do paměti./sdcard— plná velikost vložené microSD karty (pokud je přítomna), pro čtení/zápis.
Indikátor hard‑fault¶
Pokud uživatelská RGB LED rychle cykluje všemi barvami — dost rychle na to, aby spíše vypadala jako blikající bílá LED než jako jednotlivé odstíny — firmware narazil na neobnovitelnou kritickou chybu (hard fault). K obnově firmware přeflashujte; pokud přeflashování nepomůže, deska může být fyzicky poškozena.
Softwarové knihovny¶
Úplný seznam modulů — včetně toho, které jsou jedinečné pro sestavení M7 — najdete v indexu knihoven.