class SPIDisplay – SPI Ekran Sürücüsü

SPIDisplay sınıfı, küçük SPI bağlantılı TFT ve OLED panelleri sürer – en yaygın olarak OpenMV LCD Shield üzerindeki SSD1351 128x160 RGB OLED’i. Sürücü, SPI veri yolunu ve bir GPIO yonga seçimi / DC hattını dahili olarak yönetir; bu nedenle çağıranların yalnızca panel geometrisini, yenileme hızını ve varsa yönlendirme bayraklarını yapılandırması gerekir. Panele özgü ilklendirme (yazmaç dizileri, RAM yazma çerçeveleme) controller anahtar sözcük argümanı aracılığıyla sağlanır – LCD Shield’i sürmek için bir SSD1351 örneği geçin ya da diğer paneller için kendi denetleyici sınıfınızı uygulayın.

Çerçeveler, bir image.Image ile write() çağrılarak sunulur. Sürücü kaynağı RGB565’e dönüştürür ve ölçeklemeyi, ROI’yi, paleti ve yönlendirme dönüşümlerini dahili olarak uygular; böylece çağıranın görüntüyü önceden boyutlandırması gerekmez. Arka aydınlatma parlaklığı basit bir aç/kapa GPIO’su olarak bırakılabilir (varsayılan) ya da backlight anahtar sözcük argümanı olarak biri geçilerek DACBacklight / PWMBacklight ile sürülebilir.

Örnek – kamerayı OpenMV LCD Shield’in SSD1351 OLED’ine yansıtmak:

import csi
import display

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize((128, 160))        # matches the SSD1351 panel

lcd = display.SPIDisplay(controller=display.SSD1351())

while True:
    lcd.write(csi0.snapshot())

Kurucular

class display.SPIDisplay(width: int = 128, height: int = 160, refresh: int = 60, bgr: bool = False, byte_swap: bool = False, hmirror: bool = True, vflip: bool = True, triple_buffer: bool | None = None, *, controller: object | None = None, backlight: object | None = None)

width SPI LCD genişliği, piksel cinsinden (1..32767).

height SPI LCD yüksekliği, piksel cinsinden (1..32767).

refresh LCD yenileme hızı, hertz cinsinden (1..120). SPI saat hızını denetler.

bgr kırmızı ve mavi kanalları değiş tokuş etmek için True olarak ayarlayın.

byte_swap LCD’ye gönderilen RGB565 piksel baytlarını değiş tokuş etmek için True olarak ayarlayın.

hmirror ekran çıkışını yatay olarak aynalamak için True olarak ayarlayın.

vflip ekran çıkışını dikey olarak çevirmek için True olarak ayarlayın.

triple_buffer True ise, RAM’de ekran boyutunun 3 katı maliyetiyle ekran güncellemelerini bloklamayan hale getirir. Varsayılan değer karta bağlıdır (SDRAM’li kartlarda açık).

controller yalnızca anahtar sözcük. Ekranla birlikte ilklendirmek üzere bir denetleyici yonga sınıfı örneği geçin. Sağlandığında, yerleşik komutlar yerine denetleyicinin init, display_on, display_off ve ram_write yöntemleri (varsa) çağrılır.

backlight yalnızca anahtar sözcük. Kullanılacak bir arka aydınlatma denetleyici modülü geçin. Varsayılan olarak arka aydınlatma bir GPIO pini üzerinden denetlenir.

width() int

Ekranın genişliğini döndürür.

height() int

Ekranın yüksekliğini döndürür.

refresh() int

Yenileme hızını döndürür.

bgr() bool

Kırmızı ve mavi kanalların değiş tokuş edilip edilmediğini döndürür.

byte_swap() bool

RGB565 piksellerinin baytları ters çevrilmiş olarak gönderilip gönderilmediğini döndürür.

triple_buffer() bool

Üçlü arabelleğin (triple buffering) etkin olup olmadığını döndürür.

framesize() int

Yapılandırılmış framesize tanımlayıcısını döndürür.

write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

image görüntüsünü sol üst köşesi (x, y) konumunda olacak şekilde görüntüler. Bir görüntü yerine bir yol dizesi geçilerek görüntü tek adımda yüklenip çizilebilir.

x_scale x ekseni ölçek çarpanı. Negatif değerler yatay olarak çevirir. y_scale atlanırsa en boy oranını korumak için x_scale değerini izler.

y_scale y ekseni ölçek çarpanı. Negatif değerler dikey olarak çevirir (triple_buffer=True gerektirir). x_scale atlanırsa y_scale değerini izler.

roi çizilecek kaynak görüntünün ilgi bölgesi (ROI) dikdörtgeni (x, y, w, h).

rgb_channel bir RGB565 kaynak görüntüsünden ayıklanacak RGB kanalı (0=R, 1=G, 2=B, -1=tümü). Aralık: -1..2.

alpha görüntünün opaklığı. 0 tümüyle saydamdır (siyah), 255 opaktır. Aralık: 0..255.

color_palette renk paleti sabiti (örneğin image.PALETTE_RAINBOW) ya da kaynağın gri tonlama değeri üzerinde renk arama tablosu olarak kullanılan 256 piksellik bir RGB565 görüntüsü. rgb_channel ayıklamasından sonra uygulanır.

alpha_palette kaynak gri tonlama değerine göre alpha değerini modüle eden, piksel başına alfa arama tablosu olarak kullanılan 256 piksellik bir gri tonlama görüntüsü.

hint bayrakların mantıksal VEYA’sı:

clear(display_off: bool = False) None

LCD ekranını siyaha temizler.

display_off True ise, çerçeve arabelleğini temizlemek yerine ekran mantığını kapatır. Ardından arka aydınlatma da devre dışı bırakılmalıdır.

backlight(value: int | None = None) int | None

value ile arka aydınlatma yoğunluğunu ayarlar (0=kapalı..100=tam). Argümansız çağrıldığında geçerli arka aydınlatma değerini döndürür.

Kuruluş sırasında bir DACBacklight veya PWMBacklight denetleyicisi geçilmedikçe, arka aydınlatma bir GPIO pini olarak sürülür ve yalnızca 0 (kapalı) ile sıfırdan farklı (açık) arasında gider.

bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None

cmd komutunu SPI veri yolu üzerinden ekrana gönderir, isteğe bağlı olarak ardından args (bir int bayt veya bir bayt arabelleği) ile. dcs, denetleyici tarafından desteklendiğinde DCS çerçevelemeyi seçer.

bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray

cmd komutunu SPI veri yolu üzerinden gönderir ve geri len bayt okuyarak bunları bir bytearray olarak döndürür. args okumadan önce isteğe bağlı olarak yazılır (bir int bayt veya bir bayt arabelleği). dcs, denetleyici tarafından desteklendiğinde DCS çerçevelemeyi seçer.

ioctl(cmd: int, arg: object | None = None) object

İsteğe bağlı arg ile denetleyiciye özgü bir ioctl cmd komutu yayınlar. Altta yatan ekran ioctl’i desteklemiyorsa ValueError yükseltir.