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.