OpenMV Cam RT1062

OpenMV Cam RT1062, NXP i.MX RT1062 (Cortex‑M7 @ 600 MHz) çevresinde tasarlanmış düşük güçlü bir makine görüşü kartıdır. Kart; USB‑C yüksek hızlı ağ bağlantısını, Wi‑Fi/Bluetooth’u ve 10/100 Ethernet’i, çıkarılabilir bir taşıyıcı üzerindeki OV5640 5MP sensörle bir araya getirir. Kamera, derin uyku modunda bir LiPo bataryadan yalnızca ~30 µA çeker, bu da onu batarya ile çalışan projeler için oldukça uygun kılar.

OpenMV Cam RT1062

Tam veri sayfası, fotoğraflar ve boyutlar için OpenMV Cam RT1062 ürün sayfasına bakın.

Öne çıkanlar

  • 600 MHz’de NXP i.MX RT1062 Cortex‑M7.

  • 32 MB harici SDRAM (16‑bit @ 160 MHz, 320 MB/s) ile birlikte 1 MB dahili SRAM ve 16 MB QSPI flash bellek (133 MHz 4‑bit SDR, 66 MB/s okuma); R6+ üzerinde 4 KB EEPROM.

  • OV5640 5MP yuvarlanan obtüratör (rolling‑shutter) sensörü.

  • Yerleşik IMU (12‑bit 3 eksenli ivmeölçer, ±2/4/8 g).

  • Yüksek hızlı USB‑C (480 Mb/s, 1.5 A akım sınırı), 10/100 Mb/s Ethernet (shield aracılığıyla PoE uyumlu), Wi‑Fi a/b/g/n + Bluetooth 5.1 (yonga anten veya U.FL seçeneği).

  • microSD soketi — SD 2 GB’a kadar, SDHC 32 GB’a kadar, SDXC 2 TB’a kadar.

  • LiPo şarj cihazı (R6+ üzerinde 500 mA, R4/R5 üzerinde 100 mA), yedek batarya padleri olan RTC. Derin uyku modunda batarya üzerinden ~30 µA çeker.

  • 14 G/Ç pini, tümü 3.3 V çıkış / 3.3 V toleranslı, pin başına 4 mA, kesme yeteneğine sahip.

  • Kullanıcı RGB LED’i, kullanıcı SW butonu, donanım güç butonu (derin uyku / uyandırma durum makinesi) ve şarj / USB / VIN gücü için ayrı bir durum LED’i.

Uyarı

RT1062’nin G/Ç pinleri 5 V toleranslı değildir. Cihazı doğrudan Arduino Mega gibi bir 5 V MCU’ya bağlamayın. Kartı yalnızca VIN üzerinden besleyin.

Pin Bağlantı Şeması

OpenMV Cam RT1062 OV5640 Pin Bağlantı Şeması

Pin referansı

Pin adı

İşlev

P0

SPI1 MOSI / PWM2 B3

P1

SPI1 MISO / CAN0 TX

P2

SPI1 SCLK / PWM2 B3

P3

SPI1 SS / CAN0 RX

P4

I2C1 SCL / UART1 TX / PWM1 X2

P5

I2C1 SDA / UART1 RX / PWM1 X3

P6

ADC

P7

PWM2 A0

P8

PWM2 B0

P9

PWM1 A3

P10

PWM1 B3 / çerçeve eşitleme (frame sync) G/Ç

P11

uyandırma (aktif düşük, uyandırmak için GND’ye bağlayın)

P12

RESET — kartı sıfırlamak için GND’ye çekin (bir GPIO değildir)

P13

dijital G/Ç

P14

dijital G/Ç

ON/OFF

donanım güç butonunu çoğaltan header padi (aktif düşük)

SW

kullanıcı butonu (aktif düşük)

ST

VIN gücünde düşük, USB gücünde yüksek

CHG

aktif düşük; takılı bir LiPo batarya şarj olurken düşük

PG

aktif düşük; VIN veya USB gücü mevcut olduğunda düşük

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)

Not

P10 çerçeve eşitleme (frame‑sync) hattı paylaşımlı bir bustur. Aynı anda MCU’ya, kamera sensörünün tetikleme / pozlama pinine ve kullanıcı header’ına bağlıdır. Yön uygulamaya bağlıdır — sensörün nasıl yapılandırıldığına göre MCU, sensör ya da harici bir sinyal bu hattı sürebilir. Bir seferde yalnızca bir sürücünün aktif olduğundan emin olun.

Not

