OpenMV Cam M4¶
OpenMV Cam M4 je kompaktní deska pro strojové vidění s jádrem Cortex‑M4, postavená kolem čipu STMicroelectronics STM32F427 běžícího na 180 MHz s 256 KB interní SRAM a 1 MB interní flash paměti. Dodávaný senzor OV7725 snímá snímky 320×240 ve stupních šedi nebo RGB565 a 9pinová uživatelská lišta zpřístupňuje periferie UART, I²C, SPI, CAN, ADC/DAC a PWM.
Poznámka
OV7725 byl standardní senzor na produkčních deskách M4. Velmi rané varianty M4 byly dodávány místo něj se senzorem OmniVision OV2640 — se stejnou QVGA náhledovou pipeline, ovšem OV2640 dokáže navíc snímat až UXGA (1600×1200) JPEG snímky. Oba senzory jsou ovládány přes stejné API csi — kamerové senzory.
Kompletní katalogový list, fotografie a rozměry najdete na produktové stránce OpenMV Cam M4.
Hlavní vlastnosti¶
STMicroelectronics STM32F427 Cortex‑M4 na 180 MHz.
256 KB interní SRAM — žádná externí SDRAM.
1 MB interní flash paměti (žádná externí QSPI flash).
Senzor OV7725 (nebo OV2640 u velmi raných variant M4) — 320×240 8bitové stupně šedi nebo RGB565; OV2640 dokáže navíc snímat až UXGA (1600×1200) JPEG.
Full‑speed USB (12 Mb/s) — vůči hostiteli se hlásí jako VCP + USB mass storage.
Slot na microSD — SD až do 2 GB, SDHC až do 32 GB, SDXC až do 2 TB.
9 I/O pinů, tolerantních k 5 V s 3,3 V výstupem, 25 mA na pin (celkem 120 mA přes celou lištu), schopných přerušení. P6 není tolerantní k 5 V při 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 vidění za nízkého světla.
Poznámka
M4 nemá žádný čip pro správu napájení: nemá konektor pro baterii, nabíječku baterie, ADC pro měření napětí baterie, žádné LED stavu nabíjení / napájení ani hardwarové tlačítko napájení. Napájejte desku z USB nebo z VIN.
Rozložení pinů¶
Přehled pinů¶
Název pinu |
Funkce |
|---|---|
P0 |
SPI2 MOSI |
P1 |
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 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
RESET |
stáhněte k GND pro reset desky |
BOOT0 |
stáhněte k 3,3 V při zapnutí pro DFU / ROM bootloader |
SWCLK |
ARM SWD hodiny (přístup debuggeru) |
SWDIO |
ARM SWD data (přístup debuggeru) |
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ě) |
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 vestavěný regulátor.
GND — společná zem.
Poznámka
Když je přítomno současně USB i VIN, desku napájí to, které má vyšší napětí — vestavěné diody jednoduše vyberou silnější větev.
Varování
M4 můžete napájet přivedením 3,3 V přímo na pin 3.3V, pokud nechcete procházet přes vestavěný regulátor. V takovém případě nepřivádějte zároveň napájení z VIN nebo USB — zpětné napájení regulátoru při aktivním jiném zdroji může kameru trvale poškodit a zničit.
Tip
Pomocí odhadovače výdrže baterie můžete modelovat, jak dlouho M4 vydrží na baterii při daném pracovním cyklu aktivního / hlubokého spánku.
Piny pro obnovu a ladění¶
RESET — stáhněte k GND pro reset desky. Jeho uvolnění nechá MCU normálně nastartovat.
BOOT0 — stáhněte k 3,3 V při napájení desky pro vstup do STM32 ROM bootloaderu (režim DFU). OpenMV IDE tento režim používá k přeflashování vestavěného bootloaderu.
SWCLK a SWDIO jsou vyvedeny jako běžné piny lišty (nikoli jako vyhrazený SWD konektor). Pro ladění desky propojte RESET, SWCLK, SWDIO, GND a 3,3 V s adaptérem ST‑LINK nebo SEGGER J‑Link.
Vestavěné periferie¶
LED diody¶
M4 má jedinou uživatelskou RGB LED plus pár výkonných 850 nm IR LED:
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 zachází se všemi ostatními vestavěnými LED jako s aktivními v nule, 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¶
Dodávaný senzor (OV7725 na standardních deskách, OV2640 na velmi raných variantách) 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()
Senzor je na M4 připájen k desce — nenachází se na vyměnitelném modulu.
Poznámka
Na deskách s OV7725 je pin FSIN (frame‑sync) senzoru zapojen k MCU, ale jeho podpora ve firmwaru nebyla přidána.
Na deskách s OV2640 jsou piny STROBE, FREX (frame exposure) a EXPST (exposure reset) senzoru zapojeny k MCU, ale jejich podpora ve firmwaru nebyla přidána.
Lišty pro serva¶
Zadní strana desky má dvě pájecí plošky pro konektory serva, které vyvádějí standardní 3pinovou lištu serva (signál / VIN / GND) pro P7 a P8. Signálové piny vedou přímo na kanály 1 a 2 TIM4 (stejné kanály, jaké používá pyb.Servo) a pin V+ na každé liště je zapojen přímo na VIN, takže serva odebírají proud ze vstupní větve, nikoli z 3,3 V regulátoru.
Připájejte do plošek pár pravoúhlých 3pinových lišt a připojte dvě modelářská serva pro pohon pan‑and‑tilt držáku:
from pyb import Servo
pan = Servo(1) # P7 — TIM4 CH1
tilt = Servo(2) # P8 — TIM4 CH2
pan.angle(0)
tilt.angle(0)
microSD karta¶
Když je karta vložena, je automaticky připojena 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ě tolerantní k 5 V a dokážou pojmout/dodat 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 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 |
|---|---|---|
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 |
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ý 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. 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 |
Poznámka
TIM1 je firmwarem rezervován 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 narušila funkce kamery.
TIM4 je sdílen s pyb.Servo — instanciování serva překonfiguruje celý časovač na provoz 50 Hz, takže v jednom skriptu nekombinujte machine.PWM na P7/P8 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 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
Připojte modul k I²C sběrnici desky a načítejte 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 — připojte modul k P4 (SCL) a P5 (SDA).
Časování¶
time¶
Modul time pokrývá blokující zpoždění, 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 spotřeboval slot hardwarového časovače. Předejte jako id hodnotu -1 pro použití virtuálního (softwarového) časovače:
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. Pro zastavení a uvolnění slotu zavolejte deinit().
Hodiny reálného času¶
machine.RTC udržuje reálný č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 obsluhujte 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ěhovém prostředí¶
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 vstoupit do režimu DFU. Po vypršení okna předá bootloader řízení souboru boot.py a poté main.py.
Běžící skript může na vyžádání znovu vstoupit do bootloaderu zavoláním machine.bootloader()
import machine
machine.bootloader()
Souborový systém a pořadí bootu¶
Firmware M4 při bootu připojuje 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 bootu.microSD karta — pokud je karta vložena, je připojena na
/sdcard.ROMFS — souborový systém určený pouze pro čtení, mapovaný do paměti na
/rom, používaný k dodávání velkých datových souborů (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 Python kódu.
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.pyse spustí při každém softovém resetu (studeném bootu,Ctrl‑Dz REPL nebo kdykoli běžící skript skončí).main.pyse spustí pouze při studeném bootu, ihned poboot.py. Následné softové resety znovu spustíboot.py, ale skočí rovnou do REPL — abyste znovu spustilimain.py, musíte desku plně resetovat.
Umístění boot.py nebo main.py na SD kartu přepíše kopii ve flash paměti, aniž by se jí dotklo — oba soubory jsou vyhledávány v boot adresáři (/sdcard, je‑li 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 tepem (dva krátké pulzy, krátká pauza), takže poznáte, že firmware nastartoval čistě, 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 i při přítomné kartě), 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 zároveň 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 odpojte, aby hostitel vyprázdnil svůj cache zápisů.
Poznámka
Protože OS 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 současně, 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 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 mass‑storage disku nebo na něj zapisuje — jde o firmwarem řízený indikátor aktivity, nikoli o závadu.
Velikosti úložišť¶
M4 se dodává s:
/flash— FAT souborový systém 32 KB, pro čtení i zápis./rom— ROMFS 128 KB mapovaný do paměti pouze pro čtení./sdcard— plná velikost jakékoli vložené microSD karty (je‑li přítomna), pro čtení i zápis.
Indikátor tvrdé chyby (hard fault)¶
Pokud uživatelská RGB LED rychle cykluje všemi barvami — tak rychle, že to spíše vypadá jako třpytivá bílá LED než jako jednotlivé odstíny — firmware narazil na neopravitelnou tvrdou chybu (hard fault). Pro obnovu firmware přeflashujte; pokud přeflashování nepomůže, deska může být fyzicky poškozena.
Softwarové knihovny¶
Kompletní seznam modulů — včetně toho, které z nich jsou jedinečné pro build M4 — najdete v indexu knihoven.