OpenMV Cam H7¶
OpenMV Cam H7, 480 MHz hızında çalışan STMicroelectronics STM32H743 etrafında inşa edilmiş bir Cortex‑M7 makine görüşü kartıdır; 1 MB dahili SRAM, 2 MB dahili flash bellek ve donanımsal bir JPEG codec’i içerir. Kart iki sensör revizyonunda gelir — OV7725 içeren H7 ve ON Semi MT9M114 içeren H7 R2 — ancak aygıt yazılımı (firmware), pin dizilimi ve Python API’si aynıdır.
Tam veri sayfası, fotoğraflar ve boyutlar için OpenMV Cam H7 ürün sayfasına bakın.
Öne çıkan özellikler¶
480 MHz’de (1027 DMIPS) STMicroelectronics STM32H743 Cortex‑M7.
Donanımsal JPEG kodlayıcı/kod çözücü.
1 MB dahili SRAM — harici SDRAM yok.
2 MB dahili flash bellek (harici QSPI flash bellek yok).
OV7725 sensörü (veya H7 R2’de MT9M114).
Tam hızlı USB (12 Mb/s) — ana bilgisayara VCP + USB yığın depolama olarak görünür.
microSD soketi — 2 GB’a kadar SD, 32 GB’a kadar SDHC, 2 TB’a kadar SDXC.
LiPo pil konektörü (kart üzerinde şarj cihazı yok — şarjlı bir hücre sağlayın veya VIN/USB’den çalıştırın).
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.
Kullanıcı RGB LED’i ve düşük ışıklı görüşte aktif aydınlatma için iki yüksek güçlü 850 nm IR LED.
Not
H7’de kart üzerinde güç yönetimi çipi yoktur: pil şarj cihazı, pil voltajı ADC’si, şarj / güç durumu LED’leri ve donanımsal güç düğmesi bulunmaz. Pil JST’sine önceden şarj edilmiş bir LiPo bağlayın veya kartı USB / VIN’den çalıştırın.
Pin dizilimi¶
Pin referansı¶
Pin adı |
İşlev |
|---|---|
P0 |
UART1 RX / SPI2 MOSI |
P1 |
UART1 TX / SPI2 MISO |
P2 |
SPI2 SCK / FDCAN2 TX |
P3 |
SPI2 NSS (CS) / FDCAN2 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 senkronizasyonu pedi — yalnızca kamera sensörüne bağlıdır |
BOOT0 |
DFU / ROM önyükleyicisi (bootloader) için güç verirken 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’ler (her iki kanal birlikte sürülür) |
Not
Başlık üzerindeki SYN pedi doğrudan kamera sensörünün tetikleme / pozlama hattına bağlıdır — H7’de MCU’ya yönlendirilmez. Onu harici olarak sürün veya okuyun; MicroPython’dan değiştiremezsiniz.
Güç pinleri¶
3.3V — regüle edilmiş 3.3 V hattı. Shield’ler için 250 mA’ya 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ı, kart üzerindeki regülatör aracılığıyla besler.
GND — ortak topraklama.
Bir 3.7 V LiPo konektörü de mevcuttur, ancak H7’de pil şarj cihazı yoktur — önceden şarj edilmiş bir hücre bağlayın veya bunun yerine VIN / USB sağlayın.
Not
Hem USB hem de VIN/LiPo mevcut olduğunda, VIN/LiPo girişi kazanır — kart üzerindeki güç anahtarı, kartı beslemek için USB yerine onu seçer.
Uyarı
Pil konektörü ve VIN, H7’de birbirine bağlıdır. Bir LiPo takıp aynı anda VIN uygulamayın — iki kaynak birbiriyle çatışır ve pili, kartı veya her ikisini de zarara uğratabilir.
Uyarı
Kart üzerindeki regülatörden geçmek istemiyorsanız, 3.3 V’u doğrudan 3.3V pinine besleyerek H7’ye güç verebilirsiniz. Bu durumda, aynı anda ayrıca VIN veya USB gücü uygulamayın — başka bir kaynak aktifken regülatörü geri sürmek, kamerayı kalıcı olarak zarara uğratıp tahrip edebilir.
Tüyo
H7’nin belirli bir aktif / derin uyku görev döngüsü için bir pille ne kadar süre çalışacağını modellemek için pil ömrü tahmin aracını kullanın.
Kurtarma ve hata ayıklama pinleri¶
RESET — kartı sıfırlamak için GND’ye çekin. Bırakıldığında MCU normal şekilde başlar.
BOOT0 — STM32 ROM önyükleyicisine (DFU modu) girmek için karta güç verirken 3.3 V’a çekin. OpenMV IDE, kart üzerindeki önyükleyiciyi yeniden flash’lamak 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.
Kart üzerindeki çevre birimleri¶
LED’ler¶
H7’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’ler — her iki LED de
LED_IRpini aracılığıyla birlikte sürülür.LED_IRdonanımda aktif yüksek olarak bağlıdır, oysa aygıt yazılımı (firmware) diğer her kart üzeri LED’i aktif düşük olarak ele alır; bu yüzdenon()/off()(anlamı tersine çevirirdi) 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 (veya H7 R2’de MT9M114), csi — kamera sensörleri modülü aracılığıyla 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()
Sensör, çıkarılabilir bir modül üzerinde yer alır — kartın geri kalanını değiştirmeden onu diğer OpenMV kamera modüllerinden herhangi biriyle (global shutter, termal, daha yüksek çözünürlük vb.) değiştirin.
microSD kart¶
Bir kart takıldığında otomatik olarak /sdcard konumuna bağlanır ve normal dosya sistemi aracılığıyla 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’ya kadar (tüm başlık genelinde 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 üzere machine.I2CTarget aracılığıyla 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 (FDCAN)¶
Veri yolu |
TX |
RX |
|---|---|---|
FDCAN2 |
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.DACaracılığıyla. 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ı (firmware) tarafından kamera sensörünün piksel saatini üretmek için ayrılmıştır, bu nedenle fiziksel olarak P0/P1/P2 üzerinde bulunan TIM1 kanalları, kamerayı bozmadan kullanıcı PWM’i için kullanılamaz.
TIM4, pyb.Servo ile paylaşılır — bir servo örneği oluşturmak tüm zamanlayıcıyı 50 Hz çalışma için yeniden yapılandırır, bu yüzden aynı betikte P7/P8/P9 üzerinde machine.PWM ile pyb.Servo öğesini karıştırmayın.
Bunların herhangi birini machine.PWM aracılığıyla sürün:
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
Yazılımla bit‑banging uygulanan veri yolları¶
Ekstra 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ı (firmware), 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 fir.init() + fir.snapshot() ile çerçeveleri 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 tıklamaları 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 (callback) zamanlar. Sanal (yazılımsal) 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 arasında 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 askıda kaldığında kartı sıfırlar. Bir kez başlatıldıktan sonra 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ı bilgisi¶
USB önyükleyici penceresi¶
Her güç açılışında kamera, OpenMV IDE’nin kullanıcının DFU moduna girmesine gerek kalmadan aygıt yazılımını güncellemesine olanak tanıyan kısa bir önyükleyici (birkaç saniye) çalıştırır. Pencere sona erdikten sonra önyükleyici denetimi boot.py ve ardından main.py öğesine devreder.
Çalışan bir betik, machine.bootloader() çağırarak isteğe bağlı olarak önyükleyiciye yeniden girebilir:
import machine
machine.bootloader()
Dosya sistemi ve önyükleme sırası¶
H7 aygıt yazılımı, önyüklemede üç adede kadar dosya sistemini bağlar:
Dahili flash bellek — her zaman
/flashkonumuna bağlanır. Varsayılan olarakmain.pyveREADME.txtdosyalarını barındırır; 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ı (örneğin AI modelleri) göndermek için kullanılan,
/romkonumundaki salt okunur, belleğe eşlenmiş dosya sistemi. Herhangi bir kullanıcı Python kodu çalışmadan önce, başlangıçta MicroPython tarafından otomatik olarak bağlanır.
Bağlamadan sonra, kart mevcutsa çalışma dizini /sdcard, aksi takdirde /flash olarak ayarlanır. Yorumlayıcı ardından o dizinden betikleri çalıştırır:
boot.py, her yazılımsal sıfırlamada (soğuk önyükleme, REPL’denCtrl‑Dveya çalışan betik her döndüğünde) çalıştırılır.main.py, yalnızca soğuk önyüklemede,boot.pyhemen ardından çalıştırılır. Sonraki yazılımsal sıfırlamalarboot.pyöğesini yeniden çalıştırır ancak doğrudan REPL’e düşer —main.pyöğesini 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 flash’lanmış bir kartta gönderilen varsayılan main.py, kalp atışı olarak 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 şekilde önyüklendiğini anlayabilirsiniz.
sys.path, üç dosya sisteminin tümünü 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.
Sistemin takılı bir SD kartı yok saymasını zorlamak için (örneğin bir kart mevcutken bile flash main.py dosyasını çalıştırmak için), /flash kök dizininde SKIPSD adında boş bir dosya oluşturun.
USB üzerinden bağlandığında, önyükleme dosya sistemi (bir 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 ile diğer tüm dosyaları doğrudan düzenlemenize olanak tanır. Ana bilgisayarın önbelleğe alınmış yazmalarını boşaltması için kamerayı sıfırlamadan önce sürücüyü çıkarı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 sistemine aynı anda yazarsa, işletim sistemi kazanır ve kamera tarafından yapılan değişikliklerin üzerine yazar. Betiğin geri yazdığı tüm veriler 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 yönetilen bir etkinlik göstergesidir.
Depolama boyutları¶
H7 şunlarla gelir:
/flash— 128 KB FAT dosya sistemi, okuma/yazma./rom— 128 KB salt okunur belleğe eşlenmiş ROMFS./sdcard— takılan herhangi bir microSD kartın tam boyutu (mevcut olduğunda), okuma/yazma.
Donanımsal arıza (hard‑fault) göstergesi¶
Kullanıcı RGB LED’i tüm renkler arasında hızla geçiş yapıyorsa — ayrı tonlardan ziyade parıldayan beyaz bir LED gibi görünecek kadar hızlı — aygıt yazılımı kurtarılamaz bir donanımsal arızaya (hard fault) çarpmıştır. Kurtarmak için aygıt yazılımını yeniden flash’layın; yeniden flash’lamak yardımcı olmazsa kart fiziksel olarak hasar görmüş olabilir.
Yazılım kütüphaneleri¶
Modüllerin tam listesi için — H7 yapısına özgü olanlar dahil — kütüphane dizinine bakın.