OpenMV Cam M7¶
OpenMV Cam M7, 216 MHz hızında çalışan, 512 KB dahili SRAM ve 2 MB dahili flash belleğe sahip STMicroelectronics STM32F765 çevresinde kurulu bir Cortex‑M7 makine görüşü kartıdır. Birlikte gelen OV7725 sensörü, 640×480 gri tonlamalı veya 320×240 RGB565 çerçeveleri en fazla 150 FPS hızında yakalar ve 10 pinli kullanıcı başlığı UART, I²C, SPI, CAN, ADC/DAC ve PWM çevre birimlerini sunar.
Tam veri sayfası, fotoğraflar ve boyutlar için OpenMV Cam M7 ürün sayfasına bakın.
Öne çıkanlar¶
216 MHz hızında STMicroelectronics STM32F765 Cortex‑M7.
512 KB dahili SRAM — harici SDRAM yok.
2 MB dahili flash bellek (harici QSPI flash bellek yok).
OV7725 sensörü — en fazla 150 FPS hızında 640×480 gri tonlamalı veya 320×240 RGB565.
Full‑speed USB (12 Mb/s) — ana bilgisayara VCP + USB yığın depolama olarak görünür.
microSD soketi — SD 2 GB’a, SDHC 32 GB’a, SDXC 2 TB’a kadar.
10 G/Ç pini, 3.3 V çıkışla 5 V toleranslı, pin başına 25 mA (başlık genelinde toplam 120 mA), kesme yeteneğine sahip. P6, ADC veya DAC modunda kullanıldığında 5 V toleranslı değildir.
Düşük ışıklı görüşte aktif aydınlatma için kullanıcı RGB LED’i ve iki yüksek güçlü 850 nm IR LED’i.
Not
M7’de yerleşik güç yönetim çipi yoktur: pil konnektörü, pil şarj cihazı, pil voltajı ADC’si, şarj / güç durumu LED’leri ve donanımsal güç düğmesi yoktur. Kartı USB veya VIN üzerinden besleyin.
Pin dağılımı¶
Pin referansı¶
Pin adı |
İşlev |
|---|---|
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 |
kartı sıfırlamak için GND’ye çekin |
SYN |
çerçeve senkronizasyon pedi — yalnızca kamera sensörüne bağlıdır |
BOOT0 |
DFU / ROM önyükleyici için güç açılışında 3.3 V’a çekin |
LED_RED |
RGB LED kırmızı kanalı (aktif düşük) |
LED_GREEN |
RGB LED yeşil kanalı (aktif düşük) |
LED_BLUE |
RGB LED mavi kanalı (aktif düşük) |
LED_IR |
yüksek güçlü IR LED’leri (her iki kanal birlikte sürülür) |
Not
Başlıktaki SYN pedi doğrudan kamera sensörünün tetik / pozlama hattına bağlıdır — M7’de MCU’ya yönlendirilmez. Onu harici olarak sürün veya okuyun; MicroPython’dan değiştiremezsiniz.
Güç pinleri¶
3.3V — düzenlenmiş 3.3 V hattı. Shield’lar için 250 mA’e kadar mevcuttur (microSD kart kullanımdaysa daha az). Daha yeni kameraların aksine bu pin çift yönlüdür — aşağıdaki uyarıya bakın.
VIN — 3.6 – 5 V giriş. Kartı yerleşik düzenleyici üzerinden besler.
GND — ortak topraklama.
Not
Hem USB hem de VIN mevcut olduğunda, daha yüksek voltaja sahip olan kartı besler — yerleşik diyotlar yalnızca daha güçlü hattı seçer.
Uyarı
Yerleşik düzenleyiciden geçmek istemiyorsanız M7’yi doğrudan 3.3V pinine 3.3 V besleyerek çalıştırabilirsiniz (may). Bu durumda, aynı anda VIN veya USB gücünü de uygulamayın — başka bir kaynak aktifken düzenleyiciyi geri sürmek kamerayı kalıcı olarak hasara uğratabilir ve yok edebilir.
Tüyo
Belirli bir aktif / derin uyku görev döngüsünde M7’nin bir pil üzerinde ne kadar çalışacağını modellemek için pil ömrü tahmincisini kullanın.
Kurtarma ve hata ayıklama pinleri¶
RESET — kartı sıfırlamak için GND’ye çekin. Bırakmak MCU’nun normal şekilde başlamasını sağlar.
BOOT0 — STM32 ROM önyükleyiciye (DFU modu) girmek için kartı beslerken 3.3 V’a çekin. OpenMV IDE, yerleşik önyükleyiciyi yeniden flashlamak için bu modu kullanır.
Kart, GPIO başlığının yanında ST‑LINK ve SEGGER J‑Link adaptörleriyle uyumlu bir SWD hata ayıklama başlığı (RST / SWCLK / SWDIO) sunar.
Yerleşik çevre birimleri¶
LED’ler¶
M7’de tek bir kullanıcı RGB LED’i ile bir çift yüksek güçlü 850 nm IR LED bulunur:
Kullanıcı RGB LED’i — yazılımla kontrol edilebilir,
LED_RED,LED_GREENveLED_BLUEolarak sunulur:from machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
IR LED’leri — her iki LED de
LED_IRpini üzerinden birlikte sürülür.LED_IRdonanımda aktif yüksek olarak bağlanmıştır, oysa aygıt yazılımı diğer tüm yerleşik LED’leri aktif düşük olarak ele alır, bu yüzdenon()/off()(anlamı tersine çevirir) yerinelow()/high()kullanın:from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
Kamera sensörü¶
OV7725, csi — kamera sensörleri modülü üzerinden sürülür:
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()
M7’de sensör karta lehimlenmiştir — değiştirilebilir bir modül üzerinde değildir.
microSD kart¶
Bir kart takıldığında otomatik olarak /sdcard konumuna bağlanır ve normal dosya sistemi üzerinden kullanılabilir:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Veri yolu referansı¶
GPIO¶
Serigrafili pinlerin herhangi birini okumak veya sürmek için machine.Pin kullanın. Çıkışlar 3.3 V CMOS’tur, giriş tarafında 5 V toleranslıdır ve pin başına 25 mA’e kadar (başlığın tamamında toplam 120 mA) çekebilir/kaynak sağlayabilir.
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())
Herhangi bir giriş pini ayrıca kenar geçişlerinde bir kesme tetikleyebilir:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Veri yolu |
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¶
Veri yolu |
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")
Aynı donanım, başka bir I²C denetleyicisine bir bellek bölgesi sunmak için machine.I2CTarget üzerinden hedef (slave) modunda da kullanılabilir:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Veri yolu |
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¶
Veri yolu |
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 ve DAC¶
P6, tek kullanıcı analog pinidir. Hem 12 bitlik bir ADC girişi hem de bir DAC çıkışı olarak kullanılabilir.
ADC — pinde 3.3 V’ta tam ölçek:
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üzerinden. 8 bitlik değer 0–3.3 V aralığını kapsar:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
ADC veya DAC modunda P6 yalnızca 3.3 V toleranslıdır — ona 5 V beslemeyin.
PWM¶
Pin |
Zamanlayıcı / kanal |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM4 CH3 |
Not
TIM1, aygıt yazılımı tarafından kamera sensörünün piksel saatini üretmek için ayrılmıştır, bu nedenle P0/P1/P2 üzerinde fiziksel olarak bulunan TIM1 kanalları kamerayı bozmadan kullanıcı PWM’i için kullanılamaz.
TIM4, pyb.Servo ile paylaşılır — bir servo örneklemek tüm zamanlayıcıyı 50 Hz çalışma için yeniden yapılandırır, bu yüzden aynı betikte P7/P8/P9 üzerindeki machine.PWM ile pyb.Servo‘yu karıştırmayın.
Bunlardan herhangi birini machine.PWM üzerinden sürün:
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Yazılımla bit‑banglenen veri yolları¶
Ek bir veri yoluna ihtiyacınız varsa machine.SoftI2C ve machine.SoftSPI herhangi bir GPIO üzerinde çalışır.
Termal sensör (kart dışı)¶
Aygıt yazılımı, harici olarak bağlanan termal görüntüleyiciler için fir — termal sensör sürücüsü (fir == far infrared) sürücüsünü içerir:
MLX90621 — 16 × 4 IR dizisi
MLX90640 — 32 × 24 IR dizisi
MLX90641 — 16 × 12 IR dizisi
AMG8833 — 8 × 8 IR dizisi
Modülü kartın I²C veri yoluna bağlayın ve çerçeveleri fir.init() + fir.snapshot() ile okuyun:
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 sürücüsü sensörle yalnızca I²C 2 üzerinden konuşur — modülü P4 (SCL) ve P5 (SDA) pinlerine bağlayın.
Zamanlama¶
time¶
time modülü, bloklayan gecikmeleri, monotonik tikleri ve geçen süre ölçümünü kapsar:
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)
Sanal zamanlayıcılar¶
machine.Timer, bir donanım zamanlayıcı yuvası tüketmeden periyodik veya tek seferlik geri çağırmalar zamanlar. Sanal (yazılım) bir zamanlayıcı kullanmak için id olarak -1 geçirin:
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"))
Periyot değerleri milisaniye cinsindendir. Yuvayı durdurmak ve serbest bırakmak için deinit() çağırın.
Gerçek zamanlı saat¶
machine.RTC, sıfırlamalar boyunca duvar saati zamanını korur:
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())
Bekçi köpeği (Watchdog)¶
machine.WDT, uygulama takılırsa kartı sıfırlar. Bir kez başlatıldığında durdurulamaz veya yeniden yapılandırılamaz — ana döngünüzün içinde onu periyodik olarak besleyin:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Önyükleme ve çalışma zamanı bilgileri¶
USB önyükleyici penceresi¶
Her güç açılışında kamera, kullanıcının DFU moduna girmesine gerek kalmadan OpenMV IDE’nin aygıt yazılımını güncellemesine olanak tanıyan kısa bir önyükleyici (birkaç saniye) çalıştırır. Pencere süresi dolduktan sonra önyükleyici denetimi önce boot.py‘ye, ardından main.py‘ye devreder.
Çalışan bir betik, machine.bootloader() çağırarak istek üzerine önyükleyiciye yeniden girebilir:
import machine
machine.bootloader()
Dosya sistemi ve önyükleme sırası¶
M7 aygıt yazılımı, önyüklemede en fazla üç dosya sistemi bağlar:
Dahili flash bellek — her zaman
/flashkonumuna bağlanır. Varsayılan olarakmain.pyveREADME.txtiçerir; ilk önyüklemede oluşturulur.microSD kart — bir kart takılıysa
/sdcardkonumuna bağlanır.ROMFS — sıfır kopyalı erişimden yararlanan büyük veri varlıklarını (ör. AI modelleri) sunmak için kullanılan,
/romkonumundaki salt okunur, belleğe eşlenmiş dosya sistemi. Herhangi bir kullanıcı Python betiği çalışmadan önce, başlangıçta MicroPython tarafından otomatik olarak bağlanır.
Bağlandıktan sonra, kart mevcutsa çalışma dizini /sdcard, aksi takdirde /flash olarak ayarlanır. Yorumlayıcı daha sonra betikleri o dizinden çalıştırır:
boot.py, her yazılımsal sıfırlamada (soğuk önyükleme, REPL’denCtrl‑Dveya çalışan betik döndüğünde) çalıştırılır.main.py, yalnızca soğuk önyüklemede,boot.py‘den hemen sonra çalıştırılır. Sonraki yazılımsal sıfırlamalarboot.py‘yi yeniden çalıştırır ancak doğrudan REPL’e düşer —main.py‘yi yeniden çalıştırmak için kartı tamamen sıfırlamanız gerekir.
SD karta bir boot.py veya main.py bırakmak, flash bellekteki kopyaya dokunmadan onu geçersiz kılar — her iki dosya da önyükleme dizininde aranır (kart bağlıyken /sdcard, aksi takdirde /flash).
Yeni flashlanmış bir kartla gelen varsayılan main.py, bir kalp atışı olarak yalnızca kullanıcı RGB LED’inin mavi kanalını yanıp söndürür (iki kısa darbe, kısa boşluk), böylece herhangi bir ana bilgisayar bağlı olmadan aygıt yazılımının temiz bir şekilde önyüklendiğini anlayabilirsiniz.
sys.path, her üç dosya sistemini ve onların lib/ alt dizinlerini içerecek şekilde genişletilir, böylece içe aktarılabilir modüller /flash/lib, /sdcard/lib veya /rom/lib içinde bulunabilir.
Sistemi takılı bir SD kartı yok saymaya zorlamak için (örneğin bir kart mevcut olsa bile flash bellekteki main.py‘yi çalıştırmak için), /flash kökünde SKIPSD adlı boş bir dosya oluşturun.
USB üzerinden bağlandığında, önyükleme dosya sistemi (kart mevcutsa /sdcard, aksi takdirde /flash) ana bilgisayarda bir USB yığın depolama sürücüsü olarak da numaralandırılır ve boot.py, main.py ve diğer dosyaları doğrudan düzenlemenize olanak tanır. Kamerayı sıfırlamadan önce sürücüyü çıkarın ki ana bilgisayar önbelleğe alınmış yazma işlemlerini boşaltsın.
Not
İşletim sistemi sürücüyü pasif bir blok aygıtı olarak ele aldığından, OpenMV Cam üzerinde çalışan kod tarafından oluşturulan veya değiştirilen dosyalar, ana bilgisayar sürücüyü yeniden bağlayana kadar görünmez. Hem işletim sistemi hem de OpenMV Cam aynı dosya sistemini aynı anda yazarsa, işletim sistemi kazanır ve kamera tarafından yapılan değişikliklerin üzerine yazar. Betiğin geri yazdığı herhangi bir veri için SD kartı kullanın ve bu dosyaları ana bilgisayardan okumadan önce yeniden bağlayın.
Not
Ana bilgisayar USB yığın depolama sürücüsünden okurken veya ona yazarken kullanıcı RGB LED’inin kırmızı kanalı kısa süreliğine yanabilir — bu, bir arıza değil, aygıt yazılımı tarafından sürülen bir etkinlik göstergesidir.
Depolama boyutları¶
M7 şunlarla gelir:
/flash— 96 KB FAT dosya sistemi, okuma/yazma./rom— 256 KB salt okunur, belleğe eşlenmiş ROMFS./sdcard— takılı olan microSD kartın tam boyutu (mevcut olduğunda), okuma/yazma.
Donanımsal hata (hard‑fault) göstergesi¶
Kullanıcı RGB LED’i tüm renkler arasında hızla geçiş yapıyorsa — belirgin tonlar yerine parıldayan beyaz bir LED gibi görünecek kadar hızlı — aygıt yazılımı kurtarılamaz bir donanımsal hataya (hard fault) çarpmıştır. Kurtarmak için aygıt yazılımını yeniden flashlayın; yeniden flashlamak işe yaramazsa kart fiziksel olarak hasar görmüş olabilir.
Yazılım kütüphaneleri¶
Modüllerin tam listesi için — M7 yapısına özgü olanlar dahil — kütüphane dizinine bakın.