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)

width Lățimea LCD-ului SPI în pixeli (1..32767).

height Înălțimea LCD-ului SPI în pixeli (1..32767).

refresh Rata de reîmprospătare a LCD-ului în herți (1..120). Controlează rata de ceas SPI.

bgr setați la True pentru a interschimba canalele roșu și albastru.

byte_swap setați la True pentru a interschimba octeții pixelilor RGB565 trimiși către LCD.

hmirror setați la True pentru a oglindi pe orizontală ieșirea afișajului.

vflip setați la True pentru a răsturna pe verticală ieșirea afișajului.

triple_buffer dacă 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).

controller doar 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 metodele init, display_on, display_off și ram_write ale controllerului (dacă există) în locul comenzilor încorporate.

backlight doar 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.

width() int

Returnează lățimea ecranului.

height() int

Returnează înălțimea ecranului.

refresh() int

Returnează rata de reîmprospătare.

bgr() bool

Returnează dacă canalele roșu și albastru sunt interschimbate.

byte_swap() bool

Returnează dacă pixelii RGB565 sunt trimiși cu octeții inversați.

triple_buffer() bool

Returnează dacă triplul buffering este activat.

framesize() int

Returnează identificatorul framesize configurat.

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ă image cu 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_scale factorul de scalare pe axa x. Valorile negative răstoarnă pe orizontală. Dacă y_scale este omis, urmează x_scale pentru a păstra raportul de aspect.

y_scale factorul de scalare pe axa y. Valorile negative răstoarnă pe verticală (necesită triple_buffer=True). Dacă x_scale este omis, urmează y_scale.

roi dreptunghiul regiunii de interes (x, y, w, h) din imaginea sursă care urmează să fie desenată.

rgb_channel canalul RGB care urmează să fie extras dintr-o imagine sursă RGB565 (0=R, 1=G, 2=B, -1=toate). Interval: -1..2.

alpha opacitatea imaginii. 0 este complet transparentă (neagră), 255 este opacă. Interval: 0..255.

color_palette enumerarea paletei de culori (de exemplu image.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ă extragerea rgb_channel.

alpha_palette imagine î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.

hint SAU logic al indicatorilor:

clear(display_off: bool = False) None

Șterge ecranul LCD, făcându-l negru.

display_off dacă 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 DACBacklight sau PWMBacklight este 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 cmd către afișaj prin magistrala SPI, urmat opțional de args (un octet int sau un buffer de octeți). dcs selectează î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 cmd prin magistrala SPI și citește înapoi len octeți, returnându-i ca un bytearray. args este scris opțional înainte de citire (un octet int sau un buffer de octeți). dcs selectează încadrarea DCS atunci când este acceptată de controller.

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

Emite un ioctl cmd specific controllerului cu arg opțional. Generează ValueError dacă afișajul subiacent nu acceptă ioctl.