klasa SPIDisplay – sterownik wyświetlacza SPI

Klasa SPIDisplay obsługuje małe panele TFT i OLED podłączane przez SPI – najczęściej OLED RGB SSD1351 128x160 na nakładce OpenMV LCD Shield. Sterownik wewnętrznie zarządza magistralą SPI oraz linią chip-select / DC GPIO, więc wywołujący konfiguruje jedynie geometrię panelu, częstotliwość odświeżania oraz ewentualne flagi orientacji. Inicjalizacja specyficzna dla panelu (sekwencje rejestrów, kadrowanie zapisu RAM) jest dostarczana poprzez argument nazwany controller – przekaż instancję SSD1351, aby obsłużyć LCD Shield, lub zaimplementuj własną klasę kontrolera dla innych paneli.

Ramki są wyświetlane przez wywołanie write() z obiektem image.Image. Sterownik konwertuje źródło do RGB565 i wewnętrznie stosuje skalowanie, ROI, paletę oraz przekształcenia orientacji, więc wywołujący nie musi wcześniej dopasowywać rozmiaru obrazu. Jasność podświetlenia można pozostawić jako zwykły GPIO typu włącz/wyłącz (domyślnie) lub sterować nią przez DACBacklight / PWMBacklight, przekazując jeden z nich jako argument nazwany backlight.

Przykład – odbicie obrazu z kamery na OLED SSD1351 nakładki 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())

Konstruktory

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 szerokość SPI LCD w pikselach (1..32767).

height wysokość SPI LCD w pikselach (1..32767).

refresh częstotliwość odświeżania LCD w hercach (1..120). Steruje szybkością zegara SPI.

bgr ustaw na True, aby zamienić kanały czerwony i niebieski.

byte_swap ustaw na True, aby zamienić bajty pikseli RGB565 wysyłane do LCD.

hmirror ustaw na True, aby poziomo odbić wyjście wyświetlacza.

vflip ustaw na True, aby pionowo odbić wyjście wyświetlacza.

triple_buffer jeśli True, sprawia, że aktualizacje ekranu są nieblokujące kosztem 3-krotności rozmiaru wyświetlacza w pamięci RAM. Wartość domyślna zależy od płytki (włączone dla płytek z SDRAM).

controller tylko jako argument nazwany. Przekaż instancję klasy układu kontrolera, aby zainicjalizować go wraz z wyświetlaczem. Gdy zostanie podany, wywoływane są metody kontrolera init, display_on, display_off oraz ram_write (jeśli są dostępne) zamiast wbudowanych poleceń.

backlight tylko jako argument nazwany. Przekaż moduł kontrolera podświetlenia do użycia. Domyślnie podświetlenie jest sterowane przez pin GPIO.

width() int

Zwraca szerokość ekranu.

height() int

Zwraca wysokość ekranu.

refresh() int

Zwraca częstotliwość odświeżania.

bgr() bool

Zwraca informację, czy kanały czerwony i niebieski są zamienione.

byte_swap() bool

Zwraca informację, czy piksele RGB565 są wysyłane z odwróconą kolejnością bajtów.

triple_buffer() bool

Zwraca informację, czy potrójne buforowanie jest włączone.

framesize() int

Zwraca skonfigurowany identyfikator framesize.

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

Wyświetla obiekt image z jego lewym górnym rogiem w punkcie (x, y). Zamiast obrazu można przekazać ścieżkę w postaci łańcucha znaków, aby wczytać i narysować go w jednym kroku.

x_scale współczynnik skalowania na osi x. Wartości ujemne odbijają poziomo. Jeśli y_scale zostanie pominięte, przyjmie wartość x_scale, aby zachować proporcje.

y_scale współczynnik skalowania na osi y. Wartości ujemne odbijają pionowo (wymaga triple_buffer=True). Jeśli x_scale zostanie pominięte, przyjmie wartość y_scale.

roi prostokąt obszaru zainteresowania (x, y, w, h) obrazu źródłowego do narysowania.

rgb_channel kanał RGB do wyodrębnienia z obrazu źródłowego RGB565 (0=R, 1=G, 2=B, -1=wszystkie). Zakres: -1..2.

alpha nieprzezroczystość obrazu. 0 oznacza całkowicie przezroczysty (czarny), 255 nieprzezroczysty. Zakres: 0..255.

color_palette wyliczenie palety kolorów (np. image.PALETTE_RAINBOW) lub 256-pikselowy obraz RGB565 używany jako tablica odwzorowania kolorów dla wartości w skali szarości źródła. Stosowany po wyodrębnieniu rgb_channel.

alpha_palette 256-pikselowy obraz w skali szarości używany jako tablica odwzorowania alpha dla poszczególnych pikseli, modulująca alpha na podstawie wartości w skali szarości źródła.

hint logiczna suma (OR) flag:

clear(display_off: bool = False) None

Czyści ekran LCD do koloru czarnego.

display_off jeśli True, wyłącza logikę wyświetlacza zamiast czyścić bufor ramki. Podświetlenie powinno również zostać wyłączone po tej operacji.

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

Z argumentem value ustawia intensywność podświetlenia (0=wyłączone..100=pełne). Bez argumentów zwraca bieżącą wartość podświetlenia.

O ile podczas tworzenia obiektu nie przekazano kontrolera DACBacklight lub PWMBacklight, podświetlenie jest sterowane jako pin GPIO i przyjmuje tylko wartości od 0 (wyłączone) do niezerowej (włączone).

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

Wysyła cmd do wyświetlacza przez magistralę SPI, opcjonalnie z następującymi po nim args (bajtem int lub buforem bajtów). dcs wybiera kadrowanie DCS, gdy jest obsługiwane przez kontroler.

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

Wysyła cmd przez magistralę SPI i odczytuje len bajtów z powrotem, zwracając je jako bytearray. args jest opcjonalnie zapisywane przed odczytem (bajt int lub bufor bajtów). dcs wybiera kadrowanie DCS, gdy jest obsługiwane przez kontroler.

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

Wykonuje specyficzne dla kontrolera ioctl cmd z opcjonalnym arg. Zgłasza ValueError, jeśli bazowy wyświetlacz nie obsługuje ioctl.