class RGBDisplay – Driver pentru afișaje RGB¶
Clasa RGBDisplay controlează LCD-uri RGB paralele pe 24 de biți prin intermediul controllerului STM32 LTDC (LCD-TFT). LTDC transmite pixelii direct dintr-un framebuffer aflat în SDRAM la rata de ceas a pixelilor aleasă, astfel încât sunt posibile rate de reîmprospătare mari (până la 120 Hz) fără implicarea CPU-ului.
Pe OpenMV Cam Pure Thermal, aceeași magistrală paralelă pe 24 de biți alimentează și un codificator HDMI TFP410 integrat, astfel că ieșirea sa HDMI este controlată tot prin această clasă – folosiți display_on=False pentru a stinge LCD-ul integrat în timp ce continuați să transmiteți pixeli către codificator.
Rezoluția panoului este selectată prin framesize folosind constantele definite în modulul display (QVGA, VGA, WVGA, HD, FHD, …). Secvențele de inițializare specifice fiecărui panou sunt conectate prin argumentul cu cuvânt cheie controller (de exemplu ST7701 pentru panouri bazate pe ST7701). Luminozitatea iluminării de fundal este controlată în mod implicit ca un simplu GPIO sau prin DACBacklight / PWMBacklight dacă unul dintre acestea este transmis ca backlight.
Cadrele sunt afișate apelând write() cu o image.Image. Driverul gestionează intern conversia RGB, scalarea, ROI, paleta și transformările de orientare.
Exemplu – oglindirea camerei pe un panou de 480x272 la 60 Hz:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
Constructori¶
- class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)¶
framesizeUna dintre rezoluțiile standard acceptate (consultați constantele modululuidisplay).refreshSetează rata de reîmprospătare a ecranului în herți (30-120). Aceasta controlează rata de ceas a pixelilor LCD-ului RGB.display_onActivează ieșirea LCD locală. TransmitețiFalsepe OpenMV Cam Pure Thermal, a cărui magistrală paralelă pe 24 de biți controlează atât LCD-ul integrat, cât și codificatorul HDMI TFP410 – aceasta menține LCD-ul integrat stins în timp ce continuă să alimenteze codificatorul HDMI. Pe celelalte OpenMV Cam nu există o ieșire partajată, iar aceasta poate fi lăsată la valoarea sa implicită.triple_bufferDacă esteTrue, face actualizările ecranului neblocante, cu prețul triplării dimensiunii afișajului în RAM.portraitInterschimbă lățimea și înălțimea framesize.controllerTransmiteți o instanță a unei clase de cip controller pentru a o inițializa împreună cu afișajul.backlightTransmiteți o instanță a unui modul controller de iluminare de fundal pe care să o folosiți. În mod implicit, iluminarea de fundal va fi controlată prin intermediul unui pin GPIO.- deinit() None¶
Eliberează pinii de I/O și RAM-ul utilizate de clasă. Acest lucru este apelat automat la distrugere.
- clear(display_off: bool = False) None¶
Șterge ecranul LCD, făcându-l negru.
display_offdacă esteTrue, oprește logica de afișare în loc să șteargă framebufferul, făcându-l negru. Ar trebui de asemenea să stingeți iluminarea de fundal după aceasta pentru a vă asigura că ecranul devine negru, deoarece multe afișaje sunt albe atunci când doar iluminarea de fundal este pornită.
- 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 controller
DACBacklightsauPWMBacklighta fost 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).
- 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 pozițiax,y. În locul unui obiect imagine se poate transmite și un șir de cale pentru a încărca automat imaginea de pe disc.x_scalecontrolează cât de mult este scalată imaginea afișată pe direcția x. Dacă această valoare este negativă, imaginea va fi răsturnată pe 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ă pe direcția y. Dacă această valoare este negativă, imaginea va fi răsturnată pe verticală (necesită triplu buffering). Dacăx_scalenu este specificat, va corespunde cuy_scalepentru a menține raportul de aspect.roieste tuplul dreptunghiular al regiunii de interes(x, y, w, h)din imaginea care urmează să fie afișată.rgb_channeleste canalul RGB (0=R, 1=G, 2=B) care urmează să fie extras dintr-o imagine RGB565 și redat în tonuri de gri.-1dezactivează extragerea canalului.alphacontrolează cât de opacă este imaginea, de la 0 (complet transparentă / neagră) la 255 (opacă).color_paletteo imagine RGB565 de 256 de pixeli în total, utilizată ca tabel de căutare a culorilor pe valoarea în tonuri de gri a imaginii de intrare. Se aplică după extragereargb_channel. Poate fi de asemenea o enumerare de paletă (de exempluimage.PALETTE_RAINBOW).alpha_paletteo imagine GRAYSCALE de 256 de pixeli în total, utilizată ca tabel de căutare a transparenței per pixel pe valoarea în tonuri de gri a imaginii de intrare. Se aplică după extragereargb_channel.hinteste un SAU logic al indicatorilor:image.AREA: Folosește scalarea pe arie la reducerea dimensiunii în loc de cea de tip nearest neighbor.image.BILINEAR: Folosește scalarea biliniară în loc de cea de tip nearest neighbor.image.BICUBIC: Folosește scalarea bicubică în loc de cea de tip nearest neighbor.image.CENTER: Centrează imaginea pe afișaj (aplicat după scalare).image.HMIRROR: Oglindește imaginea pe orizontală.image.VFLIP: Răstoarnă imaginea pe verticală.image.TRANSPOSE: Transpune imaginea (interschimbă x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Efectuează extragereargb_channelînainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplicăcolor_paletteînainte de scalare.image.SCALE_ASPECT_KEEP: Scalează imaginea pentru a încăpea în interiorul afișajului.image.SCALE_ASPECT_EXPAND: Scalează imaginea pentru a umple afișajul (cu decupare).image.SCALE_ASPECT_IGNORE: Scalează imaginea pentru a umple afișajul (cu întindere).image.ROTATE_90: Rotește cu 90 de grade (VFLIP | TRANSPOSE).image.ROTATE_180: Rotește cu 180 de grade (HMIRROR | VFLIP).image.ROTATE_270: Rotește cu 270 de grade (HMIRROR | TRANSPOSE).