class DSIDisplay – DSI Display-stuurprogramma¶
De DSIDisplay-klasse stuurt MIPI-DSI-panelen aan via de DSI-hostcontroller van de STM32. MIPI DSI is een gepakketteerd serieel displayprotocol dat één kloklane plus een of meer datalanes als differentiële paren gebruikt, waardoor het content met hoge resolutie (tot 1080p) over veel minder draden kan vervoeren dan 24-bit parallelle RGB. Pixels stromen rechtstreeks vanuit een SDRAM-gebaseerde framebuffer met de gekozen verversingsfrequentie, zodat de CPU niet bij het verversen betrokken is.
De paneelresolutie wordt geselecteerd via framesize met de constanten uit de display-module (QVGA, VGA, HD, FHD, …). Paneelspecifieke initialisatiesequenties worden ingeplugd via het controller-sleutelwoordargument – ST7701 dekt de gangbare ST7701-gebaseerde 480x800 DSI-panelen. DCS-commando’s kunnen out-of-band worden verzonden via bus_write() / bus_read(). De helderheid van de achtergrondverlichting wordt standaard als een eenvoudige GPIO aangestuurd, of door DACBacklight / PWMBacklight indien doorgegeven als backlight.
Frames worden weergegeven door write() aan te roepen met een image.Image. Het stuurprogramma handelt RGB-conversie, schaling, ROI, palet- en oriëntatietransformaties intern af.
Voorbeeld – de camera spiegelen naar een ST7701-gebaseerd 480x800 DSI-paneel:
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)
Constructors¶
- 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)¶
framesizeEen van de standaard ondersteunde resoluties (bijv.display.FWVGA).refreshStelt de verversingsfrequentie van het scherm in hertz in. Het geldige bereik is 30 tot 120. Dit bestuurt de DSI-LCD-klok.display_onSchakelt de display in.triple_bufferWijst drie framebuffers toe om scheurvrije display-updates mogelijk te maken. Vereist voor verticaal spiegelen inwrite().portraitVerwisselt de breedte en hoogte van de framesize.channelHet virtuele MIPI DSI-kanaal dat gebruikt wordt om met de display te communiceren.controllerGeef hier de klasse van de controllerchip door om deze samen met de display te initialiseren. Bijv.display.ST7701(), wat een standaard display-controller voor MIPI DSI-displays is.backlightGeef een achtergrondverlichtingscontrollermodule op om te gebruiken. Standaard wordt de achtergrondverlichting via een GPIO-pin bestuurd.- deinit() None¶
Geeft de I/O-pinnen en het RAM dat door de klasse wordt gebruikt vrij. Dit wordt automatisch aangeroepen bij vernietiging.
- 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¶
Geeft een
imageweer waarvan de linkerbovenhoek begint op locatiex,y.imagemag een padstring zijn in plaats van een image-object om de afbeelding automatisch van schijf te laden. Bijv.write("test.jpg").x_scalebepaalt hoeveel de weergegeven afbeelding in de x-richting wordt geschaald (float). Als deze waarde negatief is, wordt de afbeelding horizontaal gespiegeld. Alsy_scaleniet is opgegeven, komt het overeen metx_scaleom de beeldverhouding te behouden.y_scalebepaalt hoeveel de weergegeven afbeelding in de y-richting wordt geschaald (float). Als deze waarde negatief is, wordt de afbeelding verticaal gespiegeld. Verticaal spiegelen vereisttriple_buffer=True. Alsx_scaleniet is opgegeven, komt het overeen mety_scale.roiis de tuple van de aandachtsgebiedrechthoek (x, y, w, h) van de afbeelding die moet worden weergegeven.rgb_channelis het RGB-kanaal (0=R, 1=G, 2=B) dat uit een RGB565-afbeelding moet worden geëxtraheerd en in grijswaarden op de display moet worden weergegeven.-1schakelt extractie uit. Het geldige bereik is -1 tot 2.alphabepaalt hoe ondoorzichtig de afbeelding is. 255 geeft een ondoorzichtige afbeelding weer, lagere waarden mengen richting zwart, en 0 produceert een volledig zwarte afbeelding. Het geldige bereik is 0 tot 255.color_palettemag een kleurpalet-enum zijn of een RGB565-afbeelding van 256 pixels die als kleur-opzoektabel op de grijswaarde van de invoerafbeelding wordt gebruikt. Toegepast nargb_channel-extractie.alpha_palettemag een grijswaardenafbeelding van 256 pixels zijn die als alfa-opzoektabel wordt gebruikt enalphaper invoerpixel-grijswaarde moduleert. Toegepast nargb_channel-extractie.hintis een logische OR van de vlaggen:image.AREA: Gebruik area-schaling bij het verkleinen in plaats van de standaard nearest neighbor.image.BILINEAR: Gebruik bilineaire schaling in plaats van de standaard nearest-neighbor-schaling.image.BICUBIC: Gebruik bicubische schaling in plaats van de standaard nearest-neighbor-schaling.image.CENTER: Centreer de afbeelding die op de display wordt getekend. Dit wordt toegepast na schaling.image.HMIRROR: Spiegel de afbeelding horizontaal.image.VFLIP: Spiegel de afbeelding verticaal.image.TRANSPOSE: Transponeer de afbeelding (verwissel x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Voer rgb_channel-extractie uit vóór schaling.image.APPLY_COLOR_PALETTE_FIRST: Pas het kleurpalet toe vóór schaling.image.SCALE_ASPECT_KEEP: Schaal de getekende afbeelding zodat deze binnen de display past.image.SCALE_ASPECT_EXPAND: Schaal de getekende afbeelding zodat deze de display vult (resulteert in bijsnijden).image.SCALE_ASPECT_IGNORE: Schaal de getekende afbeelding zodat deze de display vult (resulteert in uitrekken).image.ROTATE_90: Roteer de afbeelding 90 graden (dit is gewoon VFLIP | TRANSPOSE).image.ROTATE_180: Roteer de afbeelding 180 graden (dit is gewoon HMIRROR | VFLIP).image.ROTATE_270: Roteer de afbeelding 270 graden (dit is gewoon HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Wist de LCD-framebuffer naar zwart.
display_offindien True schakelt de displaylogica uit in plaats van de framebuffer te wissen.
- backlight(value: int | None = None) int¶
Stelt de dimwaarde van de LCD-achtergrondverlichting in, 0 (uit) tot 100 (aan). Geef geen argumenten door om de huidige waarde van de achtergrondverlichting op te halen.
Tenzij er een
DACBacklight- ofPWMBacklight-controller aan de constructor wordt doorgegeven, wordt de achtergrondverlichting als een GPIO-pin bestuurd en zal deze alleen van 0 (uit) naar niet-nul (aan) gaan.
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Verzendt DSI-commando
cmdnaar de display.argsis een optionele integer of buffer die commandoparameters bevat.dcsindien True verzendt het commando als een DCS-pakket (Display Command Set).