klasa DSIDisplay – Upravljački program DSI zaslona¶
Klasa DSIDisplay upravlja MIPI-DSI panelima putem STM32 DSI host upravljača. MIPI DSI je paketni serijski protokol zaslona koji koristi jednu liniju takta i jednu ili više linija podataka kao diferencijalne parove, što mu omogućuje prijenos sadržaja visoke razlučivosti (do 1080p) preko znatno manje žica nego 24-bitni paralelni RGB. Pikseli se izravno prenose iz međuspremnika slike u SDRAM-u pri odabranoj frekvenciji osvježavanja, pa CPU nije uključen u osvježavanje.
Razlučivost panela odabire se putem framesize korištenjem konstanti iz modula display (QVGA, VGA, HD, FHD, …). Inicijalizacijski nizovi specifični za panel uključuju se preko ključnog argumenta controller – ST7701 pokriva uobičajene 480x800 DSI panele temeljene na ST7701. DCS naredbe mogu se izdavati izvan glavnog toka putem bus_write() / bus_read(). Svjetlinom pozadinskog osvjetljenja prema zadanim postavkama upravlja se kao jednostavnim GPIO-om, ili putem DACBacklight / PWMBacklight ako se proslijedi kao backlight.
Sličice se prikazuju pozivom metode write() s image.Image. Upravljački program interno obrađuje pretvorbu RGB-a, skaliranje, ROI, paletu i transformacije orijentacije.
Primjer – preslikavanje kamere na 480x800 DSI panel temeljen na ST7701:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.DSIDisplay(framesize=display.TFWVGA,
controller=display.ST7701())
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
Konstruktori¶
- class display.DSIDisplay(framesize: int = FWVGA, *, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, channel: int = 0, controller: Any | None = None, backlight: Any | None = None)¶
framesizeJedna od standardnih podržanih razlučivosti (npr.display.FWVGA).refreshPostavlja frekvenciju osvježavanja zaslona u hercima. Valjani raspon je 30 do 120. Time se upravlja DSI LCD taktom.display_onOmogućuje zaslon.triple_bufferDodjeljuje tri međuspremnika slike kako bi se omogućilo ažuriranje zaslona bez trganja slike. Potrebno za vertikalno preokretanje uwrite().portraitZamjenjuje širinu i visinu veličine sličice.channelVirtualni MIPI DSI kanal koji se koristi za komunikaciju sa zaslonom.controllerOvdje proslijedite klasu upravljačkog čipa kako bi se inicijalizirao zajedno sa zaslonom. Npr.display.ST7701()koji je standardni upravljač zaslona za MIPI DSI zaslone.backlightOdređuje modul upravljača pozadinskog osvjetljenja koji će se koristiti. Prema zadanim postavkama pozadinskim osvjetljenjem upravlja se putem GPIO pina.- deinit() None¶
Oslobađa U/I pinove i RAM koje koristi klasa. To se automatski poziva pri uništavanju.
- 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: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
Prikazuje
imagečiji gornji lijevi kut počinje na lokacijix,y.imagemože biti niz puta umjesto objekta slike kako bi se slika automatski učitala s diska. Npr.write("test.jpg").x_scaleupravlja time koliko se prikazana slika skalira u smjeru x (float). Ako je ova vrijednost negativna, slika će biti horizontalno preokrenuta. Akoy_scalenije naveden, poprimit će vrijednostx_scalekako bi se zadržao omjer stranica.y_scaleupravlja time koliko se prikazana slika skalira u smjeru y (float). Ako je ova vrijednost negativna, slika će biti vertikalno preokrenuta. Vertikalno preokretanje zahtijevatriple_buffer=True. Akox_scalenije naveden, poprimit će vrijednosty_scale.roije n-torka pravokutnika područja interesa (x, y, w, h) slike koja se prikazuje.rgb_channelje RGB kanal (0=R, 1=G, 2=B) koji se izdvaja iz RGB565 slike i prikazuje na zaslonu u sivim tonovima.-1onemogućuje izdvajanje. Valjani raspon je -1 do 2.alphaupravlja koliko je slika neprozirna. 255 prikazuje neprozirnu sliku, niže vrijednosti stapaju prema crnoj, a 0 daje potpuno crnu sliku. Valjani raspon je 0 do 255.color_palettemože biti enumeracija palete boja ili RGB565 slika od 256 piksela koja se koristi kao tablica za pretraživanje boja na temelju vrijednosti sivih tonova ulazne slike. Primjenjuje se nakon izdvajanjargb_channel.alpha_palettemože biti slika u sivim tonovima od 256 piksela koja se koristi kao alfa tablica za pretraživanje koja moduliraalphapo vrijednosti sivih tonova svakog ulaznog piksela. Primjenjuje se nakon izdvajanjargb_channel.hintje logički OR sljedećih zastavica:image.AREA: Koristi skaliranje po površini pri smanjivanju umjesto zadanog skaliranja najbližim susjedom.image.BILINEAR: Koristi bilinearno skaliranje umjesto zadanog skaliranja najbližim susjedom.image.BICUBIC: Koristi bikubično skaliranje umjesto zadanog skaliranja najbližim susjedom.image.CENTER: Centrira sliku koja se crta na zaslonu. Primjenjuje se nakon skaliranja.image.HMIRROR: Horizontalno zrcali sliku.image.VFLIP: Vertikalno preokreće sliku.image.TRANSPOSE: Transponira sliku (zamjenjuje x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Izvodi izdvajanje rgb_channel prije skaliranja.image.APPLY_COLOR_PALETTE_FIRST: Primjenjuje paletu boja prije skaliranja.image.SCALE_ASPECT_KEEP: Skalira sliku koja se crta tako da stane unutar zaslona.image.SCALE_ASPECT_EXPAND: Skalira sliku koja se crta tako da ispuni zaslon (rezultira obrezivanjem).image.SCALE_ASPECT_IGNORE: Skalira sliku koja se crta tako da ispuni zaslon (rezultira rastezanjem).image.ROTATE_90: Zakreće sliku za 90 stupnjeva (to je samo VFLIP | TRANSPOSE).image.ROTATE_180: Zakreće sliku za 180 stupnjeva (to je samo HMIRROR | VFLIP).image.ROTATE_270: Zakreće sliku za 270 stupnjeva (to je samo HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Briše međuspremnik slike LCD-a u crno.
display_offako je True isključuje logiku zaslona umjesto brisanja međuspremnika slike.
- backlight(value: int | None = None) int¶
Postavlja vrijednost zatamnjenja pozadinskog osvjetljenja LCD-a, 0 (isključeno) do 100 (uključeno). Bez argumenata vraća trenutnu vrijednost pozadinskog osvjetljenja.
Osim ako se konstruktoru ne proslijedi upravljač
DACBacklightiliPWMBacklight, pozadinskim osvjetljenjem upravlja se kao GPIO pinom i ono će ići samo od 0 (isključeno) do vrijednosti različite od nule (uključeno).
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Šalje DSI naredbu
cmdzaslonu.argsje neobavezni cijeli broj ili međuspremnik koji sadrži parametre naredbe.dcsako je True šalje naredbu kao DCS (Display Command Set) paket.