OpenMV Cam H7 Plus¶
OpenMV Cam H7 Plus, STMicroelectronics STM32H743 (Cortex‑M7 @ 480 MHz) işlemcisini 32 MB harici SDRAM, 32 MB QSPI flash bellek, donanımsal JPEG codec ve çıkarılabilir bir taşıyıcı üzerindeki OV5640 5MP kamera modülü ile bir araya getirir. Ek bellek, yüksek çözünürlüklü yakalama ve büyük görüntü arabellekleri için oldukça uygundur.
Tam veri sayfası, fotoğraflar ve boyutlar için OpenMV Cam H7 Plus ürün sayfasına bakın.
Öne çıkanlar¶
STMicroelectronics STM32H743 480 MHz’de Cortex‑M7 (1027 DMIPS).
Donanımsal JPEG kodlayıcı/kod çözücü.
32 MB harici SDRAM (32‑bit @ 100 MHz, 400 MB/s) artı 1 MB dahili SRAM.
2 MB dahili flash bellek + 32 MB harici QSPI flash bellek (~100 MB/s okuma).
OV5640 5MP yuvarlanan deklanşörlü (rolling‑shutter) sensör.
Tam hızlı USB (12 Mb/s) — ana bilgisayara VCP + USB yığın depolama olarak görünür.
microSD soketi — SD 2 GB’a kadar, SDHC 32 GB’a kadar, SDXC 2 TB’a kadar.
LiPo pil konnektörü (yerleşik şarj cihazı yok — şarjlı bir hücre takın ya da VIN/USB üzerinden çalıştırın).
10 G/Ç pini, 3.3 V çıkışlı 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 ışıkta aktif aydınlatma için iki yüksek güçlü 850 nm IR LED.
Not
H7 Plus’ta yerleşik güç yönetimi yongası 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 ya da kartı USB / VIN üzerinden çalıştırın.
Pin yerleşimi¶
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 |
dijital G/Ç |
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’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 Plus’ta MCU’ya yönlendirilmez. Onu harici olarak sürün ya da 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 regülatör üzerinden besler.
GND — ortak toprak.
Bir 3.7 V LiPo konnektörü de mevcuttur, ancak H7 Plus’ta pil şarj cihazı yoktur — önceden şarj edilmiş bir hücre bağlayın ya da bunun yerine VIN / USB sağlayın.
Not
Hem USB hem de VIN/LiPo mevcut olduğunda, VIN/LiPo girişi kazanır — yerleşik güç anahtarı kartı beslemek için USB yerine onu seçer.
Uyarı
H7 Plus’ta pil konnektörü ve VIN birbirine bağlıdır. Aynı anda hem bir LiPo takıp hem de VIN uygulamayın — iki kaynak birbiriyle çekişir ve pile, karta ya da her ikisine birden zarar verebilir.
Uyarı
Yerleşik regülatörden geçmek istemiyorsanız, 3.3V pinine doğrudan 3.3 V besleyerek H7 Plus’ı çalıştırabilirsiniz. Bu durumda aynı anda VIN veya USB gücü de uygulamayın — başka bir kaynak aktifken regülatörü ters yönde sürmek kamerayı kalıcı olarak hasara uğratabilir ve tahrip edebilir.
Tüyo
Belirli bir aktif / derin uyku görev döngüsü için H7 Plus’ın bir pille ne kadar çalışacağını modellemek üzere 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 kartı beslerken 3.3 V’a çekin. OpenMV IDE bu modu yerleşik önyükleyiciyi yeniden flaşlamak için 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 / SWO) sunar.
Not
SWO iz (trace) pini, kamera başlığının SPI saat hattıyla paylaşılır. SWO, MCU ile SPI üzerinden iletişim kuran herhangi bir kamera modülüyle — örneğin FLIR® Lepton® Adaptör Modülü ile — aynı anda kullanılamaz; birini ya da diğerini seçin.
Yerleşik çevre birimleri¶
LED’ler¶
H7 Plus’ta 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 üzerinden birlikte sürülür.LED_IRdonanımda aktif yüksek olarak bağlıdır, aygıt yazılımı ise diğer her yerleşik LED’i aktif düşük olarak ele alır; bu nedenleon()/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ü¶
OV5640, 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()
OV5640’ta yerleşik bir JPEG sıkıştırıcı bulunur. csi.CSI.pixformat değerini csi.JPEG olarak ayarladığınızda sensör sıkıştırılmış çerçeveleri kamera veri yolu üzerinden doğrudan kameraya iletir; bu da yüksek çözünürlüklü yakalamaları pratik hale getirir: csi.HD (1280×720), csi.FHD (1920×1080) ve tam 5MP csi.WQXGA2 (2592×1944) çözünürlüklerinin tümü JPEG olarak akar. Sıkıştırmayı csi.CSI.quality ile ayarlayın (0-100, yüksek = daha büyük çerçeveler, daha fazla ayrıntı):
cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)
Sensör çıkarılabilir bir modül üzerinde durur — 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.
Makine öğrenmesi¶
ml — Makine Öğrenmesi, nicelenmiş TFLite modellerini Cortex‑M7 üzerinde CMSIS‑NN çekirdekleriyle çalıştırır — saniyede birkaç çerçeve hızında kompakt tespit ediciler için yeterince hızlıdır. Salt okunur /rom dosya sistemindeki modeller RAM’e kopyalanmadan doğrudan flash bellekten yüklenir. İşte tespit edilen yüzü ve altı yer işaretini her çerçeveye bindiren 128×128’lik bir BlazeFace tespit edicisi:
import csi
import time
import ml
from ml.postprocessing.mediapipe import BlazeFace
# Initialize the sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))
# Load built-in face detection model
model = ml.Model("/rom/blazeface_front_128.tflite", postprocess=BlazeFace(threshold=0.4))
print(model)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
# faces is a list of ((x, y, w, h), score, keypoints) tuples
for r, score, keypoints in model.predict([img]):
ml.utils.draw_predictions(img, [r], ("face",), ((0, 0, 255),), format=None)
# keypoints is a ndarray of shape (6, 2)
# 0 - right eye (x, y)
# 1 - left eye (x, y)
# 2 - nose (x, y)
# 3 - mouth (x, y)
# 4 - right ear (x, y)
# 5 - left ear (x, y)
ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))
print(clock.fps(), "fps")
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 pinlerden herhangi birini okumak ya da 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 (tüm başlık genelinde toplam 120 mA) emebilir/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‑bit ADC girişi hem de 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‑bit 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 vermeyin.
PWM¶
Pin |
Zamanlayıcı / kanal |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
Not
TIM1, aygıt yazılımı tarafından kamera sensörünün piksel saatini üretmek üzere 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 örneği oluşturmak tüm zamanlayıcıyı 50 Hz çalışma için yeniden yapılandırır; bu nedenle aynı betikte P7/P8 üzerindeki machine.PWM ile pyb.Servo öğesini karıştırmayın.
Bunlardan 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ımsal bit‑banged 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ı, 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, monoton 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 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ı durdurup 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ıktan sonra durdurulamaz ya da 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 boot.py ve ardından main.py dosyasına 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ı¶
H7 Plus aygıt yazılımı önyüklemede en fazla üç 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ı (ör. yapay zeka modelleri) sevk etmek için kullanılan,
/romkonumundaki salt okunur, belleğe eşlenmiş dosya sistemi. MicroPython tarafından başlangıçta, herhangi bir kullanıcı Python kodu çalışmadan önce otomatik olarak bağlanır.
Bağlamanın ardından, 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ım sıfırlamasında çalıştırılır (soğuk önyükleme, REPL’denCtrl‑Dya da çalışan betik döndüğünde).main.py, yalnızca soğuk önyüklemede,boot.pyhemen ardından çalıştırılır. Sonraki yazılım sıfırlamalarıboot.pydosyasını yeniden çalıştırır ancak doğrudan REPL’e düşer —main.pydosyasını yeniden çalıştırmak için kartı tamamen sıfırlamanız gerekir.
SD karta bir boot.py ya da main.py dosyası bırakmak, flash bellekteki kopyaya dokunmadan onu geçersiz kılar — her iki dosya da önyükleme dizininde (kart bağlıyken /sdcard, aksi takdirde /flash) aranır.
Yeni flaşlanmış bir kartla gelen varsayılan main.py, yalnızca kullanıcı RGB LED’inin mavi kanalını bir kalp atışı olarak yakıp söndürür (iki kısa darbe, kısa bir aralık); böylece herhangi bir ana bilgisayar bağlı olmadan aygıt yazılımının düzgün ö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 ya da /rom/lib içinde yer alabilir.
Sistemi, takılı bir SD kartı yok saymaya zorlamak için (örneğin bir kart mevcutken bile flash main.py dosyasını çalıştırmak için), /flash kökünde SKIPSD adlı boş bir dosya oluşturun.
USB üzerinden bağlıyken, önyükleme dosya sistemi (kart mevcutsa /sdcard, aksi takdirde /flash) ana bilgisayarda bir USB yığın depolama sürücüsü olarak da listelenir; bu da 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ış yazmalarını 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 ya da 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ığı 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 ya da ona yazarken kullanıcı RGB LED’inin kırmızı kanalı kısaca yanabilir — bu, bir arıza değil, aygıt yazılımı tarafından sürülen bir etkinlik göstergesidir.
Depolama boyutları¶
H7 Plus şununla gelir:
/flash— 24 MB FAT dosya sistemi, okuma/yazma./rom— 8 MB salt okunur belleğe eşlenmiş ROMFS, sıfır kopyalı mmap erişiminden yararlanan betikleri ve ML modellerini sevk etmek için kullanılır./sdcard— takılı olan 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ızlıca geçiş yapıyorsa — belirgin 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 flaşlayın; yeniden flaşlamak işe yaramazsa kart fiziksel olarak hasar görmüş olabilir.
Yazılım kütüphaneleri¶
Modüllerin tam listesi — H7 Plus derlemesine özgü olanlar da dahil — için kütüphane dizinine bakın.