ON/OFF ve P11, daima açık RAW rayına referanslıdır (anahtarlamalı 3.3 V rayına değil), bu nedenle kartın geri kalanı derin uyku / düşük güç modundayken bile işlevsel kalırlar. Her iki giriş de aktif düşüktür.

Bu pinler, RAW rayı üzerinde çalışabilmeleri için seviye dönüştürücülerden (level shifter) geçer. ON/OFF veya P11 üzerinde kesinlikle 3.3 V doğrudan GPIO davranışına ihtiyacınız varsa (örneğin onları dönüştürücüden geçmeden bir 3.3 V MCU’dan sürmek için), kart, dönüştürücüyü atlamanıza olanak tanıyan pull‑up ve 0‑ohm jumper padleri sunar. Bu, ileri düzey bir donanım değişikliğidir — çoğu kullanıcı buna dokunmamalıdır.

Not

P13 ve P14 varsayılan olarak özel işlevi olmayan düz GPIO’lardır. Padler, kartın arkasındaki 0‑ohm direnç lehim köprülerinin yeniden lehimlenmesiyle isteğe bağlı olarak başka sinyallere yönlendirilebilir:

  • P13 ↔ CHG durumu / JTAG TRSTB

  • P14 ↔ ST durumu / JTAG TDI

Çoğu kullanıcı bu jumperlara dokunmayacaktır — özellikle güç yönetimi geri okumasına veya JTAG’a ihtiyacınız olmadıkça onları GPIO varsayılanında bırakın.

Güç pinleri

  • 3.3V — regüle edilmiş 3.3 V rayı. RT1062’de yalnızca çıkıştır — bu pine harici güç beslemeyin. Shield’ler için 1 A’e kadar mevcuttur.

  • VIN — 5 V giriş. Kartı ve yerleşik LiPo şarj cihazını besler.

  • RAW — giriş/çıkış, daima açık (3.6 V – 5 V). Hangi kaynak aktifse (VIN, USB veya takılı batarya) onu taşır ve bir giriş olarak da kullanılabilir. Buna güç beslerken RAW’ı bir seri diyot üzerinden sürmelisiniz — aksi takdirde akım VIN/USB’ye geri akar ve besleme kaynağına veya yerleşik korumaya zarar verir.

  • GND — ortak toprak.

Not

Yerleşik güç yönetimi yongası, kartı ve batarya şarj cihazını beslemek için USB veya VIN’den hangisinin voltajı daha yüksekse otomatik olarak onu seçer. Bir LiPo takılıysa, kalan boşlukta şarj olur ve VIN/USB düşerse veya çıkarılırsa, kontrolcü kartı çalışır halde tutmak için bataryaya geri döner.

Not

Kartın arkasında harici bir 3.3 V RTC yedek bataryası için lehim padleri bulunur. Bu padlere bir düğme pil bağlamak, kartın geri kalanı güçsüzken RTC’yi çalışır durumda tutar.

Tüyo

RT1062’nin belirli bir aktif / derin uyku görev döngüsünde bir bataryayla ne kadar süre çalışacağını modellemek için batarya ömrü tahminleyicisini kullanın.

Ethernet pinleri

RT1062, 10/100 Mb/s Ethernet PHY’nin MDI çiftlerini GPIO header’ının yanındaki özel padlerde sunar. MDI pinlerini doğrudan bir RJ45’e bağlamak güvenli değildir — PHY ile kablo arasında Ethernet manyetikleri (bir magjack içine yerleştirilmiş ya da shield üzerinde bulunan bir izolasyon transformatörü) gereklidir. OpenMV PoE shield’i bunları içerir; kendi jakınızı yapıyorsanız, manyetik entegre bir RJ45 veya harici bir transformatör kullanın.

  • ETH_LED — bağlantı/etkinlik LED’i. Bağlantı kurulduğunda aktif düşüktür; trafik olduğunda yanıp söner.

  • ETH_TXP / ETH_TXN — iletim çifti.

  • ETH_RXP / ETH_RXN — alım çifti.

Not

Header ayrıca üzerinde Reserved yazan dört pad sunar. Bunlar, OpenMV N6 üzerindeki gigabit Ethernet çiftleriyle (DC P/N ve DD P/N) ayak izi uyumludur, böylece aynı Ethernet / PoE shield’i her iki karta da takılabilir. RT1062’nin PHY’si yalnızca 10/100 Mb/s yapar, dolayısıyla bu dört padin elektriksel bağlantısı yoktur — onları bağlamadan bırakı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.

  • SBL — ROM önyükleyici (Serial Boot Loader) moduna girmek için kartı beslerken 3.3 V’a çekin. OpenMV IDE, yerleşik önyükleyiciyi yeniden flaşlamak için bu modu kullanır.

