class SPIDisplay – upravljački program za SPI zaslon#

Klasa SPIDisplay upravlja malim TFT i OLED pločama priključenima preko SPI-ja – najčešće SSD1351 128x160 RGB OLED na OpenMV LCD Shieldu. Upravljački program interno posjeduje SPI sabirnicu te GPIO liniju za odabir čipa / DC, pa pozivatelji konfiguriraju samo geometriju ploče, frekvenciju osvježavanja i eventualne zastavice orijentacije. Inicijalizacija specifična za ploču (nizovi registara, uokvirivanje upisa u RAM) dostavlja se putem argumenta controller – proslijedite instancu SSD1351 za upravljanje LCD Shieldom, ili implementirajte vlastitu klasu upravljača za ostale ploče.

Sličice se prikazuju pozivom write() s objektom image.Image. Upravljački program pretvara izvor u RGB565 te interno primjenjuje skaliranje, ROI te transformacije palete i orijentacije, pa pozivatelj ne treba unaprijed prilagoditi veličinu slike. Svjetlina pozadinskog osvjetljenja može se ostaviti kao jednostavni uključeno/isključeno GPIO (zadano) ili se njome može upravljati putem DACBacklight / PWMBacklight prosljeđivanjem jednog od njih kao argument backlight.

Primjer – zrcaljenje kamere na SSD1351 OLED OpenMV LCD Shielda:

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())

Konstruktori#

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 Širina SPI LCD-a u pikselima (1..32767).

height Visina SPI LCD-a u pikselima (1..32767).

refresh Frekvencija osvježavanja LCD-a u hercima (1..120). Upravlja brzinom SPI takta.

bgr postavite na True za zamjenu crvenog i plavog kanala.

byte_swap postavite na True za zamjenu bajtova RGB565 piksela koji se šalju LCD-u.

hmirror postavite na True za vodoravno zrcaljenje izlaza zaslona.

vflip postavite na True za okomito okretanje izlaza zaslona.

triple_buffer ako je True, ažuriranja zaslona postaju neblokirajuća uz cijenu 3X veće veličine zaslona u RAM-u. Zadano ovisi o ploči (uključeno za ploče sa SDRAM-om).

controller samo kao ključna riječ. Proslijedite instancu klase upravljačkog čipa kako bi se inicijalizirala zajedno sa zaslonom. Kada se navede, umjesto ugrađenih naredbi pozivaju se metode upravljača init, display_on, display_off i ram_write (ako postoje).

backlight samo kao ključna riječ. Proslijedite modul upravljača pozadinskog osvjetljenja koji će se koristiti. Prema zadanim postavkama pozadinskim osvjetljenjem upravlja se putem GPIO pina.

width() int#

Vraća širinu zaslona.

height() int#

Vraća visinu zaslona.

refresh() int#

Vraća frekvenciju osvježavanja.

bgr() bool#

Vraća jesu li crveni i plavi kanali zamijenjeni.

byte_swap() bool#

Vraća šalju li se RGB565 pikseli s obrnutim bajtovima.

triple_buffer() bool#

Vraća je li omogućeno trostruko međuspremanje.

framesize() int#

Vraća konfigurirani identifikator framesize.

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#

Prikazuje image s gornjim lijevim kutom na (x, y). Umjesto slike može se proslijediti niz s putanjom za učitavanje i crtanje u jednom koraku.

x_scale faktor skaliranja po osi x. Negativne vrijednosti zrcale vodoravno. Ako je y_scale izostavljen, slijedi x_scale radi očuvanja omjera slike.

y_scale faktor skaliranja po osi y. Negativne vrijednosti okreću okomito (zahtijeva triple_buffer=True). Ako je x_scale izostavljen, slijedi y_scale.

roi pravokutnik područja interesa (x, y, w, h) izvorne slike koja se crta.

rgb_channel RGB kanal koji se izdvaja iz RGB565 izvorne slike (0=R, 1=G, 2=B, -1=svi). Raspon: -1..2.

alpha neprozirnost slike. 0 je potpuno prozirno (crno), 255 je neprozirno. Raspon: 0..255.

color_palette enum palete boja (npr. image.PALETTE_RAINBOW) ili RGB565 slika od 256 piksela koja se koristi kao tablica za pretraživanje boja na vrijednosti sivih tonova izvora. Primjenjuje se nakon izdvajanja rgb_channel.

alpha_palette slika u sivim tonovima od 256 piksela koja se koristi kao tablica za pretraživanje alfa vrijednosti po pikselu, modulirajući alpha na temelju vrijednosti sivih tonova izvora.

hint logički OR zastavica:

clear(display_off: bool = False) None#

Briše LCD zaslon u crno.

display_off ako je True, isključuje logiku zaslona umjesto brisanja međuspremnika slike. Nakon toga treba onemogućiti i pozadinsko osvjetljenje.

backlight(value: int | None = None) int | None#

Uz value, postavlja intenzitet pozadinskog osvjetljenja (0=isključeno..100=puno). Bez argumenata, vraća trenutnu vrijednost pozadinskog osvjetljenja.

Osim ako je pri konstrukciji proslijeđen upravljač DACBacklight ili PWMBacklight, pozadinskim osvjetljenjem upravlja se kao GPIO pinom i ono ide samo od 0 (isključeno) do različito od nule (uključeno).

bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None#

Šalje cmd zaslonu preko SPI sabirnice, opcionalno praćeno s args (cjelobrojni bajt ili međuspremnik bajtova). dcs odabire DCS uokvirivanje kada ga upravljač podržava.

bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray#

Šalje cmd preko SPI sabirnice i čita len bajtova natrag, vraćajući ih kao bytearray. args se opcionalno upisuje prije čitanja (cjelobrojni bajt ili međuspremnik bajtova). dcs odabire DCS uokvirivanje kada ga upravljač podržava.

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

Izdaje ioctl cmd specifičan za upravljač s opcionalnim arg. Podiže ValueError ako temeljni zaslon ne podržava ioctl.