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é controllerST7701 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)

framesize Une des résolutions standard prises en charge (par ex. display.FWVGA).

refresh Rè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_on Active l’affichage.

triple_buffer Alloue trois tampons d’image pour permettre des mises à jour d’affichage sans déchirure. Requis pour le retournement vertical dans write().

portrait Échange la largeur et la hauteur du framesize.

channel Le canal MIPI DSI virtuel à utiliser pour communiquer avec l’écran.

controller Passez 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.

backlight Spé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.

width() int

Renvoie la largeur de l’écran.

height() int

Renvoie la hauteur de l’écran.

triple_buffer() int

Renvoie si le triple tampon est activé.

bgr() int

Renvoie si l’écran attend des pixels ordonnés en BGR.

byte_swap() int

Renvoie si l’écran attend des pixels avec octets permutés.

framesize() int

Renvoie la constante framesize avec laquelle l’affichage a été initialisé.

refresh() int

Renvoie la fréquence de rafraîchissement en hertz.

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 image dont le coin supérieur gauche commence à l’emplacement x, y.

image peut ê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_scale contrô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. Si y_scale n’est pas spécifié, il prendra la valeur de x_scale afin de conserver le rapport d’aspect.

y_scale contrô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écessite triple_buffer=True. Si x_scale n’est pas spécifié, il prendra la valeur de y_scale.

roi est le tuple du rectangle de la région d’intérêt (x, y, w, h) de l’image à afficher.

rgb_channel est le canal RGB (0=R, 1=V, 2=B) à extraire d’une image RGB565 et à rendre sur l’écran en niveaux de gris. -1 désactive l’extraction. La plage valide est de -1 à 2.

alpha contrô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_palette peut ê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 de rgb_channel.

alpha_palette peut être une image en niveaux de gris de 256 pixels utilisée comme table de correspondance alpha qui module alpha selon la valeur en niveaux de gris de chaque pixel d’entrée. Appliquée après l’extraction de rgb_channel.

hint est 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_off si 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 DACBacklight ou PWMBacklight ne 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.

args est un entier ou un tampon optionnel contenant les paramètres de la commande.

dcs si 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 len octets depuis l’écran à l’aide de la commande DSI cmd.

args est un entier ou un tampon optionnel contenant les paramètres de la commande.

dcs si True, envoie la commande sous forme de paquet DCS (Display Command Set).

ioctl(cmd: int, arg: Any | None = None) Any

Envoie un ioctl cmd propre au pilote, avec un arg optionnel, à l’écran. Lève ValueError si l’écran ne prend pas en charge ioctl.