ST‑LINK ve SEGGER J‑Link adaptörleriyle uyumlu özel bir ARM 10 pinli SWD/JTAG header’ı takılıdır.

Not

RT1062, bu konnektör üzerinden varsayılan olarak yalnızca SWD hata ayıklamayı sunar. Tam JTAG kutudan çıktığı gibi mevcut değildir.

Yerleşik çevre birimleri

LED’ler

RT1062’de iki RGB LED bulunur:

  • Kullanıcı RGB LED’i — yazılımla kontrol edilebilir, LED_RED, LED_GREEN ve LED_BLUE olarak sunulur:

    from machine import LED
    
    LED("LED_RED").on()
    LED("LED_GREEN").on()
    LED("LED_BLUE").on()
    
  • Güç LED’i — yerleşik güç yönetimi donanımı tarafından doğrudan sürülür, yazılım kontrolü yoktur. Beslemenin ne yaptığını bir bakışta okumak için kullanın.

    Çalışırken:

    Kanal

    Anlamı

    Mavi

    VIN kartı besliyor (USB’de kapalı)

    Yeşil

    USB veya VIN gücü mevcut

    Kırmızı

    takılı bir LiPo bataryayı şarj ediyor

    Derin uyku modunda Kırmızı hariç tüm kanallar kapalıdır; Kırmızı, bir LiPo şarj olurken hâlâ yanar.

Butonlar

RT1062’de iki buton bulunur:

  • SW — genel amaçlı kullanıcı butonu. Normal bir aktif düşük GPIO girişi olarak koddan okunabilir:

    from machine import Pin
    
    sw = Pin("SW", Pin.IN)
    print(sw.value())
    
  • Güç butonu — RT1062 kartı üzerinde tamamen donanımda çalışan özel bir güç kontrolcüsü durum makinesi tarafından sürülür. Kullanıcı koduna sunulmaz; kontrolcü, ne kadar süre basılı tutulduğuna göre ne yapacağına karar verir:

    • Kart çalışırken ~5 sn basılı tutun → durum makinesi derin uyku moduna geçer.

    • Kart derin uyku modundayken ~1 sn basılı tutun → durum makinesi sistemi yeniden açar.

    ON/OFF header padini düşük çekmek, yerleşik güç butonuna basmakla aynı etkiye sahiptir — harici bir anahtar bağlamak veya hattı başka bir mikrodenetleyiciden sürmek için kullanışlıdır.

Güç durumu pinleri

Yerleşik güç yönetimi yongasından üç aktif düşük durum girişi:

  • PG — VIN veya USB gücü mevcut olduğunda düşük. Daima bağlıdır.

  • ST — kart VIN üzerinde çalışırken düşük, USB gücü üzerinde çalışırken yüksek. Varsayılan olarak bağlı değildir.

  • CHG — takılı bir LiPo batarya şarj olurken düşük. Varsayılan olarak bağlı değildir.

from machine import Pin

