OpenMV Cam M7¶
OpenMV Cam M7 je Cortex‑M7 ploča za strojni vid izgrađena oko STMicroelectronics STM32F765 na 216 MHz s 512 KB interne SRAM memorije i 2 MB interne flash memorije. Priloženi OV7725 senzor snima sličice 640×480 u sivim tonovima ili 320×240 RGB565 pri brzini do 150 FPS, a 10‑pinski korisnički header izlaže UART, I²C, SPI, CAN, ADC/DAC i PWM periferije.
Za potpunu specifikaciju, fotografije i dimenzije pogledajte stranicu proizvoda OpenMV Cam M7.
Istaknute značajke¶
STMicroelectronics STM32F765 Cortex‑M7 na 216 MHz.
512 KB interne SRAM memorije — bez vanjske SDRAM memorije.
2 MB interne flash memorije (bez vanjske QSPI flash memorije).
OV7725 senzor — 640×480 u sivim tonovima ili 320×240 RGB565 pri brzini do 150 FPS.
Full‑speed USB (12 Mb/s) — domaćinu se prikazuje kao VCP + USB masovna pohrana.
microSD utor — SD do 2 GB, SDHC do 32 GB, SDXC do 2 TB.
10 I/O pinova, podnose 5 V s izlazom od 3,3 V, 25 mA po pinu (ukupno 120 mA na cijelom headeru), sposobni za prekide. P6 ne podnosi 5 V kada se koristi u ADC ili DAC načinu rada.
Korisnička RGB LED i dvije IR LED snage 850 nm za aktivno osvjetljenje pri vidu u uvjetima slabog osvjetljenja.
Napomena
M7 nema čip za upravljanje napajanjem na ploči: nema priključka za bateriju, punjača baterije, ADC‑a za napon baterije, LED‑ica za status punjenja / napajanja niti hardverskog gumba za napajanje. Ploču napajajte preko USB‑a ili VIN‑a.
Raspored pinova¶
Referenca pinova¶
Naziv pina |
Funkcija |
|---|---|
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 |
spojite na GND za resetiranje ploče |
SYN |
pločica za sinkronizaciju sličica — spojena samo na senzor kamere |
BOOT0 |
spojite na 3,3 V pri uključivanju za DFU / ROM pokretač (bootloader) |
LED_RED |
crveni kanal RGB LED‑ice (aktivan na nisko) |
LED_GREEN |
zeleni kanal RGB LED‑ice (aktivan na nisko) |
LED_BLUE |
plavi kanal RGB LED‑ice (aktivan na nisko) |
LED_IR |
IR LED‑ice visoke snage (oba kanala upravljana zajedno) |
Napomena
Pločica SYN na headeru spojena je izravno na okidačku / ekspozicijsku liniju senzora kamere — na M7 ne vodi do MCU‑a. Upravljajte njome ili je čitajte izvana; ne možete je preklapati iz MicroPythona.
Pinovi napajanja¶
3.3V — regulirani napon od 3,3 V. Do 250 mA dostupno za štitove (manje ako se koristi microSD kartica). Za razliku od novijih kamera ovaj pin je dvosmjeran — pogledajte upozorenje u nastavku.
VIN — ulaz od 3,6 – 5 V. Napaja ploču preko regulatora na ploči.
GND — zajedničko uzemljenje.
Napomena
Kada su prisutni i USB i VIN, ploču napaja onaj s višim naponom — diode na ploči jednostavno odabiru jači izvor.
Upozorenje
M7 smijete napajati dovođenjem 3,3 V izravno na pin 3.3V ako ne želite prolaziti kroz regulator na ploči. U tom slučaju nemojte istovremeno primjenjivati i VIN ili USB napajanje — povratno napajanje regulatora dok je drugi izvor aktivan može trajno oštetiti i uništiti kameru.
Savjet
Koristite procjenitelj trajanja baterije za modeliranje koliko će dugo M7 raditi na bateriji za zadani omjer aktivnog rada i dubokog mirovanja.
Pinovi za oporavak i otklanjanje pogrešaka¶
RESET — spojite na GND za resetiranje ploče. Otpuštanjem se MCU normalno pokreće.
BOOT0 — spojite na 3,3 V dok napajate ploču za ulazak u STM32 ROM pokretač (bootloader) (DFU način rada). OpenMV IDE koristi ovaj način za ponovno upisivanje pokretača (bootloader) na ploči.
Ploča izlaže SWD debug header (RST / SWCLK / SWDIO) uz GPIO header, kompatibilan s ST‑LINK i SEGGER J‑Link adapterima.
Periferije na ploči¶
LED‑ice¶
M7 ima jednu korisničku RGB LED‑icu te par IR LED‑ica visoke snage od 850 nm:
Korisnička RGB LED — softverski upravljiva, izložena kao
LED_RED,LED_GREENiLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
IR LED‑ice — obje LED‑ice upravljaju se zajedno preko pina
LED_IR.LED_IRje u hardveru spojen aktivno na visoko, dok ugrađeni program (firmware) sve ostale LED‑ice na ploči tretira kao aktivne na nisko, pa koristitelow()/high()umjestoon()/off()(koje bi invertirale logiku):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Senzor kamere¶
OV7725 se upravlja kroz modul csi — senzori kamere
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 zalemljen na ploču — nije na zamjenjivom modulu.
microSD kartica¶
Kada je kartica umetnuta, automatski se montira na /sdcard i upotrebljiva je kroz uobičajeni datotečni sustav:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Referenca sabirnica¶
GPIO¶
Koristite machine.Pin za čitanje ili upravljanje bilo kojim od pinova označenih na sitotisku. Izlazi su 3,3 V CMOS, podnose 5 V na ulaznoj strani i mogu primiti/dati do 25 mA po pinu (ukupno 120 mA na cijelom headeru).
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())
Bilo koji ulazni pin može također pokrenuti prekid pri prijelazima na rubu:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Sabirnica |
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¶
Sabirnica |
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")
Isti hardver može se koristiti i u ciljnom (slave) načinu rada kroz machine.I2CTarget kako bi se memorijsko područje izložilo drugom I²C upravljaču:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Sabirnica |
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¶
Sabirnica |
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 i DAC¶
P6 je jedini korisnički analogni pin. Može se koristiti ili kao 12‑bitni ADC ulaz ili kao DAC izlaz.
ADC — puni opseg pri 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 — kroz
pyb.DAC. 8‑bitna vrijednost pokriva 0–3,3 V:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
U ADC ili DAC načinu rada P6 podnosi samo 3,3 V — nemojte mu dovoditi 5 V.
PWM¶
Pin |
Mjerač vremena / kanal |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM4 CH3 |
Napomena
TIM1 je rezerviran ugrađenim programom (firmware) za generiranje pikselskog takta senzora kamere, pa se TIM1 kanali koji su fizički na P0/P1/P2 ne mogu koristiti za korisnički PWM bez narušavanja rada kamere.
TIM4 se dijeli s pyb.Servo — instanciranje serva ponovno konfigurira cijeli mjerač vremena za rad na 50 Hz, pa nemojte miješati machine.PWM na P7/P8/P9 s pyb.Servo u istoj skripti.
Upravljajte bilo kojim od njih preko machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Softverski bit‑bang sabirnice¶
machine.SoftI2C i machine.SoftSPI rade na bilo kojem GPIO‑u ako trebate dodatnu sabirnicu.
Termalni senzor (izvan ploče)¶
Ugrađeni program (firmware) uključuje upravljački program fir — upravljački program termalnog senzora (fir == daleko infracrveno) za izvanjski ožičene termalne kamere:
MLX90621 — IR matrica 16 × 4
MLX90640 — IR matrica 32 × 24
MLX90641 — IR matrica 16 × 12
AMG8833 — IR matrica 8 × 8
Spojite modul na I²C sabirnicu ploče i čitajte sličice pomoću 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())
Upravljački program fir komunicira sa senzorom samo preko I²C 2 — spojite modul na P4 (SCL) i P5 (SDA).
Mjerenje vremena¶
time¶
Modul time pokriva blokirajuća kašnjenja, monotone otkucaje i mjerenje proteklog vremena:
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)
Virtualni mjerači vremena¶
machine.Timer raspoređuje periodičke ili jednokratne povratne pozive bez zauzimanja hardverskog utora mjerača vremena. Proslijedite -1 kao id za korištenje virtualnog (softverskog) mjerača vremena:
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"))
Vrijednosti perioda izražene su u milisekundama. Pozovite deinit() za zaustavljanje i oslobađanje utora.
Sat stvarnog vremena¶
machine.RTC čuva stvarno vrijeme tijekom resetiranja:
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 resetira ploču ako se aplikacija zaglavi. Jednom kada se pokrene, ne može se zaustaviti niti ponovno konfigurirati — hranite ga periodički unutar svoje glavne petlje:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Informacije o pokretanju i izvođenju¶
Vremenski prozor USB pokretača (bootloader)¶
Pri svakom uključivanju kamera pokreće kratki pokretač (bootloader) (nekoliko sekundi) koji omogućuje OpenMV IDE‑u ažuriranje ugrađenog programa (firmware) bez potrebe da korisnik ulazi u DFU način rada. Nakon isteka prozora pokretač (bootloader) predaje kontrolu datoteci boot.py pa zatim main.py.
Skripta koja se izvodi može na zahtjev ponovno ući u pokretač (bootloader) pozivanjem machine.bootloader()
import machine
machine.bootloader()
Datotečni sustav i redoslijed pokretanja¶
Ugrađeni program (firmware) M7 montira do tri datotečna sustava pri pokretanju:
Interna flash memorija — uvijek montirana na
/flash. Po zadanom sadržimain.pyiREADME.txt; stvara se pri prvom pokretanju.microSD kartica — ako je kartica umetnuta, montira se na
/sdcard.ROMFS — samo za čitanje, memorijski mapirani datotečni sustav na
/romkoji se koristi za isporuku velikih podatkovnih sadržaja (npr. AI modela) koji imaju koristi od pristupa bez kopiranja. MicroPython ga montira automatski pri pokretanju, prije nego što se pokrene bilo koji korisnički Python.
Nakon montiranja, radni direktorij postavlja se na /sdcard kada je kartica prisutna, inače na /flash. Interpreter zatim izvodi skripte iz tog direktorija:
boot.pyse izvodi pri svakom mekom resetiranju (hladno pokretanje,Ctrl‑Diz REPL‑a ili kad god se skripta koja se izvodi vrati).main.pyse izvodi samo pri hladnom pokretanju, odmah nakonboot.py. Naknadna meka resetiranja ponovno izvodeboot.py, ali prelaze izravno na REPL — za ponovno izvođenjemain.pymorate u potpunosti resetirati ploču.
Stavljanje datoteke boot.py ili main.py na SD karticu nadjačava kopiju u flash memoriji ne dirajući je — obje datoteke traže se u direktoriju pokretanja (/sdcard kada je kartica montirana, inače /flash).
Zadani main.py koji se isporučuje na svježe upisanoj ploči samo treperi plavim kanalom korisničke RGB LED‑ice kao otkucaj srca (dva kratka impulsa, kratka stanka), pa možete utvrditi da se ugrađeni program (firmware) uredno pokrenuo bez ijednog priključenog domaćina.
sys.path se proširuje tako da uključuje sva tri datotečna sustava i njihove poddirektorije lib/, pa moduli koji se mogu uvesti mogu se nalaziti u /flash/lib, /sdcard/lib ili /rom/lib.
Za prisiljavanje sustava da zanemari umetnutu SD karticu (na primjer za pokretanje main.py iz flash memorije čak i kada je kartica prisutna), stvorite praznu datoteku naziva SKIPSD u korijenu /flash.
Kada je povezan preko USB‑a, datotečni sustav za pokretanje (/sdcard ako je kartica prisutna, inače /flash) na domaćinu se također prikazuje kao USB pogon za masovnu pohranu, što vam omogućuje izravno uređivanje boot.py, main.py i bilo kojih drugih datoteka. Izbacite pogon prije resetiranja kamere kako bi domaćin spremio svoje međuspremljene zapise.
Napomena
Budući da OS pogon tretira kao pasivni blok uređaj, datoteke koje stvori ili izmijeni kod koji se izvodi na OpenMV Camu neće se pojaviti dok ih domaćin ponovno ne montira. Ako i OS i OpenMV Cam istovremeno pišu na isti datotečni sustav, OS će pobijediti i prebrisati promjene koje je napravila kamera. Koristite SD karticu za sve podatke koje skripta zapisuje natrag i ponovno montirajte prije čitanja tih datoteka s domaćina.
Napomena
Crveni kanal korisničke RGB LED‑ice može se nakratko upaliti dok domaćin čita s USB pogona za masovnu pohranu ili na njega piše — to je pokazatelj aktivnosti kojim upravlja ugrađeni program (firmware), a ne kvar.
Veličine pohrane¶
M7 se isporučuje s:
/flash— 96 KB FAT datotečni sustav, za čitanje/pisanje./rom— 256 KB memorijski mapirani ROMFS samo za čitanje./sdcard— puna veličina bilo koje umetnute microSD kartice (kada je prisutna), za čitanje/pisanje.
Pokazatelj teškog kvara (hard fault)¶
Ako korisnička RGB LED‑ica brzo izmjenjuje sve boje — dovoljno brzo da izgleda kao treperava bijela LED‑ica umjesto zasebnih nijansi — ugrađeni program (firmware) naišao je na nepopravljiv teški kvar (hard fault). Ponovno upišite ugrađeni program (firmware) za oporavak; ako ponovno upisivanje ne pomogne, ploča je možda fizički oštećena.
Softverske biblioteke¶
Pogledajte indeks biblioteke za potpuni popis modula — uključujući one koji su jedinstveni za M7 verziju.