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)¶
widthSPI-LCD-Breite in Pixeln (1..32767).heightSPI-LCD-Höhe in Pixeln (1..32767).refreshLCD-Bildwiederholrate in Hertz (1..120). Steuert die SPI-Taktrate.bgrAuf True setzen, um den roten und den blauen Kanal zu vertauschen.byte_swapAuf True setzen, um die an das LCD gesendeten RGB565-Pixelbytes zu vertauschen.hmirrorAuf True setzen, um die Display-Ausgabe horizontal zu spiegeln.vflipAuf True setzen, um die Display-Ausgabe vertikal zu spiegeln.triple_bufferBei 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).controllerNur als Schlüsselwort. Übergib eine Instanz einer Controller-Chip-Klasse, um diesen zusammen mit dem Display zu initialisieren. Wenn angegeben, werden die Methodeninit,display_on,display_offundram_writedes Controllers (sofern vorhanden) anstelle der integrierten Befehle aufgerufen.backlightNur als Schlüsselwort. Übergib ein Hintergrundbeleuchtungs-Controllermodul, das verwendet werden soll. Standardmäßig wird die Hintergrundbeleuchtung über einen GPIO-Pin gesteuert.- 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
imagemit 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_scaleSkalierungsfaktor für die x-Achse. Negative Werte spiegeln horizontal. Wirdy_scaleweggelassen, folgt esx_scale, um das Seitenverhältnis zu erhalten.y_scaleSkalierungsfaktor für die y-Achse. Negative Werte spiegeln vertikal (erforderttriple_buffer=True). Wirdx_scaleweggelassen, folgt esy_scale.roiRechteck des Interessensbereichs(x, y, w, h)des zu zeichnenden Quellbildes.rgb_channelRGB-Kanal, der aus einem RGB565-Quellbild extrahiert werden soll (0=R, 1=G, 2=B, -1=alle). Bereich: -1..2.alphaDeckkraft des Bildes. 0 ist vollständig transparent (schwarz), 255 ist undurchsichtig. Bereich: 0..255.color_paletteFarbpaletten-Enum (z. B.image.PALETTE_RAINBOW) oder ein 256-Pixel-RGB565-Bild, das als Farbnachschlagetabelle auf den Graustufenwert der Quelle angewendet wird. Wird nach derrgb_channel-Extraktion angewendet.alpha_palette256-Pixel-Graustufenbild, das als Alpha-Nachschlagetabelle pro Pixel verwendet wird undalphaauf Basis des Graustufenwerts der Quelle moduliert.hintlogische ODER-Verknüpfung der Flags:image.AREA: Beim Herunterskalieren Flächenskalierung verwenden.image.BILINEAR: Bilineare Skalierung verwenden.image.BICUBIC: Bikubische Skalierung verwenden.image.CENTER: Das Bild auf dem Display zentrieren (nach der Skalierung).image.HMIRROR: Das Bild horizontal spiegeln.image.VFLIP: Das Bild vertikal spiegeln.image.TRANSPOSE: Das Bild transponieren (x/y vertauschen).image.EXTRACT_RGB_CHANNEL_FIRST: Diergb_channel-Extraktion vor der Skalierung anwenden.image.APPLY_COLOR_PALETTE_FIRST:color_palettevor der Skalierung anwenden.image.SCALE_ASPECT_KEEP: So skalieren, dass es in das Display passt.image.SCALE_ASPECT_EXPAND: So skalieren, dass es das Display ausfüllt (mit Zuschneiden).image.SCALE_ASPECT_IGNORE: So skalieren, dass es das Display ausfüllt (mit Strecken).image.ROTATE_90: Um 90 Grad drehen (VFLIP | TRANSPOSE).image.ROTATE_180: Um 180 Grad drehen (HMIRROR | VFLIP).image.ROTATE_270: Um 270 Grad drehen (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Setzt den LCD-Bildschirm auf Schwarz.
display_offBei 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
valuewird 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- oderPWMBacklight-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 vonargs(ein int-Byte oder ein Puffer von Bytes).dcswä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 liestlenBytes zurück, die alsbytearrayzurückgegeben werden.argswird optional vor dem Lesen geschrieben (ein int-Byte oder ein Puffer von Bytes).dcswählt DCS-Framing aus, sofern vom Controller unterstützt.