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).heightVisina SPI LCD-a u pikselima (1..32767).refreshFrekvencija osvježavanja LCD-a u hercima (1..120). Upravlja brzinom SPI takta.bgrpostavite na True za zamjenu crvenog i plavog kanala.byte_swappostavite na True za zamjenu bajtova RGB565 piksela koji se šalju LCD-u.hmirrorpostavite na True za vodoravno zrcaljenje izlaza zaslona.vflippostavite na True za okomito okretanje izlaza zaslona.triple_bufferako 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).controllersamo 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čainit,display_on,display_offiram_write(ako postoje).backlightsamo kao ključna riječ. Proslijedite modul upravljača pozadinskog osvjetljenja koji će se koristiti. Prema zadanim postavkama pozadinskim osvjetljenjem upravlja se putem GPIO pina.- 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
images gornjim lijevim kutom na(x, y). Umjesto slike može se proslijediti niz s putanjom za učitavanje i crtanje u jednom koraku.x_scalefaktor skaliranja po osi x. Negativne vrijednosti zrcale vodoravno. Ako jey_scaleizostavljen, slijedix_scaleradi očuvanja omjera slike.y_scalefaktor skaliranja po osi y. Negativne vrijednosti okreću okomito (zahtijevatriple_buffer=True). Ako jex_scaleizostavljen, slijediy_scale.roipravokutnik područja interesa(x, y, w, h)izvorne slike koja se crta.rgb_channelRGB kanal koji se izdvaja iz RGB565 izvorne slike (0=R, 1=G, 2=B, -1=svi). Raspon: -1..2.alphaneprozirnost slike. 0 je potpuno prozirno (crno), 255 je neprozirno. Raspon: 0..255.color_paletteenum 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 izdvajanjargb_channel.alpha_paletteslika u sivim tonovima od 256 piksela koja se koristi kao tablica za pretraživanje alfa vrijednosti po pikselu, modulirajućialphana temelju vrijednosti sivih tonova izvora.hintlogički OR zastavica:image.AREA: Koristi skaliranje po površini pri smanjivanju.image.BILINEAR: Koristi bilinearno skaliranje.image.BICUBIC: Koristi bikubično skaliranje.image.CENTER: Centrira sliku na zaslonu (nakon skaliranja).image.HMIRROR: Vodoravno zrcali sliku.image.VFLIP: Okomito okreće sliku.image.TRANSPOSE: Transponira sliku (zamjenjuje x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Primjenjuje izdvajanjergb_channelprije skaliranja.image.APPLY_COLOR_PALETTE_FIRST: Primjenjujecolor_paletteprije skaliranja.image.SCALE_ASPECT_KEEP: Skalira tako da stane unutar zaslona.image.SCALE_ASPECT_EXPAND: Skalira tako da ispuni zaslon (s obrezivanjem).image.SCALE_ASPECT_IGNORE: Skalira tako da ispuni zaslon (s rastezanjem).image.ROTATE_90: Zakreće za 90 stupnjeva (VFLIP | TRANSPOSE).image.ROTATE_180: Zakreće za 180 stupnjeva (HMIRROR | VFLIP).image.ROTATE_270: Zakreće za 270 stupnjeva (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Briše LCD zaslon u crno.
display_offako 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č
DACBacklightiliPWMBacklight, 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
cmdzaslonu preko SPI sabirnice, opcionalno praćeno sargs(cjelobrojni bajt ili međuspremnik bajtova).dcsodabire DCS uokvirivanje kada ga upravljač podržava.
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray¶
Šalje
cmdpreko SPI sabirnice i čitalenbajtova natrag, vraćajući ih kaobytearray.argsse opcionalno upisuje prije čitanja (cjelobrojni bajt ili međuspremnik bajtova).dcsodabire DCS uokvirivanje kada ga upravljač podržava.