class DSIDisplay – Driver de afișaj DSI¶
Clasa DSIDisplay acționează panourile MIPI-DSI prin controlerul gazdă DSI al STM32. MIPI DSI este un protocol serial de afișare bazat pe pachete care folosește o linie de ceas plus una sau mai multe linii de date sub formă de perechi diferențiale, ceea ce îi permite să transporte conținut de înaltă rezoluție (până la 1080p) prin mult mai puține fire decât RGB-ul paralel pe 24 de biți. Pixelii sunt transmiși direct dintr-un tampon de cadre (frame buffer) susținut de SDRAM la rata de reîmprospătare aleasă, astfel încât procesorul nu este implicat în reîmprospătare.
Rezoluția panoului este selectată prin framesize folosind constantele din modulul display (QVGA, VGA, HD, FHD, …). Secvențele de inițializare specifice panoului sunt conectate prin argumentul cu cuvânt-cheie controller – ST7701 acoperă panourile DSI 480x800 obișnuite bazate pe ST7701. Comenzile DCS pot fi emise în afara benzii prin bus_write() / bus_read(). Luminozitatea iluminării de fundal este acționată implicit ca un simplu GPIO sau prin DACBacklight / PWMBacklight dacă este transmisă ca backlight.
Cadrele sunt prezentate apelând write() cu un image.Image. Driverul gestionează intern conversia RGB, scalarea, ROI, paleta și transformările de orientare.
Exemplu – oglindirea camerei pe un panou DSI 480x800 bazat pe ST7701:
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)
Constructori¶
- 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)¶
framesizeUna dintre rezoluțiile standard acceptate (de ex.display.FWVGA).refreshSetează rata de reîmprospătare a ecranului în herți. Intervalul valid este de la 30 la 120. Aceasta controlează ceasul LCD-ului DSI.display_onActivează afișajul.triple_bufferAlocă trei tampoane de cadre pentru a permite actualizări ale afișajului fără efect de rupere. Necesar pentru răsturnarea verticală înwrite().portraitInterschimbă lățimea și înălțimea framesize.channelCanalul virtual MIPI DSI folosit pentru a comunica cu afișajul.controllerTransmiteți aici clasa cipului controler pentru a-l inițializa împreună cu afișajul. De ex.display.ST7701(), care este un controler de afișaj standard pentru afișaje MIPI DSI.backlightSpecifică un modul de controler de iluminare de fundal care va fi folosit. În mod implicit, iluminarea de fundal va fi controlată printr-un pin GPIO.- deinit() None¶
Eliberează pinii de I/O și memoria RAM folosite de clasă. Aceasta este apelată automat la distrugere.
- 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¶
Afișează o
imageal cărei colț din stânga sus începe la locațiax,y.imagepoate fi un șir de cale în loc de un obiect imagine pentru a încărca automat imaginea de pe disc. De ex.write("test.jpg").x_scalecontrolează cât de mult este scalată imaginea afișată în direcția x (float). Dacă această valoare este negativă, imaginea va fi răsturnată orizontal. Dacăy_scalenu este specificat, va corespunde cux_scalepentru a menține raportul de aspect.y_scalecontrolează cât de mult este scalată imaginea afișată în direcția y (float). Dacă această valoare este negativă, imaginea va fi răsturnată vertical. Răsturnarea verticală necesitătriple_buffer=True. Dacăx_scalenu este specificat, va corespunde cuy_scale.roieste tuplul dreptunghiular al regiunii de interes (x, y, w, h) din imaginea de afișat.rgb_channeleste canalul RGB (0=R, 1=G, 2=B) care va fi extras dintr-o imagine RGB565 și redat pe afișaj în tonuri de gri.-1dezactivează extragerea. Intervalul valid este de la -1 la 2.alphacontrolează cât de opacă este imaginea. 255 afișează o imagine opacă, valorile mai mici amestecă spre negru, iar 0 produce o imagine complet neagră. Intervalul valid este de la 0 la 255.color_palettepoate fi un enum de paletă de culori sau o imagine RGB565 de 256 de pixeli care va fi folosită ca tabel de căutare a culorilor pe baza valorii de tonuri de gri a imaginii de intrare. Aplicată după extragereargb_channel.alpha_palettepoate fi o imagine în tonuri de gri de 256 de pixeli folosită ca tabel de căutare alpha care moduleazăalphapentru fiecare valoare de tonuri de gri a pixelului de intrare. Aplicată după extragereargb_channel.hinteste un SAU logic al indicatorilor:image.AREA: Folosește scalarea pe arie la micșorare în loc de implicitul celui mai apropiat vecin.image.BILINEAR: Folosește scalarea biliniară în loc de scalarea implicită a celui mai apropiat vecin.image.BICUBIC: Folosește scalarea bicubică în loc de scalarea implicită a celui mai apropiat vecin.image.CENTER: Centrează imaginea desenată pe afișaj. Aceasta se aplică după scalare.image.HMIRROR: Oglindește orizontal imaginea.image.VFLIP: Răstoarnă vertical imaginea.image.TRANSPOSE: Transpune imaginea (interschimbă x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Efectuează extragerea rgb_channel înainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplică paleta de culori înainte de scalare.image.SCALE_ASPECT_KEEP: Scalează imaginea desenată pentru a încăpea în interiorul afișajului.image.SCALE_ASPECT_EXPAND: Scalează imaginea desenată pentru a umple afișajul (rezultă în decupare).image.SCALE_ASPECT_IGNORE: Scalează imaginea desenată pentru a umple afișajul (rezultă în întindere).image.ROTATE_90: Rotește imaginea cu 90 de grade (acesta este doar VFLIP | TRANSPOSE).image.ROTATE_180: Rotește imaginea cu 180 de grade (acesta este doar HMIRROR | VFLIP).image.ROTATE_270: Rotește imaginea cu 270 de grade (acesta este doar HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Golește tamponul de cadre al LCD-ului la negru.
display_offdacă este True, oprește logica afișajului în loc să golească tamponul de cadre.
- backlight(value: int | None = None) int¶
Setează valoarea de atenuare a iluminării de fundal a LCD-ului, de la 0 (oprit) la 100 (pornit). Nu transmiteți niciun argument pentru a obține valoarea curentă a iluminării de fundal.
Cu excepția cazului în care un controler
DACBacklightsauPWMBacklighteste transmis constructorului, iluminarea de fundal este controlată ca un pin GPIO și va trece doar de la 0 (oprit) la o valoare diferită de zero (pornit).
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Trimite comanda DSI
cmdcătre afișaj.argseste un întreg sau un tampon (buffer) opțional care conține parametrii comenzii.dcsdacă este True, trimite comanda ca pachet DCS (Display Command Set).
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytes¶
Citește
lenocteți de la afișaj folosind comanda DSIcmd.argseste un întreg sau un tampon (buffer) opțional care conține parametrii comenzii.dcsdacă este True, trimite comanda ca pachet DCS (Display Command Set).