class SPIDisplay – SPI kijelző-illesztőprogram

A SPIDisplay osztály kis méretű, SPI-csatlakozású TFT és OLED paneleket vezérel – leggyakrabban az OpenMV LCD Shieldön található SSD1351 128x160 RGB OLED-et. Az illesztőprogram belsőleg birtokolja az SPI buszt és egy GPIO chip-select / DC vonalat, így a hívóknak csak a panel geometriáját, a frissítési frekvenciát és az esetleges tájolási flag-eket kell beállítaniuk. A panelspecifikus inicializálás (regiszter-szekvenciák, RAM-írás keretezése) a controller kulcsszavas argumentumon keresztül adható meg – adjon át egy SSD1351 példányt az LCD Shield vezérléséhez, vagy implementáljon saját vezérlőosztályt más panelekhez.

A képkockák megjelenítése a write() hívásával történik egy image.Image objektummal. Az illesztőprogram belsőleg RGB565-re alakítja a forrást, és alkalmazza a méretezést, a ROI-t, a palettát és a tájolási transzformációkat, így a hívónak nem kell előre méreteznie a képet. A háttérvilágítás fényereje meghagyható egyszerű ki/be GPIO-ként (alapértelmezett), vagy a DACBacklight / PWMBacklight által vezérelhető, ha azt a backlight kulcsszavas argumentumban adjuk át.

Példa – a kamera tükrözése az OpenMV LCD Shield SSD1351 OLED-jére:

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

Konstruktorok

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 szélessége képpontban (1..32767).

height SPI LCD magassága képpontban (1..32767).

refresh LCD frissítési frekvenciája hertzben (1..120). Az SPI órajel sebességét vezérli.

bgr állítsa True értékre a vörös és kék csatornák felcseréléséhez.

byte_swap állítsa True értékre az LCD-re küldött RGB565 képpont-bájtok felcseréléséhez.

hmirror állítsa True értékre a kijelző kimenetének vízszintes tükrözéséhez.

vflip állítsa True értékre a kijelző kimenetének függőleges tükrözéséhez.

triple_buffer ha True, a képernyő frissítései nem blokkolóvá válnak, cserébe a megjelenítési méret háromszorosát igénylik a RAM-ban. Az alapértelmezett a kártyától függ (SDRAM-mal rendelkező kártyákon bekapcsolt).

controller csak kulcsszavas. Adjon át egy vezérlőchip osztálypéldányt, hogy a kijelzővel együtt inicializálódjon. Ha meg van adva, a vezérlő init, display_on, display_off és ram_write metódusai (ha léteznek) hívódnak meg a beépített parancsok helyett.

backlight csak kulcsszavas. Adjon át egy használandó háttérvilágítás-vezérlő modult. Alapértelmezetten a háttérvilágítás egy GPIO lábon keresztül vezérelhető.

width() int

Visszaadja a képernyő szélességét.

height() int

Visszaadja a képernyő magasságát.

refresh() int

Visszaadja a frissítési frekvenciát.

bgr() bool

Visszaadja, hogy a vörös és kék csatornák fel vannak-e cserélve.

byte_swap() bool

Visszaadja, hogy az RGB565 képpontok bájt-fordítva kerülnek-e elküldésre.

triple_buffer() bool

Visszaadja, hogy a hármas pufferelés engedélyezve van-e.

framesize() int

Visszaadja a konfigurált framesize azonosítót.

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

Megjeleníti az image képet a bal felső sarkával az (x, y) helyen. Kép helyett elérési út karakterlánc is átadható, hogy egyetlen lépésben betöltse és kirajzolja.

x_scale x tengely menti méretezési tényező. A negatív értékek vízszintesen tükröznek. Ha az y_scale el van hagyva, az x_scale értékét követi a képarány megőrzése érdekében.

y_scale y tengely menti méretezési tényező. A negatív értékek függőlegesen tükröznek (triple_buffer=True szükséges). Ha az x_scale el van hagyva, az y_scale értékét követi.

roi a forráskép kirajzolandó érdeklődési terület téglalapja (x, y, w, h).

rgb_channel az RGB565 forrásképből kinyerendő RGB csatorna (0=R, 1=G, 2=B, -1=mind). Tartomány: -1..2.

alpha a kép átlátszatlansága. A 0 teljesen átlátszó (fekete), a 255 átlátszatlan. Tartomány: 0..255.

color_palette színpaletta enum (pl. image.PALETTE_RAINBOW) vagy egy 256 képpontos RGB565 kép, amely a forrás szürkeárnyalatos értékén színkereső táblaként szolgál. Az rgb_channel kinyerés után kerül alkalmazásra.

alpha_palette 256 képpontos szürkeárnyalatos kép, amely képpontonkénti alfa-kereső táblaként szolgál, és a forrás szürkeárnyalatos értéke alapján modulálja az alpha értékét.

hint a következő flag-ek logikai VAGY-a:

clear(display_off: bool = False) None

Feketére törli az LCD képernyőt.

display_off ha True, kikapcsolja a kijelző logikáját ahelyett, hogy a képkocka-puffert törölné. Ezután a háttérvilágítást is le kell tiltani.

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

value megadásával beállítja a háttérvilágítás intenzitását (0=ki..100=teljes). Argumentumok nélkül visszaadja az aktuális háttérvilágítási értéket.

Hacsak nem adnak át DACBacklight vagy PWMBacklight vezérlőt a konstruáláskor, a háttérvilágítás GPIO lábként vezérelhető, és csak 0 (ki) és nem nulla (be) között váltható.

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

Elküldi a cmd parancsot a kijelzőnek az SPI buszon keresztül, opcionálisan args (egy int bájt vagy egy bájtpuffer) követésével. A dcs a DCS keretezést választja ki, ha a vezérlő támogatja.

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

Elküldi a cmd parancsot az SPI buszon keresztül, és len bájtot olvas vissza, amelyeket bytearray formájában ad vissza. Az args opcionálisan kerül kiírásra az olvasás előtt (egy int bájt vagy egy bájtpuffer). A dcs a DCS keretezést választja ki, ha a vezérlő támogatja.

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

Végrehajt egy vezérlőspecifikus ioctl cmd parancsot opcionális arg argumentummal. ValueError kivételt vált ki, ha az alapul szolgáló kijelző nem támogatja az ioctl-t.