class DSIDisplay – DSI Ekran Sürücüsü¶
DSIDisplay sınıfı, MIPI-DSI panellerini STM32 DSI ana denetleyicisi üzerinden sürer. MIPI DSI, diferansiyel çiftler olarak bir saat hattı ve bir veya daha fazla veri hattı kullanan paketlenmiş bir seri ekran protokolüdür; bu da yüksek çözünürlüklü içeriği (1080p’ye kadar) 24-bit paralel RGB’ye kıyasla çok daha az kabloyla taşımasını sağlar. Pikseller, seçilen yenileme hızında doğrudan SDRAM destekli bir çerçeve arabelleğinden akar, bu nedenle yenileme işlemine CPU dahil olmaz.
Panel çözünürlüğü, display modülündeki sabitler (QVGA, VGA, HD, FHD, …) kullanılarak framesize aracılığıyla seçilir. Panele özgü başlatma dizileri controller anahtar argümanı aracılığıyla takılır – ST7701 yaygın ST7701 tabanlı 480x800 DSI panellerini kapsar. DCS komutları bus_write() / bus_read() ile bant dışında verilebilir. Arka aydınlatma parlaklığı varsayılan olarak basit bir GPIO olarak sürülür veya backlight olarak geçirilirse DACBacklight / PWMBacklight tarafından sürülür.
Çerçeveler, bir image.Image ile write() çağrılarak sunulur. Sürücü, RGB dönüşümünü, ölçeklemeyi, ROI’yi, paleti ve yönlendirme dönüşümlerini dahili olarak yönetir.
Örnek – kamerayı ST7701 tabanlı 480x800 DSI paneline yansıtma:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.DSIDisplay(framesize=display.TFWVGA,
controller=display.ST7701())
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
Yapıcılar¶
- class display.DSIDisplay(framesize: int = FWVGA, *, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, channel: int = 0, controller: Any | None = None, backlight: Any | None = None)¶
framesizeStandart desteklenen çözünürlüklerden biri (ör.display.FWVGA).refreshEkran yenileme hızını hertz cinsinden ayarlar. Geçerli aralık 30 ile 120 arasındadır. Bu, DSI LCD saatini denetler.display_onEkranı etkinleştirir.triple_bufferYırtılmasız ekran güncellemelerine izin vermek için üç çerçeve arabelleği ayırır.write()içinde dikey çevirme için gereklidir.portraitÇerçeve boyutunun genişlik ve yüksekliğini değiştirir.channelEkranla iletişim kurmak için kullanılacak sanal MIPI DSI kanalı.controllerEkranla birlikte başlatmak için denetleyici çip sınıfını buraya geçirin. Ör. MIPI DSI ekranları için standart bir ekran denetleyicisi olandisplay.ST7701().backlightKullanılacak bir arka aydınlatma denetleyicisi modülü belirtin. Varsayılan olarak arka aydınlatma bir GPIO pini üzerinden denetlenir.- deinit() None¶
Sınıf tarafından kullanılan G/Ç pinlerini ve RAM’i serbest bırakır. Bu, yok edilme sırasında otomatik olarak çağrılı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: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
Sol üst köşesi
x,ykonumundan başlayan birimagegörüntüler.image, görüntüyü diskten otomatik olarak yüklemek için bir görüntü nesnesi yerine bir yol dizesi olabilir. Ör.write("test.jpg").x_scalegörüntülenen görüntünün x yönünde ne kadar ölçekleneceğini denetler (float). Bu değer negatifse görüntü yatay olarak çevrilir.y_scalebelirtilmezse en boy oranını korumak içinx_scaleile eşleşir.y_scalegörüntülenen görüntünün y yönünde ne kadar ölçekleneceğini denetler (float). Bu değer negatifse görüntü dikey olarak çevrilir. Dikey çevirmetriple_buffer=Truegerektirir.x_scalebelirtilmezsey_scaleile eşleşir.roigörüntülenecek görüntünün ilgi bölgesi dikdörtgen demetidir (x, y, w, h).rgb_channel, bir RGB565 görüntüsünden çıkarılıp ekranda gri tonlamalı olarak işlenecek RGB kanalıdır (0=R, 1=G, 2=B).-1çıkarmayı devre dışı bırakır. Geçerli aralık -1 ile 2 arasındadır.alphagörüntünün ne kadar opak olduğunu denetler. 255 opak bir görüntü görüntüler, daha düşük değerler siyaha doğru karıştırır ve 0 tamamen siyah bir görüntü üretir. Geçerli aralık 0 ile 255 arasındadır.color_palettebir renk paleti enum’ı veya giriş görüntüsünün gri tonlama değeri üzerinde renk arama tablosu olarak kullanılacak 256 piksellik bir RGB565 görüntüsü olabilir.rgb_channelçıkarımından sonra uygulanır.alpha_paletteher giriş pikselinin gri tonlama değerine görealphadeğerini modüle eden bir alfa arama tablosu olarak kullanılan 256 piksellik bir gri tonlamalı görüntü olabilir.rgb_channelçıkarımından sonra uygulanır.hintbayrakların mantıksal OR’udur:image.AREA: Küçültme sırasında varsayılan en yakın komşu yerine alan ölçeklemesi kullanır.image.BILINEAR: Varsayılan en yakın komşu ölçeklemesi yerine çift doğrusal ölçekleme kullanır.image.BICUBIC: Varsayılan en yakın komşu ölçeklemesi yerine çift kübik ölçekleme kullanır.image.CENTER: Çizilen görüntüyü ekranda ortalar. Bu, ölçeklemeden sonra uygulanır.image.HMIRROR: Görüntüyü yatay olarak yansıtır.image.VFLIP: Görüntüyü dikey olarak çevirir.image.TRANSPOSE: Görüntüyü devrik alır (x/y değiştirir).image.EXTRACT_RGB_CHANNEL_FIRST: rgb_channel çıkarımını ölçeklemeden önce yapar.image.APPLY_COLOR_PALETTE_FIRST: Renk paletini ölçeklemeden önce uygular.image.SCALE_ASPECT_KEEP: Çizilen görüntüyü ekranın içine sığacak şekilde ölçekler.image.SCALE_ASPECT_EXPAND: Çizilen görüntüyü ekranı dolduracak şekilde ölçekler (kırpmaya neden olur).image.SCALE_ASPECT_IGNORE: Çizilen görüntüyü ekranı dolduracak şekilde ölçekler (esnemeye neden olur).image.ROTATE_90: Görüntüyü 90 derece döndürür (bu sadece VFLIP | TRANSPOSE’dur).image.ROTATE_180: Görüntüyü 180 derece döndürür (bu sadece HMIRROR | VFLIP’tir).image.ROTATE_270: Görüntüyü 270 derece döndürür (bu sadece HMIRROR | TRANSPOSE’dur).
- clear(display_off: bool = False) None¶
LCD çerçeve arabelleğini siyaha temizler.
display_offTrue ise çerçeve arabelleğini temizlemek yerine ekran mantığını kapatır.
- backlight(value: int | None = None) int¶
LCD arka aydınlatma kısma değerini 0 (kapalı) ile 100 (açık) arasında ayarlar. Geçerli arka aydınlatma değerini almak için hiçbir argüman geçirmeyin.
Yapıcıya bir
DACBacklightveyaPWMBacklightdenetleyicisi geçirilmediği sürece, arka aydınlatma bir GPIO pini olarak denetlenir ve yalnızca 0 (kapalı) ile sıfır olmayan (açık) değerler arasında değişir.
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Ekrana DSI komutu
cmdgönderir.argskomut parametrelerini içeren isteğe bağlı bir tam sayı veya arabellektir.dcsTrue ise komutu bir DCS (Display Command Set) paketi olarak gönderir.