power_ok = not Pin("PG", Pin.IN).value()

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’ın yerleşik bir JPEG sıkıştırıcısı vardır. csi.CSI.pixformat değerini csi.JPEG olarak ayarlayın; sensör, sıkıştırılmış çerçeveleri kamera busu ü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) hepsi JPEG olarak akış yapar. Sıkıştırmayı csi.CSI.quality ile ayarlayın (0-100, daha 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, CMSIS‑NN çekirdekleriyle Cortex‑M7 üzerinde nicemlenmiş TFLite modellerini çalıştırır — saniyede birkaç çerçevede 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 onun altı işaret noktasını her çerçeveye bindiren 128×128 bir BlazeFace tespit edici:

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")

IMU

RT1062 aygıt yazılımı, yerleşik ivmeölçeri imu — imu sensörü modülüne bağlamaz. Bunun yerine onunla dahili I²C busu üzerinden doğrudan konuşun — yonga 0x15 adresinde bulunur ve 0x03 yazmacından başlayarak işaretli üç adet 12‑bit ivme kanalı ile bir 8‑bit sıcaklık baytı paketler:

import machine
import time

ADDR     = 0x15
DATA_REG = 0x03
LSB_PER_G = 1024.0    # ±2 g range

def s12(hi, lo):
    v = ((hi << 8) | lo) >> 4
    return v - 0x1000 if v & 0x800 else v

bus = machine.I2C(2)
print("Devices on I²C2:", bus.scan())

while True:
    d = bus.readfrom_mem(ADDR, DATA_REG, 7)
    x = s12(d[0], d[1]) / LSB_PER_G
    y = s12(d[2], d[3]) / LSB_PER_G
    z = s12(d[4], d[5]) / LSB_PER_G
    temp_c = d[6] * 0.586 + 25.0
    print("x=%+.2fg  y=%+.2fg  z=%+.2fg  T=%.1f°C" % (x, y, z, temp_c))
    time.sleep_ms(100)

EEPROM

R6 ve sonrası kartlar, ivmeölçerle aynı dahili bus üzerinde genel amaçlı bir 4 KB I²C EEPROM içerir. (Daha eski revizyonlarda bu yoktur — bu kod parçacıklarını R4/R5 üzerinde çağırmak, eksik bir I²C ack nedeniyle zaman aşımına uğrar.) 16‑bit bellek adresiyle standart machine.I2C readfrom_mem / writeto_mem API’sini kullanın:

import machine
import time

EEPROM_ADDR = 0x50            # default address
PAGE_SIZE   = 32              # bytes per page (both read and write)
EEPROM_SIZE = 4096

bus = machine.I2C(2)

# Dump the entire 4 KB one page at a time
data = bytearray()
for offset in range(0, EEPROM_SIZE, PAGE_SIZE):
    data += bus.readfrom_mem(EEPROM_ADDR, offset, PAGE_SIZE, addrsize=16)
print(len(data), "bytes")

# Write a small payload back at offset 0 (fits in one page)
bus.writeto_mem(EEPROM_ADDR, 0, b"hello, world", addrsize=16)
time.sleep_ms(10)             # ~5 ms write cycle after each page

# Read it back
print(bus.readfrom_mem(EEPROM_ADDR, 0, 12, addrsize=16))

Hem okumalar hem yazmalar 32 baytlık bir sayfa içinde kalmalıdır. Daha büyük transferleri sayfa başına bir çağrıya bölün ve ardışık yazmalar arasına ~5 ms’lik yazma döngüsü gecikmesini ekleyin.

Wi‑Fi

Yerleşik CYW43 ailesi modülü, network — ağ yapılandırması üzerinden bir istasyon arabirimi olarak sunulur. Bağlandıktan sonra ipconfig("addr4") (ip, netmask) çiftini döndürür:

import network, time

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
while not wlan.isconnected():
    time.sleep(1)
print("Wi‑Fi IP:", wlan.ipconfig("addr4")[0])

Bluetooth

Aynı kablosuz modül ayrıca Bluetooth 5.1 sunar. asyncio dostu BLE için aioble — Asenkron BLE kullanın — örneğin bir çevre birimi olarak yayın yapın ve bir merkezin bağlanmasını bekleyin:

import asyncio
import aioble

async def run():
    while True:
        conn = await aioble.advertise(250_000, name="OpenMV-RT1062")
        print("Connected:", conn.device)
        await conn.disconnected()

asyncio.run(run())

Ethernet

MDI padlerine bir RJ45 (manyetikleriyle birlikte) bağlandığında, 10/100 PHY bir LAN arabirimi olarak görünür. Bağlantı kurulur kurulmaz DHCP otomatik olarak çalışır:

import network, time

lan = network.LAN()
lan.active(True)
while not lan.isconnected():
    time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])

microSD kart

Bir kart takıldığında /sdcard konumuna otomatik olarak bağlanır ve normal dosya sistemi üzerinden kullanılabilir:

import os

for entry in os.listdir("/sdcard"):
    print(entry)

Bus referansı

GPIO

Silkscreen ile işaretlenmiş pinlerden herhangi birini okumak veya sürmek için machine.Pin kullanın. Çıkışlar 3.3 V CMOS’tur ve pin başına 4 mA’e kadar akım çekebilir/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, kenar geçişlerinde bir kesme de tetikleyebilir:

def handler(pin):
    print("triggered:", pin)

Pin("P1", Pin.IN, Pin.PULL_UP).irq(
    handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)

UART

Bus

TX

RX

UART1

P4

P5

from machine import UART

uart = UART(1, baudrate=115200)
uart.write("hello")
uart.read(5)

I²C

Bus

SCL

SDA

I2C1

P4

P5

from machine import I2C

