class SPIDisplay – Pilote d’écran SPI

La classe SPIDisplay pilote de petits panneaux TFT et OLED connectés en SPI – le plus souvent l’OLED RGB SSD1351 128x160 du OpenMV LCD Shield. Le pilote gère en interne le bus SPI ainsi qu’une ligne GPIO de sélection de puce / DC, de sorte que l’appelant n’a qu’à configurer la géométrie du panneau, la fréquence de rafraîchissement et les éventuels indicateurs d’orientation. L’initialisation propre au panneau (séquences de registres, cadrage d’écriture en RAM) est fournie via l’argument nommé controller – passez une instance SSD1351 pour piloter le LCD Shield, ou implémentez votre propre classe de contrôleur pour d’autres panneaux.

Les trames sont affichées en appelant write() avec une image.Image. Le pilote convertit la source en RGB565 et applique en interne la mise à l’échelle, le ROI, la palette et les transformations d’orientation, de sorte que l’appelant n’a pas besoin de prédimensionner l’image. La luminosité du rétroéclairage peut être laissée comme un simple GPIO marche/arrêt (par défaut) ou pilotée par DACBacklight / PWMBacklight en passant l’un d’eux via l’argument nommé backlight.

Exemple – recopier la caméra sur l’OLED SSD1351 du OpenMV LCD Shield:

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())

Constructeurs

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 Largeur de l’écran LCD SPI en pixels (1..32767).

height Hauteur de l’écran LCD SPI en pixels (1..32767).

refresh Fréquence de rafraîchissement du LCD en hertz (1..120). Contrôle la fréquence d’horloge SPI.

bgr mettre à True pour échanger les canaux rouge et bleu.

byte_swap mettre à True pour échanger les octets des pixels RGB565 envoyés au LCD.

hmirror mettre à True pour mettre en miroir horizontalement la sortie de l’affichage.

vflip mettre à True pour retourner verticalement la sortie de l’affichage.

triple_buffer si True, rend les mises à jour de l’écran non bloquantes au prix de 3X la taille de l’affichage en RAM. La valeur par défaut dépend de la carte (activé pour les cartes dotées de SDRAM).

controller nommé uniquement. Passez une instance de classe de puce contrôleur pour l’initialiser en même temps que l’affichage. Lorsqu’elle est fournie, les méthodes init, display_on, display_off et ram_write du contrôleur (si présentes) sont invoquées à la place des commandes intégrées.

backlight nommé uniquement. Passez un module de contrôleur de rétroéclairage à utiliser. Par défaut, le rétroéclairage est contrôlé via une broche GPIO.

width() int

Renvoie la largeur de l’écran.

height() int

Renvoie la hauteur de l’écran.

refresh() int

Renvoie la fréquence de rafraîchissement.

bgr() bool

Indique si les canaux rouge et bleu sont échangés.

byte_swap() bool

Indique si les pixels RGB565 sont envoyés avec les octets inversés.

triple_buffer() bool

Indique si le triple tampon est activé.

framesize() int

Renvoie l’identifiant de framesize configuré.

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

Affiche image avec son coin supérieur gauche à (x, y). Une chaîne de chemin peut être passée à la place d’une image pour la charger et la dessiner en une seule étape.

x_scale facteur d’échelle sur l’axe x. Les valeurs négatives retournent horizontalement. Si y_scale est omis, il suit x_scale pour préserver le rapport d’aspect.

y_scale facteur d’échelle sur l’axe y. Les valeurs négatives retournent verticalement (nécessite triple_buffer=True). Si x_scale est omis, il suit y_scale.

roi rectangle de région d’intérêt (x, y, w, h) de l’image source à dessiner.

rgb_channel canal RGB à extraire d’une image source RGB565 (0=R, 1=G, 2=B, -1=tous). Plage : -1..2.

alpha opacité de l’image. 0 est entièrement transparent (noir), 255 est opaque. Plage : 0..255.

color_palette énumération de palette de couleurs (p. ex. image.PALETTE_RAINBOW) ou image RGB565 de 256 pixels utilisée comme table de correspondance de couleurs sur la valeur en niveaux de gris de la source. Appliquée après l’extraction de rgb_channel.

alpha_palette image en niveaux de gris de 256 pixels utilisée comme table de correspondance alpha par pixel modulant alpha en fonction de la valeur en niveaux de gris de la source.

hint OU logique des indicateurs :

clear(display_off: bool = False) None

Efface l’écran LCD en noir.

display_off si True, éteint la logique d’affichage au lieu d’effacer le tampon d’image. Le rétroéclairage devrait également être désactivé ensuite.

backlight(value: int | None = None) int | None

Avec value, définit l’intensité du rétroéclairage (0=éteint..100=maximum). Sans argument, renvoie la valeur actuelle du rétroéclairage.

À moins qu’un contrôleur DACBacklight ou PWMBacklight ne soit passé à la construction, le rétroéclairage est piloté comme une broche GPIO et ne passe que de 0 (éteint) à une valeur non nulle (allumé).

bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None

Envoie cmd à l’affichage via le bus SPI, éventuellement suivi de args (un octet entier ou un tampon d’octets). dcs sélectionne le cadrage DCS lorsqu’il est pris en charge par le contrôleur.

bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray

Envoie cmd via le bus SPI et lit len octets en retour, les renvoyant sous forme de bytearray. args est éventuellement écrit avant la lecture (un octet entier ou un tampon d’octets). dcs sélectionne le cadrage DCS lorsqu’il est pris en charge par le contrôleur.

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

Émet un ioctl cmd propre au contrôleur avec un arg optionnel. Lève ValueError si l’affichage sous-jacent ne prend pas en charge ioctl.