class SPIDisplay – Driver pentru afișaje SPI¶
Clasa SPIDisplay controlează panouri TFT și OLED mici conectate prin SPI – cel mai frecvent OLED-ul RGB SSD1351 de 128x160 de pe OpenMV LCD Shield. Driverul gestionează intern magistrala SPI și o linie GPIO de selecție a cipului / DC, astfel încât apelanții configurează doar geometria panoului, rata de reîmprospătare și eventualii indicatori de orientare. Inițializarea specifică panoului (secvențe de registre, încadrarea scrierii în RAM) este furnizată prin argumentul cu cuvânt cheie controller – transmiteți o instanță SSD1351 pentru a controla LCD Shield-ul sau implementați-vă propria clasă de controller pentru alte panouri.
Cadrele sunt afișate apelând write() cu o image.Image. Driverul convertește sursa în RGB565 și aplică intern scalarea, ROI, paleta și transformările de orientare, astfel încât apelantul nu trebuie să predimensioneze imaginea. Luminozitatea iluminării de fundal poate fi lăsată ca un simplu GPIO de tip pornit/oprit (implicit) sau controlată prin DACBacklight / PWMBacklight transmițând una dintre acestea ca argument cu cuvânt cheie backlight.
Exemplu – oglindirea camerei pe OLED-ul SSD1351 al OpenMV LCD Shield:
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())
Constructori¶
- 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)¶
widthLățimea LCD-ului SPI în pixeli (1..32767).heightÎnălțimea LCD-ului SPI în pixeli (1..32767).refreshRata de reîmprospătare a LCD-ului în herți (1..120). Controlează rata de ceas SPI.bgrsetați la True pentru a interschimba canalele roșu și albastru.byte_swapsetați la True pentru a interschimba octeții pixelilor RGB565 trimiși către LCD.hmirrorsetați la True pentru a oglindi pe orizontală ieșirea afișajului.vflipsetați la True pentru a răsturna pe verticală ieșirea afișajului.triple_bufferdacă este True, face actualizările ecranului neblocante, cu prețul triplării dimensiunii afișajului în RAM. Valoarea implicită depinde de placă (activat pentru plăcile cu SDRAM).controllerdoar cuvânt cheie. Transmiteți o instanță a unei clase de cip controller pentru a o inițializa împreună cu afișajul. Atunci când este furnizată, sunt invocate metodeleinit,display_on,display_offșiram_writeale controllerului (dacă există) în locul comenzilor încorporate.backlightdoar cuvânt cheie. Transmiteți un modul controller de iluminare de fundal pe care să îl folosiți. În mod implicit, iluminarea de fundal este controlată prin intermediul unui pin GPIO.- 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¶
Afișează
imagecu colțul din stânga sus la(x, y). În locul unei imagini se poate transmite un șir de cale pentru a o încărca și desena într-un singur pas.x_scalefactorul de scalare pe axa x. Valorile negative răstoarnă pe orizontală. Dacăy_scaleeste omis, urmeazăx_scalepentru a păstra raportul de aspect.y_scalefactorul de scalare pe axa y. Valorile negative răstoarnă pe verticală (necesitătriple_buffer=True). Dacăx_scaleeste omis, urmeazăy_scale.roidreptunghiul regiunii de interes(x, y, w, h)din imaginea sursă care urmează să fie desenată.rgb_channelcanalul RGB care urmează să fie extras dintr-o imagine sursă RGB565 (0=R, 1=G, 2=B, -1=toate). Interval: -1..2.alphaopacitatea imaginii. 0 este complet transparentă (neagră), 255 este opacă. Interval: 0..255.color_paletteenumerarea paletei de culori (de exempluimage.PALETTE_RAINBOW) sau o imagine RGB565 de 256 de pixeli utilizată ca tabel de căutare a culorilor pe valoarea în tonuri de gri a sursei. Se aplică după extragereargb_channel.alpha_paletteimagine în tonuri de gri de 256 de pixeli utilizată ca tabel de căutare a transparenței per pixel care moduleazăalphaîn funcție de valoarea în tonuri de gri a sursei.hintSAU logic al indicatorilor:image.AREA: Folosește scalarea pe arie la reducerea dimensiunii.image.BILINEAR: Folosește scalarea biliniară.image.BICUBIC: Folosește scalarea bicubică.image.CENTER: Centrează imaginea pe afișaj (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: Aplică extragereargb_channelînainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplicăcolor_paletteînainte de scalare.image.SCALE_ASPECT_KEEP: Scalează pentru a încăpea în interiorul afișajului.image.SCALE_ASPECT_EXPAND: Scalează pentru a umple afișajul (cu decupare).image.SCALE_ASPECT_IGNORE: Scalează 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).
- clear(display_off: bool = False) None¶
Șterge ecranul LCD, făcându-l negru.
display_offdacă este True, oprește logica de afișare în loc să șteargă framebufferul. Iluminarea de fundal ar trebui de asemenea dezactivată ulterior.
- backlight(value: int | None = None) int | None¶
Cu
value, setează intensitatea iluminării de fundal (0=oprit..100=maxim). Fără argumente, returnează valoarea curentă a iluminării de fundal.Cu excepția cazului în care un controller
DACBacklightsauPWMBacklighteste transmis la construcție, iluminarea de fundal este controlată ca un pin GPIO și 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
cmdcătre afișaj prin magistrala SPI, urmat opțional deargs(un octet int sau un buffer de octeți).dcsselectează încadrarea DCS atunci când este acceptată de controller.
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray¶
Trimite
cmdprin magistrala SPI și citește înapoilenocteți, returnându-i ca unbytearray.argseste scris opțional înainte de citire (un octet int sau un buffer de octeți).dcsselectează încadrarea DCS atunci când este acceptată de controller.