třída TVDisplay – ovladač TV Shieldu

Třída TVDisplay řídí OpenMV TV Shield, který převádí RGB565 framebuffer na kompozitní video signál NTSC (352x240, 60 půlsnímků/s prokládaně) vhodný pro libovolný televizor nebo analogový video monitor.

Podporovány jsou dvě varianty shieldu:

  • Drátový TV Shield, který vyvádí kompozitní signál na jeden RCA konektor.

  • Wireless TV Shield, který přivádí stejný signál do analogového video vysílače 2,4 GHz. Kanál přijímače (1–8) se vybírá za běhu pomocí ioctl() s display.IOCTL_CHANNEL; dokud není toto volání provedeno, není vybrán žádný kanál.

Rozlišení a rámování jsou pevné – TVDisplay nepřijímá argument framesize. Snímky se zobrazují předáním objektu image.Image metodě write(), která interně zajišťuje škálování, ROI, paletu a transformace orientace.

Příklad použití:

import csi
import display

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.SIF)              # 352x240, matches the TV output

tv = display.TVDisplay()

while True:
    tv.write(csi0.snapshot())

Konstruktory

class display.TVDisplay(triple_buffer: bool = True)

triple_buffer Pokud je True, učiní aktualizace obrazovky neblokujícími za cenu 3násobku velikosti displeje v RAM. Výchozí hodnota závisí na desce.

deinit() None

Uvolní I/O piny a RAM používané touto třídou. Volá se automaticky při destrukci.

width() int

Vrátí šířku obrazovky (352).

height() int

Vrátí výšku obrazovky (240).

refresh() int

Vrátí obnovovací frekvenci (60).

triple_buffer() bool

Vrátí, zda je povoleno trojité bufferování.

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

Zobrazí obraz image, jehož levý horní roh začíná na pozici x, y.

x_scale řídí, jak moc je zobrazený obraz škálován ve směru osy x (float). Pokud je tato hodnota záporná, obraz bude vodorovně převrácen.

y_scale řídí, jak moc je zobrazený obraz škálován ve směru osy y (float). Pokud je tato hodnota záporná, obraz bude svisle převrácen.

roi je n-tice obdélníku oblasti zájmu (x, y, w, h) obrazu, který se má zobrazit.

rgb_channel je RGB kanál (0=R, G=1, B=2), který se má extrahovat z RGB565 obrazu a vykreslit na displeji.

alpha řídí, jak neprůhledný je obraz. Hodnota 256 zobrazí neprůhledný obraz, zatímco hodnota nižší než 256 produkuje černý průhledný obraz. 0 vede k dokonale černému obrazu.

color_palette, pokud není -1, může být enum barevné palety nebo RGB565 obraz o celkem 256 pixelech použitý jako vyhledávací tabulka barev pro hodnotu vstupního obrazu ve stupních šedi.

alpha_palette, pokud není -1, může být GRAYSCALE obraz o celkem 256 pixelech použitý jako alfa paleta, která moduluje hodnotu alpha vstupního obrazu na úrovni jednotlivých pixelů.

hint logický OR z příznaků:

clear(display_off: bool = False) None

Vymaže obrazovku na černou.

display_off je přijímán kvůli kompatibilitě API s ostatními třídami displejů a je ignorován.

ioctl(cmd: int, *args) object

Generický vstupní bod ioctl.

Předejte display.IOCTL_CHANNEL jako cmd pro nastavení nebo získání vysílacího kanálu bezdrátového TV shieldu. S druhým argumentem (1-8) se kanál nastaví; bez druhého argumentu se vrátí aktuální kanál. Dokud není provedeno první nastavovací volání, není vybrán žádný kanál.