class SPIDisplay – SPI-Display-Treiber

Die Klasse SPIDisplay steuert kleine, über SPI angebundene TFT- und OLED-Panels an – am häufigsten das SSD1351 128x160 RGB-OLED auf dem OpenMV LCD Shield. Der Treiber verwaltet den SPI-Bus sowie eine GPIO-Chip-Select-/DC-Leitung intern, sodass Aufrufer nur die Panel-Geometrie, die Bildwiederholrate und etwaige Orientierungs-Flags konfigurieren. Die panel-spezifische Initialisierung (Registersequenzen, RAM-Schreib-Framing) wird über das Schlüsselwortargument controller bereitgestellt – übergib eine SSD1351-Instanz, um das LCD Shield anzusteuern, oder implementiere für andere Panels deine eigene Controller-Klasse.

Einzelbilder werden durch Aufruf von write() mit einem image.Image dargestellt. Der Treiber konvertiert die Quelle nach RGB565 und wendet Skalierung, ROI-, Paletten- und Orientierungstransformationen intern an, sodass der Aufrufer das Bild nicht vorab dimensionieren muss. Die Hintergrundbeleuchtungshelligkeit kann als einfacher Ein/Aus-GPIO belassen werden (Standard) oder durch DACBacklight / PWMBacklight angesteuert werden, indem eine davon als Schlüsselwortargument backlight übergeben wird.

Beispiel – die Kamera auf das SSD1351-OLED des OpenMV LCD Shield spiegeln:

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

Konstruktoren

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 SPI-LCD-Breite in Pixeln (1..32767).

height SPI-LCD-Höhe in Pixeln (1..32767).

refresh LCD-Bildwiederholrate in Hertz (1..120). Steuert die SPI-Taktrate.

bgr Auf True setzen, um den roten und den blauen Kanal zu vertauschen.

byte_swap Auf True setzen, um die an das LCD gesendeten RGB565-Pixelbytes zu vertauschen.

hmirror Auf True setzen, um die Display-Ausgabe horizontal zu spiegeln.

vflip Auf True setzen, um die Display-Ausgabe vertikal zu spiegeln.

triple_buffer Bei True werden Aktualisierungen des Bildschirms nicht blockierend, allerdings auf Kosten des dreifachen Display-Speichers im RAM. Der Standardwert hängt vom Board ab (an für Boards mit SDRAM).

controller Nur als Schlüsselwort. Übergib eine Instanz einer Controller-Chip-Klasse, um diesen zusammen mit dem Display zu initialisieren. Wenn angegeben, werden die Methoden init, display_on, display_off und ram_write des Controllers (sofern vorhanden) anstelle der integrierten Befehle aufgerufen.

backlight Nur als Schlüsselwort. Übergib ein Hintergrundbeleuchtungs-Controllermodul, das verwendet werden soll. Standardmäßig wird die Hintergrundbeleuchtung über einen GPIO-Pin gesteuert.

width() int

Gibt die Breite des Bildschirms zurück.

height() int

Gibt die Höhe des Bildschirms zurück.

refresh() int

Gibt die Bildwiederholrate zurück.

bgr() bool

Gibt zurück, ob der rote und der blaue Kanal vertauscht sind.

byte_swap() bool

Gibt zurück, ob RGB565-Pixel byte-vertauscht gesendet werden.

triple_buffer() bool

Gibt zurück, ob Triple Buffering aktiviert ist.

framesize() int

Gibt den konfigurierten framesize-Bezeichner zurück.

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

Zeigt image mit seiner linken oberen Ecke an (x, y) an. Anstelle eines Bildes kann ein Pfad-String übergeben werden, um es in einem Schritt zu laden und zu zeichnen.

x_scale Skalierungsfaktor für die x-Achse. Negative Werte spiegeln horizontal. Wird y_scale weggelassen, folgt es x_scale, um das Seitenverhältnis zu erhalten.

y_scale Skalierungsfaktor für die y-Achse. Negative Werte spiegeln vertikal (erfordert triple_buffer=True). Wird x_scale weggelassen, folgt es y_scale.

roi Rechteck des Interessensbereichs (x, y, w, h) des zu zeichnenden Quellbildes.

rgb_channel RGB-Kanal, der aus einem RGB565-Quellbild extrahiert werden soll (0=R, 1=G, 2=B, -1=alle). Bereich: -1..2.

alpha Deckkraft des Bildes. 0 ist vollständig transparent (schwarz), 255 ist undurchsichtig. Bereich: 0..255.

color_palette Farbpaletten-Enum (z. B. image.PALETTE_RAINBOW) oder ein 256-Pixel-RGB565-Bild, das als Farbnachschlagetabelle auf den Graustufenwert der Quelle angewendet wird. Wird nach der rgb_channel-Extraktion angewendet.

alpha_palette 256-Pixel-Graustufenbild, das als Alpha-Nachschlagetabelle pro Pixel verwendet wird und alpha auf Basis des Graustufenwerts der Quelle moduliert.

hint logische ODER-Verknüpfung der Flags:

clear(display_off: bool = False) None

Setzt den LCD-Bildschirm auf Schwarz.

display_off Bei True wird die Display-Logik abgeschaltet, anstatt den Framebuffer zu löschen. Die Hintergrundbeleuchtung sollte danach ebenfalls deaktiviert werden.

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

Mit value wird die Intensität der Hintergrundbeleuchtung gesetzt (0=aus..100=voll). Ohne Argumente wird der aktuelle Wert der Hintergrundbeleuchtung zurückgegeben.

Sofern bei der Konstruktion kein DACBacklight- oder PWMBacklight-Controller übergeben wird, wird die Hintergrundbeleuchtung als GPIO-Pin angesteuert und wechselt nur von 0 (aus) auf ungleich null (an).

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

Sendet cmd über den SPI-Bus an das Display, optional gefolgt von args (ein int-Byte oder ein Puffer von Bytes). dcs wählt DCS-Framing aus, sofern vom Controller unterstützt.

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

Sendet cmd über den SPI-Bus und liest len Bytes zurück, die als bytearray zurückgegeben werden. args wird optional vor dem Lesen geschrieben (ein int-Byte oder ein Puffer von Bytes). dcs wählt DCS-Framing aus, sofern vom Controller unterstützt.

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

Setzt einen controller-spezifischen ioctl-cmd mit optionalem arg ab. Löst ValueError aus, wenn das zugrunde liegende Display kein ioctl unterstützt.