klasa RGBDisplay – sterownik wyświetlacza RGB

Klasa RGBDisplay obsługuje 24-bitowe równoległe wyświetlacze LCD RGB poprzez kontroler STM32 LTDC (LCD-TFT). LTDC strumieniuje piksele bezpośrednio z bufora ramki umieszczonego w SDRAM przy wybranym zegarze pikseli, dzięki czemu możliwe są wysokie częstotliwości odświeżania (do 120 Hz) bez angażowania CPU.

Na OpenMV Cam Pure Thermal ta sama 24-bitowa magistrala równoległa zasila również wbudowany koder HDMI TFP410, więc jej wyjście HDMI jest sterowane także przez tę klasę – użyj display_on=False, aby wygasić wbudowany LCD, jednocześnie nadal taktując piksele do kodera.

Rozdzielczość panelu wybiera się przez framesize przy użyciu stałych zdefiniowanych w module display (QVGA, VGA, WVGA, HD, FHD, …). Sekwencje inicjalizacji specyficzne dla panelu podłącza się poprzez argument nazwany controller (na przykład ST7701 dla paneli opartych na ST7701). Jasność podświetlenia jest domyślnie sterowana jako zwykły GPIO lub przez DACBacklight / PWMBacklight, jeśli zostanie przekazany jako backlight.

Ramki są wyświetlane przez wywołanie write() z obiektem image.Image. Sterownik wewnętrznie obsługuje konwersję RGB, skalowanie, ROI, paletę oraz przekształcenia orientacji.

Przykład – odbicie obrazu z kamery na panelu 480x272 przy 60 Hz:

import csi
import display
import image

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)

while True:
    lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)

Konstruktory

class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)

framesize Jedna ze standardowych obsługiwanych rozdzielczości (zobacz stałe modułu display).

refresh Ustawia częstotliwość odświeżania ekranu w hercach (30-120). Steruje to zegarem pikseli LCD RGB.

display_on Włącza lokalne wyjście LCD. Przekaż False na OpenMV Cam Pure Thermal, której 24-bitowa magistrala równoległa steruje zarówno wbudowanym LCD, jak i koderem HDMI TFP410 – utrzymuje to wbudowany LCD wygaszony, jednocześnie nadal zasilając koder HDMI. Na innych OpenMV Cam nie ma współdzielonego odbiornika i można pozostawić wartość domyślną.

triple_buffer Jeśli True, sprawia, że aktualizacje ekranu są nieblokujące kosztem 3-krotności rozmiaru wyświetlacza w pamięci RAM.

portrait Zamienia szerokość i wysokość framesize.

controller Przekaż instancję klasy układu kontrolera, aby zainicjalizować go wraz z wyświetlaczem.

backlight Przekaż instancję modułu kontrolera podświetlenia do użycia. Domyślnie podświetlenie jest sterowane przez pin GPIO.

deinit() None

Zwalnia piny I/O oraz pamięć RAM używaną przez klasę. Jest to wywoływane automatycznie podczas niszczenia obiektu.

width() int

Zwraca szerokość ekranu.

height() int

Zwraca wysokość ekranu.

triple_buffer() bool

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

bgr() bool

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

byte_swap() bool

Zwraca informację, czy bajty pikseli RGB565 są zamieniane na wyjściu.

framesize() int

Zwraca stałą framesize, z którą skonfigurowano wyświetlacz.

refresh() int

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

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 do koloru czarnego. Należy również wyłączyć podświetlenie po tej operacji, aby zapewnić, że ekran stanie się czarny, ponieważ wiele wyświetlaczy jest białych, gdy włączone jest tylko podświetlenie.

backlight(value: int | None = None) int

Ustawia wartość przyciemnienia podświetlenia LCD, od 0 (wyłączone) do 100 (włączone). Wywołaj bez argumentów, aby uzyskać bieżącą wartość podświetlenia.

O ile do konstruktora 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).

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: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

Wyświetla obiekt image, którego lewy górny róg zaczyna się w lokalizacji x, y. Zamiast obiektu obrazu można również przekazać ścieżkę w postaci łańcucha znaków, aby automatycznie wczytać obraz z dysku.

x_scale steruje tym, jak bardzo wyświetlany obraz jest skalowany w kierunku x. Jeśli wartość jest ujemna, obraz zostanie odbity poziomo. Jeśli y_scale nie jest podane, przyjmie wartość x_scale, aby zachować proporcje.

y_scale steruje tym, jak bardzo wyświetlany obraz jest skalowany w kierunku y. Jeśli wartość jest ujemna, obraz zostanie odbity pionowo (wymaga potrójnego buforowania). Jeśli x_scale nie jest podane, przyjmie wartość y_scale, aby zachować proporcje.

roi to krotka prostokąta obszaru zainteresowania (x, y, w, h) obrazu do wyświetlenia.

rgb_channel to kanał RGB (0=R, 1=G, 2=B), który ma zostać wyodrębniony z obrazu RGB565 i wyrenderowany w skali szarości. -1 wyłącza wyodrębnianie kanału.

alpha steruje tym, jak nieprzezroczysty jest obraz, od 0 (całkowicie przezroczysty / czarny) do 255 (nieprzezroczysty).

color_palette obraz RGB565 o łącznej liczbie 256 pikseli używany jako tablica odwzorowania kolorów dla wartości w skali szarości obrazu wejściowego. Stosowany po wyodrębnieniu rgb_channel. Może to być również wyliczenie palety (np. image.PALETTE_RAINBOW).

alpha_palette obraz GRAYSCALE o łącznej liczbie 256 pikseli używany jako tablica odwzorowania alpha dla poszczególnych pikseli na podstawie wartości w skali szarości obrazu wejściowego. Stosowany po wyodrębnieniu rgb_channel.

hint to logiczna suma (OR) flag: