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)¶
widthszerokość SPI LCD w pikselach (1..32767).heightwysokość SPI LCD w pikselach (1..32767).refreshczęstotliwość odświeżania LCD w hercach (1..120). Steruje szybkością zegara SPI.bgrustaw na True, aby zamienić kanały czerwony i niebieski.byte_swapustaw na True, aby zamienić bajty pikseli RGB565 wysyłane do LCD.hmirrorustaw na True, aby poziomo odbić wyjście wyświetlacza.vflipustaw na True, aby pionowo odbić wyjście wyświetlacza.triple_bufferjeś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).controllertylko jako argument nazwany. Przekaż instancję klasy układu kontrolera, aby zainicjalizować go wraz z wyświetlaczem. Gdy zostanie podany, wywoływane są metody kontrolerainit,display_on,display_offorazram_write(jeśli są dostępne) zamiast wbudowanych poleceń.backlighttylko jako argument nazwany. Przekaż moduł kontrolera podświetlenia do użycia. Domyślnie podświetlenie jest sterowane przez pin GPIO.- 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
imagez 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_scalewspółczynnik skalowania na osi x. Wartości ujemne odbijają poziomo. Jeśliy_scalezostanie pominięte, przyjmie wartośćx_scale, aby zachować proporcje.y_scalewspółczynnik skalowania na osi y. Wartości ujemne odbijają pionowo (wymagatriple_buffer=True). Jeślix_scalezostanie pominięte, przyjmie wartośćy_scale.roiprostokąt obszaru zainteresowania(x, y, w, h)obrazu źródłowego do narysowania.rgb_channelkanał RGB do wyodrębnienia z obrazu źródłowego RGB565 (0=R, 1=G, 2=B, -1=wszystkie). Zakres: -1..2.alphanieprzezroczystość obrazu. 0 oznacza całkowicie przezroczysty (czarny), 255 nieprzezroczysty. Zakres: 0..255.color_palettewyliczenie 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ębnieniurgb_channel.alpha_palette256-pikselowy obraz w skali szarości używany jako tablica odwzorowania alpha dla poszczególnych pikseli, modulującaalphana podstawie wartości w skali szarości źródła.hintlogiczna suma (OR) flag:image.AREA: Użyj skalowania obszarowego przy zmniejszaniu.image.BILINEAR: Użyj skalowania dwuliniowego.image.BICUBIC: Użyj skalowania dwusześciennego.image.CENTER: Wyśrodkuj obraz na wyświetlaczu (po skalowaniu).image.HMIRROR: Odbij obraz poziomo.image.VFLIP: Odbij obraz pionowo.image.TRANSPOSE: Transponuj obraz (zamień x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Zastosuj wyodrębnianiergb_channelprzed skalowaniem.image.APPLY_COLOR_PALETTE_FIRST: Zastosujcolor_paletteprzed skalowaniem.image.SCALE_ASPECT_KEEP: Skaluj tak, aby zmieścić się w obrębie wyświetlacza.image.SCALE_ASPECT_EXPAND: Skaluj tak, aby wypełnić wyświetlacz (z przycięciem).image.SCALE_ASPECT_IGNORE: Skaluj tak, aby wypełnić wyświetlacz (z rozciągnięciem).image.ROTATE_90: Obróć o 90 stopni (VFLIP | TRANSPOSE).image.ROTATE_180: Obróć o 180 stopni (HMIRROR | VFLIP).image.ROTATE_270: Obróć o 270 stopni (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Czyści ekran LCD do koloru czarnego.
display_offjeś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
valueustawia 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
DACBacklightlubPWMBacklight, 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
cmddo wyświetlacza przez magistralę SPI, opcjonalnie z następującymi po nimargs(bajtem int lub buforem bajtów).dcswybiera 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
cmdprzez magistralę SPI i odczytujelenbajtów z powrotem, zwracając je jakobytearray.argsjest opcjonalnie zapisywane przed odczytem (bajt int lub bufor bajtów).dcswybiera kadrowanie DCS, gdy jest obsługiwane przez kontroler.