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.