i2c = I2C(1, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")

Aynı donanım, başka bir I²C kontrolcüsüne 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(1, addr=0x42, mem=buf)

SPI

Bus

MOSI

MISO

SCK

CS

SPI1

P0

P1

P2

P3

from machine import SPI
from machine import Pin

spi = SPI(1, 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

Bus

TX

RX

CAN1

P1

P3

Not

CAN, v5.0.0 aygıt yazılımında bu kartta henüz desteklenmemektedir.

from machine import CAN

can = CAN(1, 500_000)
can.set_filters(None)
can.send(0x123, b"\xDE\xAD\xBE\xEF")
print(can.recv())

ADC

Tek kullanıcı ADC pini, ~3.3 V’ta tam ölçekli olan P6‘dır:

from machine import ADC
import time

adc = ADC("P6")
while True:
    voltage = adc.read_u16() * 3.3 / 65535
    print(voltage)
    time.sleep_ms(100)

PWM

Pin

FlexPWM kanalı

P0

PWM2 B3

P2

PWM2 B3

P4

PWM1 X2

P5

PWM1 X3

P7

PWM2 A0

P8

PWM2 B0

P9

PWM1 A3

P10

PWM1 B3

Bunlardan herhangi birini machine.PWM üzerinden sürün:

from machine import Pin, PWM

pwm = PWM(Pin("P9"), freq=1_000, duty_u16=32768)

Yazılımla bit‑banged edilen buslar

Ekstra bir busa 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 busuna 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 4 üzerinden konuşur — modülü P4 (SCL) ve P5 (SDA) pinlerine bağlayın.

Zamanlama

time

time modülü; bloklayan gecikmeleri, monoton 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. Durdurmak ve yuvayı serbest bırakmak için deinit() çağırın.

Gerçek zamanlı saat

machine.RTC, sıfırlamalar boyunca ve (arka padlere bağlı isteğe bağlı 3.3 V yedek bataryayla birlikte, bkz. Güç pinleri) tam güç kaybı 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())

RTC, derin uyku boyunca da çalışır, böylece onu machine.deepsleep() için bir uyandırma kaynağı olarak kullanabilirsiniz.

Watchdog

machine.WDT, uygulama takılırsa 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 açılışta 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‘ye 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ı

RT1062 aygıt yazılımı, önyüklemede en fazla üç dosya sistemini bağlar:

  • Dahili flash bellek — daima /flash konumuna bağlıdır. Varsayılan olarak main.py ve README.txt dosyalarını barındırır; ilk önyüklemede oluşturulur.

  • microSD kart — bir kart takılıysa /sdcard konumuna bağlanır.

  • ROMFS — sıfır kopyalı erişimden yararlanan büyük veri varlıklarını (örn. AI modelleri) göndermek için kullanılan, /rom konumundaki 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ğlandıktan sonra, kart mevcut olduğunda ç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 çalıştırılır (soğuk önyükleme, REPL’den Ctrl‑D veya çalışan betik döndüğünde).

  • main.py, boot.py‘den hemen sonra yalnızca soğuk önyüklemede çalıştırılır. Sonraki yazılımsal sıfırlamalar boot.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, flaştaki 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 flaşlanmış bir kartta gelen varsayılan main.py, kalp atışı olarak yalnızca kullanıcı RGB LED’inin mavi kanalını yakı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 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 veya /rom/lib içinde bulunabilir.

Sistemi takılı bir SD kartı yok saymaya zorlamak için (örneğin bir kart takılıyken bile flaştaki main.py‘yi ç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 (kart mevcutsa /sdcard, aksi takdirde /flash) ayrıca ana bilgisayarda bir USB yığın depolama sürücüsü olarak listelenir; bu da boot.py, main.py ve diğer dosyaları doğrudan düzenlemenize olanak tanır. Ana bilgisayarın önbelleğe alınmış yazmaları 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 cihazı 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ığı veriler için SD kartı kullanın ve bu dosyaları ana bilgisayardan okumadan önce yeniden bağlayın.

Not

Kullanıcı RGB LED’inin kırmızı kanalı, ana bilgisayar USB yığın depolama sürücüsünden okurken veya ona yazarken 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ı

RT1062 şunlarla birlikte gelir:

  • /flash4 MB FAT dosya sistemi, okuma/yazma.

  • /rom8 MB salt okunur belleğe eşlenmiş ROMFS, sıfır kopyalı mmap erişiminden yararlanan betikleri ve ML modellerini göndermek için kullanılır.

  • /sdcard — takılı olan (mevcutsa) microSD kartın tam boyutu, 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 flaşlayın; yeniden flaşlama yardımcı olmazsa, kart fiziksel olarak hasar görmüş olabilir.

Yazılım kütüphaneleri

Modüllerin tam listesi için — RT1062 derlemesine özgü olanlar dahil — kütüphane dizinine bakın.