classe DSIDisplay – Pilote d’affichage DSI¶
La classe DSIDisplay pilote les panneaux MIPI-DSI via le contrôleur hôte DSI du STM32. MIPI DSI est un protocole d’affichage série par paquets qui utilise une voie d’horloge plus une ou plusieurs voies de données sous forme de paires différentielles, ce qui lui permet de transporter du contenu haute résolution (jusqu’à 1080p) sur beaucoup moins de fils que le RGB parallèle 24 bits. Les pixels sont diffusés directement depuis un tampon d’image adossé à la SDRAM à la fréquence de rafraîchissement choisie, de sorte que le CPU n’intervient pas dans le rafraîchissement.
La résolution du panneau est sélectionnée via framesize à l’aide des constantes du module display (QVGA, VGA, HD, FHD, …). Les séquences d’initialisation propres à chaque panneau sont branchées via l’argument nommé controller – ST7701 couvre les panneaux DSI 480x800 courants basés sur le ST7701. Les commandes DCS peuvent être émises hors bande via bus_write() / bus_read(). La luminosité du rétroéclairage est pilotée par défaut comme un simple GPIO, ou par DACBacklight / PWMBacklight si l’un d’eux est passé comme backlight.
Les trames sont présentées en appelant write() avec une image.Image. Le pilote gère en interne la conversion RGB, la mise à l’échelle, la ROI, la palette et les transformations d’orientation.
Exemple – afficher l’image de la caméra sur un panneau DSI 480x800 basé sur le 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)
Constructeurs¶
- 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)¶
framesizeUne des résolutions standard prises en charge (par ex.display.FWVGA).refreshRègle la fréquence de rafraîchissement de l’écran en hertz. La plage valide est de 30 à 120. Cela contrôle l’horloge LCD DSI.display_onActive l’affichage.triple_bufferAlloue trois tampons d’image pour permettre des mises à jour d’affichage sans déchirure. Requis pour le retournement vertical danswrite().portraitÉchange la largeur et la hauteur du framesize.channelLe canal MIPI DSI virtuel à utiliser pour communiquer avec l’écran.controllerPassez ici la classe de la puce contrôleur pour l’initialiser en même temps que l’affichage. Par ex.display.ST7701(), qui est un contrôleur d’affichage standard pour les écrans MIPI DSI.backlightSpécifie un module contrôleur de rétroéclairage à utiliser. Par défaut, le rétroéclairage sera contrôlé via une broche GPIO.- deinit() None¶
Libère les broches d’E/S et la RAM utilisées par la classe. Ceci est appelé automatiquement lors de la destruction.
- 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¶
Affiche une
imagedont le coin supérieur gauche commence à l’emplacementx,y.imagepeut être une chaîne de chemin au lieu d’un objet image afin de charger automatiquement l’image depuis le disque. Par ex.write("test.jpg").x_scalecontrôle le facteur de mise à l’échelle de l’image affichée dans la direction x (flottant). Si cette valeur est négative, l’image sera retournée horizontalement. Siy_scalen’est pas spécifié, il prendra la valeur dex_scaleafin de conserver le rapport d’aspect.y_scalecontrôle le facteur de mise à l’échelle de l’image affichée dans la direction y (flottant). Si cette valeur est négative, l’image sera retournée verticalement. Le retournement vertical nécessitetriple_buffer=True. Six_scalen’est pas spécifié, il prendra la valeur dey_scale.roiest le tuple du rectangle de la région d’intérêt (x, y, w, h) de l’image à afficher.rgb_channelest le canal RGB (0=R, 1=V, 2=B) à extraire d’une image RGB565 et à rendre sur l’écran en niveaux de gris.-1désactive l’extraction. La plage valide est de -1 à 2.alphacontrôle l’opacité de l’image. 255 affiche une image opaque, des valeurs plus faibles la mélangent vers le noir, et 0 produit une image entièrement noire. La plage valide est de 0 à 255.color_palettepeut être une énumération de palette de couleurs ou une image RGB565 de 256 pixels servant de table de correspondance de couleurs appliquée à la valeur en niveaux de gris de l’image d’entrée. Appliquée après l’extraction dergb_channel.alpha_palettepeut être une image en niveaux de gris de 256 pixels utilisée comme table de correspondance alpha qui modulealphaselon la valeur en niveaux de gris de chaque pixel d’entrée. Appliquée après l’extraction dergb_channel.hintest un OU logique des drapeaux :image.AREA: Utilise la mise à l’échelle par zone lors de la réduction, au lieu du plus proche voisin par défaut.image.BILINEAR: Utilise la mise à l’échelle bilinéaire au lieu du plus proche voisin par défaut.image.BICUBIC: Utilise la mise à l’échelle bicubique au lieu du plus proche voisin par défaut.image.CENTER: Centre l’image dessinée sur l’écran. Ceci est appliqué après la mise à l’échelle.image.HMIRROR: Reflète horizontalement l’image.image.VFLIP: Retourne verticalement l’image.image.TRANSPOSE: Transpose l’image (échange x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Effectue l’extraction de rgb_channel avant la mise à l’échelle.image.APPLY_COLOR_PALETTE_FIRST: Applique la palette de couleurs avant la mise à l’échelle.image.SCALE_ASPECT_KEEP: Met l’image dessinée à l’échelle pour qu’elle tienne à l’intérieur de l’écran.image.SCALE_ASPECT_EXPAND: Met l’image dessinée à l’échelle pour qu’elle remplisse l’écran (entraîne un recadrage).image.SCALE_ASPECT_IGNORE: Met l’image dessinée à l’échelle pour qu’elle remplisse l’écran (entraîne un étirement).image.ROTATE_90: Fait pivoter l’image de 90 degrés (équivaut simplement à VFLIP | TRANSPOSE).image.ROTATE_180: Fait pivoter l’image de 180 degrés (équivaut simplement à HMIRROR | VFLIP).image.ROTATE_270: Fait pivoter l’image de 270 degrés (équivaut simplement à HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Efface le tampon d’image LCD en le mettant au noir.
display_offsi True, éteint la logique de l’affichage au lieu d’effacer le tampon d’image.
- backlight(value: int | None = None) int¶
Règle la valeur d’atténuation du rétroéclairage LCD, de 0 (éteint) à 100 (allumé). Ne passez aucun argument pour obtenir la valeur actuelle du rétroéclairage.
À moins qu’un contrôleur
DACBacklightouPWMBacklightne soit passé au constructeur, le rétroéclairage est contrôlé comme une broche GPIO et ne pourra passer que de 0 (éteint) à une valeur non nulle (allumé).
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Envoie la commande DSI
cmdà l’écran.argsest un entier ou un tampon optionnel contenant les paramètres de la commande.dcssi True, envoie la commande sous forme de paquet DCS (Display Command Set).
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytes¶
Lit
lenoctets depuis l’écran à l’aide de la commande DSIcmd.argsest un entier ou un tampon optionnel contenant les paramètres de la commande.dcssi True, envoie la commande sous forme de paquet DCS (Display Command Set).