class DSIDisplay – DSI kijelzőmeghajtó¶
A DSIDisplay osztály a MIPI-DSI paneleket az STM32 DSI host vezérlőn keresztül hajtja meg. A MIPI DSI egy csomagalapú soros kijelzőprotokoll, amely egy órajel-sávot és egy vagy több adatsávot használ differenciális párként, ami lehetővé teszi, hogy nagy felbontású tartalmat (akár 1080p-ig) sokkal kevesebb vezetéken vigyen át, mint a 24 bites párhuzamos RGB. A képpontok közvetlenül egy SDRAM-alapú framebufferből áramlanak a kiválasztott frissítési frekvencián, így a CPU nem vesz részt a frissítésben.
A panel felbontása a framesize argumentumon keresztül választható ki a display modul konstansainak használatával (QVGA, VGA, HD, FHD, …). A panelspecifikus inicializálási szekvenciák a controller kulcsszó-argumentumon keresztül csatlakoztathatók – a ST7701 lefedi a gyakori ST7701-alapú 480x800-as DSI paneleket. A DCS parancsok sávon kívül adhatók ki a bus_write() / bus_read() metódusokkal. A háttérvilágítás fényereje alapértelmezés szerint egyszerű GPIO-ként van meghajtva, vagy a DACBacklight / PWMBacklight által, ha backlight ként adják át.
A képkockák megjelenítése a write() metódus egy image.Image objektummal való meghívásával történik. A meghajtó belsőleg kezeli az RGB konverziót, a méretezést, a ROI-t, a palettát és a tájolási transzformációkat.
Példa – a kamera tükrözése egy ST7701-alapú 480x800-as DSI panelre:
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)
Konstruktorok¶
- 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)¶
A
framesizea standard támogatott felbontások egyike (pl.display.FWVGA).A
refreshbeállítja a képernyő frissítési frekvenciáját hertzben. Az érvényes tartomány 30 és 120 között van. Ez vezérli a DSI LCD órajelet.A
display_onengedélyezi a kijelzőt.A
triple_bufferhárom framebuffert foglal le, hogy lehetővé tegye a szakadásmentes kijelzőfrissítéseket. Awrite()metódusban a függőleges tükrözéshez szükséges.A
portraitfelcseréli a framesize szélességét és magasságát.A
channela kijelzővel való kommunikációhoz használandó virtuális MIPI DSI csatorna.A
controllerAdja át itt a vezérlőchip osztályát, hogy a kijelzővel együtt inicializálja. Pl.display.ST7701(), amely egy standard kijelzővezérlő a MIPI DSI kijelzőkhöz.A
backlightAdja meg a használandó háttérvilágítás-vezérlő modult. Alapértelmezés szerint a háttérvilágítás egy GPIO lábon keresztül lesz vezérelve.- deinit() None¶
Felszabadítja az osztály által használt I/O lábakat és RAM-ot. Ez automatikusan meghívódik megsemmisítéskor.
- 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¶
Megjelenít egy
imageképet, amelynek bal felső sarka azx,yhelyen kezdődik.Az
imagelehet egy elérési útvonalat tartalmazó karakterlánc kép objektum helyett, hogy automatikusan betöltse a képet a lemezről. Pl.write("test.jpg").Az
x_scaleszabályozza, hogy a megjelenített kép mennyire legyen méretezve x irányban (float). Ha ez az érték negatív, a kép vízszintesen lesz tükrözve. Ha azy_scalenincs megadva, akkor azx_scaleértékéhez igazodik a képarány megőrzése érdekében.Az
y_scaleszabályozza, hogy a megjelenített kép mennyire legyen méretezve y irányban (float). Ha ez az érték negatív, a kép függőlegesen lesz tükrözve. A függőleges tükrözésheztriple_buffer=Trueszükséges. Ha azx_scalenincs megadva, akkor azy_scaleértékéhez igazodik.A
roia megjelenítendő kép érdeklődési terület téglalapja (x, y, w, h) tuple formájában.Az
rgb_channelaz az RGB csatorna (0=R, 1=G, 2=B), amelyet ki kell nyerni egy RGB565 képből és szürkeárnyalatosan kell megjeleníteni a kijelzőn. A-1letiltja a kinyerést. Az érvényes tartomány -1 és 2 között van.Az
alphaszabályozza, hogy a kép mennyire átlátszatlan. A 255 átlátszatlan képet jelenít meg, az alacsonyabb értékek a fekete felé keverik, a 0 pedig teljesen fekete képet eredményez. Az érvényes tartomány 0 és 255 között van.A
color_palettelehet egy színpaletta enum vagy egy 256 képpontos RGB565 kép, amelyet a bemeneti kép szürkeárnyalatos értékén színkereső táblázatként használ. Azrgb_channelkinyerés után kerül alkalmazásra.Az
alpha_palettelehet egy 256 képpontos szürkeárnyalatos kép, amelyet alfa kereső táblázatként használ, amely azalphaértéket bemeneti képpontonkénti szürkeárnyalatos érték szerint modulálja. Azrgb_channelkinyerés után kerül alkalmazásra.A
hinta következő jelzők logikai VAGY kapcsolata:image.AREA: Területi méretezés használata kicsinyítéskor a legközelebbi szomszéd alapértelmezett módja helyett.image.BILINEAR: Bilineáris méretezés használata a legközelebbi szomszéd alapértelmezett méretezése helyett.image.BICUBIC: Bikubikus méretezés használata a legközelebbi szomszéd alapértelmezett méretezése helyett.image.CENTER: A kijelzőn rajzolt kép középre igazítása. Ez a méretezés után kerül alkalmazásra.image.HMIRROR: A kép vízszintes tükrözése.image.VFLIP: A kép függőleges tükrözése.image.TRANSPOSE: A kép transzponálása (x/y felcserélése).image.EXTRACT_RGB_CHANNEL_FIRST: Az rgb_channel kinyerés elvégzése a méretezés előtt.image.APPLY_COLOR_PALETTE_FIRST: A színpaletta alkalmazása a méretezés előtt.image.SCALE_ASPECT_KEEP: A rajzolt kép méretezése úgy, hogy beleférjen a kijelzőbe.image.SCALE_ASPECT_EXPAND: A rajzolt kép méretezése úgy, hogy kitöltse a kijelzőt (vágást eredményez).image.SCALE_ASPECT_IGNORE: A rajzolt kép méretezése úgy, hogy kitöltse a kijelzőt (nyújtást eredményez).image.ROTATE_90: A kép elforgatása 90 fokkal (ez csak VFLIP | TRANSPOSE).image.ROTATE_180: A kép elforgatása 180 fokkal (ez csak HMIRROR | VFLIP).image.ROTATE_270: A kép elforgatása 270 fokkal (ez csak HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Feketére törli az LCD framebuffert.
A
display_offha True, kikapcsolja a kijelző logikáját a framebuffer törlése helyett.
- backlight(value: int | None = None) int¶
Beállítja az LCD háttérvilágítás tompítási értékét, 0 (ki) és 100 (be) között. Adja meg argumentumok nélkül az aktuális háttérvilágítás-érték lekérdezéséhez.
Hacsak nem ad át egy
DACBacklightvagyPWMBacklightvezérlőt a konstruktornak, a háttérvilágítás GPIO lábként van vezérelve, és csak 0 (ki) és nem nulla (be) között fog váltani.
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
DSI parancs
cmdküldése a kijelzőnek.Az
argsegy opcionális egész szám vagy puffer, amely a parancs paramétereit tartalmazza.A
dcsha True, a parancsot DCS (Display Command Set) csomagként küldi.
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytes¶
lenbájt olvasása a kijelzőről a DSI parancscmdhasználatával.Az
argsegy opcionális egész szám vagy puffer, amely a parancs paramétereit tartalmazza.A
dcsha True, a parancsot DCS (Display Command Set) csomagként küldi.