OpenMV Cam M7¶
OpenMV Cam M7 on Cortex‑M7‑pohjainen konenäkökortti, joka rakentuu STMicroelectronicsin STM32F765‑piirin ympärille 216 MHz:n kellotaajuudella, 512 KB:n sisäisellä SRAM‑muistilla ja 2 MB:n sisäisellä flash‑muistilla. Mukana toimitettava OV7725‑sensori kaappaa 640×480 harmaasävy‑ tai 320×240 RGB565‑kehyksiä jopa 150 FPS:n nopeudella, ja 10‑nastainen käyttäjäliitin tarjoaa UART‑, I²C‑, SPI‑, CAN‑, ADC/DAC‑ ja PWM‑oheislaitteet.
Täydellinen datalehti, valokuvat ja mitat löytyvät OpenMV Cam M7 ‑tuotesivulta.
Kohokohdat¶
STMicroelectronics STM32F765 Cortex‑M7 216 MHz:llä.
512 KB sisäistä SRAM‑muistia — ei ulkoista SDRAM‑muistia.
2 MB sisäistä flash‑muistia (ei ulkoista QSPI‑flash‑muistia).
OV7725‑sensori — 640×480 harmaasävy tai 320×240 RGB565 jopa 150 FPS:n nopeudella.
Full‑speed USB (12 Mb/s) — näkyy isäntäkoneelle VCP:nä + USB‑massamuistina.
microSD‑liitin — SD jopa 2 GB, SDHC jopa 32 GB, SDXC jopa 2 TB.
10 I/O‑nastaa, 5 V:n sietokyky 3,3 V:n lähdöllä, 25 mA per nasta (yhteensä 120 mA koko liittimen yli), keskeytyskykyiset. P6 ei siedä 5 V:ta ADC‑ tai DAC‑tilassa käytettäessä.
Käyttäjän RGB‑LED ja kaksi tehokasta 850 nm:n IR‑LEDiä aktiiviseen valaistukseen heikossa valossa.
Muista
M7:ssä ei ole emolevyn virranhallintapiiriä: siinä ei ole akkuliitintä, akkulaturia, akkujännitteen ADC:ta, lataus‑/virtatila‑LEDejä eikä laitteistopohjaista virtapainiketta. Syötä kortille virta USB:n tai VIN:n kautta.
Nastajärjestys¶
Nastaviite¶
Nastan nimi |
Toiminto |
|---|---|
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 |
kytke GND:hen kortin nollaamiseksi |
SYN |
kehyssynkronointinasta — johdotettu vain kamerasensoriin |
BOOT0 |
kytke 3,3 V:iin virrankytkennän yhteydessä DFU‑/ROM‑käynnistyslataimen käyttöä varten |
LED_RED |
RGB‑LEDin punainen kanava (aktiivinen matalalla) |
LED_GREEN |
RGB‑LEDin vihreä kanava (aktiivinen matalalla) |
LED_BLUE |
RGB‑LEDin sininen kanava (aktiivinen matalalla) |
LED_IR |
tehokkaat IR‑LEDit (molemmat kanavat ohjataan yhdessä) |
Muista
Liittimen SYN‑nasta on kytketty suoraan kamerasensorin liipaisin‑/valotuslinjaan — se ei reititä MCU:lle M7:ssä. Ohjaa tai lue sitä ulkoisesti; et voi vaihtaa sen tilaa MicroPythonista.
Virtanastat¶
3.3V — säädelty 3,3 V:n kisko. Suojuksille käytettävissä jopa 250 mA (vähemmän, jos microSD‑kortti on käytössä). Toisin kuin uudemmissa kameroissa, tämä nasta on kaksisuuntainen — katso varoitus alla.
VIN — 3,6–5 V:n tulo. Syöttää kortille virtaa emolevyn säätimen kautta.
GND — yhteinen maa.
Muista
Kun sekä USB että VIN ovat läsnä, kortille syöttää virtaa se, jolla on korkeampi jännite — emolevyn diodit valitsevat yksinkertaisesti vahvemman kiskon.
Varoitus
Voit halutessasi syöttää M7:lle virtaa antamalla 3,3 V suoraan 3.3V‑nastaan, jos et halua kulkea emolevyn säätimen kautta. Siinä tapauksessa älä syötä samanaikaisesti myös VIN‑ tai USB‑virtaa — säätimen takaisinajaminen toisen virtalähteen ollessa aktiivinen voi vahingoittaa kameraa pysyvästi ja tuhota sen.
Vihje
Käytä akun keston arviointityökalua mallintaaksesi, kuinka kauan M7 toimii akulla tietyllä aktiivisen / syväunitilan käyttösuhteella.
Palautus‑ ja virheenkorjausnastat¶
RESET — kytke GND:hen kortin nollaamiseksi. Sen vapauttaminen antaa MCU:n käynnistyä normaalisti.
BOOT0 — kytke 3,3 V:iin kortille virtaa syötettäessä siirtyäksesi STM32 ROM‑käynnistyslataimeen (DFU‑tila). OpenMV IDE käyttää tätä tilaa emolevyn käynnistyslataimen uudelleenflashaukseen.
Kortti tarjoaa SWD‑virheenkorjausliittimen (RST / SWCLK / SWDIO) GPIO‑liittimen vieressä, yhteensopiva ST‑LINK‑ ja SEGGER J‑Link ‑sovittimien kanssa.
Emolevyn oheislaitteet¶
LEDit¶
M7:ssä on yksi käyttäjän RGB‑LED sekä pari tehokasta 850 nm:n IR‑LEDiä:
Käyttäjän RGB‑LED — ohjelmistolla ohjattava, tarjolla nimillä
LED_RED,LED_GREENjaLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
IR‑LEDit — molemmat LEDit ohjataan yhdessä
LED_IR‑nastan kautta.LED_IRon johdotettu laitteistossa aktiivinen korkealla, kun taas laiteohjelmisto käsittelee jokaista muuta emolevyn LEDiä aktiivisena matalalla, joten käytälow()/high()‑metodeja eikäon()/off()‑metodeja (jotka kääntäisivät logiikan):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Kamerasensori¶
OV7725:tä ohjataan csi — kennot ‑moduulin kautta:
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()
Sensori on juotettu kortille M7:ssä — se ei ole vaihdettavassa moduulissa.
microSD‑kortti¶
Kun kortti on asetettu, se liitetään automaattisesti polkuun /sdcard ja on käytettävissä tavallisen tiedostojärjestelmän kautta:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Väyläviite¶
GPIO¶
Käytä machine.Pin ‑luokkaa minkä tahansa silkkipainetun nastan lukemiseen tai ohjaamiseen. Lähdöt ovat 3,3 V CMOS, 5 V:ta sietäviä tulopuolella ja voivat nieluttaa/syöttää jopa 25 mA per nasta (yhteensä 120 mA koko liittimen yli).
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())
Mikä tahansa tulonasta voi myös laukaista keskeytyksen reunasiirtymissä:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Väylä |
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¶
Väylä |
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")
Samaa laitteistoa voi käyttää myös kohde‑ (orja) tilassa machine.I2CTarget ‑luokan kautta paljastaakseen muistialueen toiselle I²C‑ohjaimelle:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Väylä |
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¶
Väylä |
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 ja DAC¶
P6 on ainoa käyttäjän analoginen nasta. Sitä voi käyttää joko 12‑bittisenä ADC‑tulona tai DAC‑lähtönä.
ADC — täysi asteikko 3,3 V:ssä nastalla:
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 —
pyb.DAC‑luokan kautta. 8‑bittinen arvo kattaa 0–3,3 V:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
ADC‑ tai DAC‑tilassa P6 sietää vain 3,3 V:ta — älä syötä siihen 5 V:ta.
PWM¶
Nasta |
Ajastin / kanava |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM4 CH3 |
Muista
TIM1 on laiteohjelmiston varaama kamerasensorin pikselikellon tuottamiseen, joten P0/P1/P2‑nastoilla fyysisesti olevia TIM1‑kanavia ei voi käyttää käyttäjän PWM:ään rikkomatta kameraa.
TIM4 on jaettu pyb.Servo ‑luokan kanssa — servon luominen konfiguroi koko ajastimen uudelleen 50 Hz:n toimintaan, joten älä sekoita machine.PWM ‑käyttöä P7/P8/P9‑nastoilla ja pyb.Servo ‑luokkaa samassa skriptissä.
Ohjaa mitä tahansa niistä machine.PWM ‑luokan kautta:
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Ohjelmistolla bittikolkutellut väylät¶
machine.SoftI2C ja machine.SoftSPI toimivat millä tahansa GPIO:lla, jos tarvitset ylimääräisen väylän.
Lämpösensori (kortin ulkopuolinen)¶
Laiteohjelmisto sisältää fir — lämpösensorin ajuri (fir == far infrared) ‑ajurin ulkoisesti johdotetuille lämpökuvantajille:
MLX90621 — 16 × 4 IR‑matriisi
MLX90640 — 32 × 24 IR‑matriisi
MLX90641 — 16 × 12 IR‑matriisi
AMG8833 — 8 × 8 IR‑matriisi
Johdota moduuli kortin I²C‑väylään ja lue kehyksiä komennoilla 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())
fir‑ajuri kommunikoi sensorin kanssa vain I²C 2 ‑väylän kautta — johdota moduuli nastoihin P4 (SCL) ja P5 (SDA).
Ajoitus¶
time¶
time ‑moduuli kattaa estävät viiveet, monotoniset tikitykset ja kuluneen ajan mittauksen:
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)
Virtuaaliajastimet¶
machine.Timer ajastaa jaksottaisia tai kertaluonteisia takaisinkutsuja kuluttamatta laitteistoajastimen paikkaa. Anna -1 id:nä käyttääksesi virtuaalista (ohjelmisto) ajastinta:
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"))
Jaksoarvot ovat millisekunteina. Kutsu deinit() pysäyttääksesi ja vapauttaaksesi paikan.
Reaaliaikakello¶
machine.RTC säilyttää seinäkellon ajan nollausten yli:
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())
Vahtikoira¶
machine.WDT nollaa kortin, jos sovellus jumiutuu. Kun se on käynnistetty, sitä ei voi pysäyttää tai konfiguroida uudelleen — syötä sitä säännöllisesti pääsilmukkasi sisällä:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Käynnistys‑ ja ajonaikatiedot¶
USB‑käynnistyslataimen ikkuna¶
Jokaisen virrankytkennän yhteydessä kamera suorittaa lyhyen käynnistyslataimen (muutaman sekunnin), jonka avulla OpenMV IDE voi päivittää laiteohjelmiston ilman, että käyttäjän tarvitsee siirtyä DFU‑tilaan. Ikkunan umpeuduttua käynnistyslatain luovuttaa ohjauksen boot.py:lle ja sen jälkeen main.py:lle.
Käynnissä oleva skripti voi siirtyä takaisin käynnistyslataimeen pyynnöstä kutsumalla machine.bootloader()
import machine
machine.bootloader()
Tiedostojärjestelmä ja käynnistysjärjestys¶
M7:n laiteohjelmisto liittää käynnistyksessä jopa kolme tiedostojärjestelmää:
Sisäinen flash‑muisti — aina liitettynä polkuun
/flash. Sisältää oletuksenamain.py‑ jaREADME.txt‑tiedostot; luodaan aivan ensimmäisellä käynnistyksellä.microSD‑kortti — jos kortti on asetettu, se liitetään polkuun
/sdcard.ROMFS — vain luku ‑muistiin kartoitettu tiedostojärjestelmä polussa
/rom, jota käytetään suurten data‑aineistojen (esim. tekoälymallien) toimittamiseen, jotka hyötyvät nollakopiointikäytöstä. MicroPython liittää sen automaattisesti käynnistyksessä, ennen kuin yhtään käyttäjän Python‑koodia ajetaan.
Liittämisen jälkeen työhakemistoksi asetetaan /sdcard, kun kortti on läsnä, muuten /flash. Tulkki suorittaa sen jälkeen skriptejä kyseisestä hakemistosta:
boot.pysuoritetaan jokaisen pehmeän nollauksen yhteydessä (kylmäkäynnistys,Ctrl‑DREPL:stä tai aina kun käynnissä oleva skripti palaa).main.pysuoritetaan vain kylmäkäynnistyksessä, hetiboot.py:n jälkeen. Seuraavat pehmeät nollaukset ajavatboot.py:n uudelleen mutta siirtyvät suoraan REPL:iin — ajaaksesimain.py:n uudelleen sinun on nollattava kortti kokonaan.
boot.py‑ tai main.py‑tiedoston pudottaminen SD‑kortille ohittaa flash‑muistissa olevan kopion koskematta siihen — molemmat tiedostot haetaan käynnistyshakemistosta (/sdcard, kun kortti on liitetty, muuten /flash).
Tuoreelle flashatulle kortille toimitettava oletus‑main.py vain vilkuttaa käyttäjän RGB‑LEDin sinistä kanavaa sydämenlyöntinä (kaksi lyhyttä pulssia, lyhyt tauko), joten voit todeta laiteohjelmiston käynnistyneen puhtaasti ilman isäntäkoneen liittämistä.
sys.path laajennetaan kattamaan kaikki kolme tiedostojärjestelmää ja niiden lib/ ‑alihakemistot, joten tuotavat moduulit voivat sijaita poluissa /flash/lib, /sdcard/lib tai /rom/lib.
Pakottaaksesi järjestelmän jättämään asetetun SD‑kortin huomiotta (esimerkiksi ajaaksesi flash‑muistin main.py:n vaikka kortti on läsnä), luo tyhjä tiedosto nimeltä SKIPSD /flash‑muistin juureen.
Kun kamera on yhdistetty USB:n kautta, käynnistystiedostojärjestelmä (/sdcard, jos kortti on läsnä, muuten /flash) luetteloidaan myös USB‑massamuistiasemana isäntäkoneella, jolloin voit muokata boot.py‑, main.py‑ ja muita tiedostoja suoraan. Poista asema turvallisesti ennen kameran nollausta, jotta isäntäkone tyhjentää välimuistissa olevat kirjoitukset.
Muista
Koska käyttöjärjestelmä käsittelee asemaa passiivisena lohkolaitteena, OpenMV Camilla ajettavan koodin luomat tai muokkaamat tiedostot eivät näy, ennen kuin isäntäkone liittää aseman uudelleen. Jos sekä käyttöjärjestelmä että OpenMV Cam kirjoittavat samaan tiedostojärjestelmään samanaikaisesti, käyttöjärjestelmä voittaa ja ylikirjoittaa kameran tekemät muutokset. Käytä SD‑korttia kaikkeen dataan, jota skripti kirjoittaa takaisin, ja liitä uudelleen ennen kuin luet kyseisiä tiedostoja isäntäkoneelta.
Muista
Käyttäjän RGB‑LEDin punainen kanava saattaa syttyä hetkellisesti, kun isäntäkone lukee USB‑massamuistiasemalta tai kirjoittaa sille — tämä on laiteohjelmiston ohjaama toiminnan ilmaisin, ei vika.
Tallennustilan koot¶
M7 toimitetaan seuraavasti:
/flash— 96 KB FAT‑tiedostojärjestelmä, luku/kirjoitus./rom— 256 KB vain luku ‑muistiin kartoitettu ROMFS./sdcard— minkä tahansa asetetun microSD‑kortin täysi koko (kun läsnä), luku/kirjoitus.
Hard fault ‑ilmaisin¶
Jos käyttäjän RGB‑LED kiertää nopeasti läpi kaikki värit — niin nopeasti, että se yleensä näyttää tuikkivalta valkoiselta LEDiltä erillisten värisävyjen sijaan — laiteohjelmisto on kohdannut korjaamattoman hard fault ‑virheen. Flashaa laiteohjelmisto uudelleen palautuaksesi; jos uudelleenflashauksesta ei ole apua, kortti voi olla fyysisesti vaurioitunut.
Ohjelmistokirjastot¶
Katso kirjastoindeksistä täydellinen luettelo moduuleista — mukaan lukien ne, jotka ovat ainutlaatuisia M7‑käännökselle.