třída SPIDisplay – ovladač SPI displeje

Třída SPIDisplay řídí malé TFT a OLED panely připojené přes SPI – nejčastěji SSD1351 128x160 RGB OLED na OpenMV LCD Shieldu. Ovladač si interně spravuje sběrnici SPI a GPIO linky chip-select / DC, takže volající konfigurují pouze geometrii panelu, obnovovací frekvenci a případné příznaky orientace. Inicializace specifická pro daný panel (sekvence registrů, rámcování zápisu do RAM) se dodává přes klíčový argument controller – pro řízení LCD Shieldu předejte instanci SSD1351, nebo pro jiné panely implementujte vlastní třídu řadiče.

Snímky se zobrazují voláním write() s objektem image.Image. Ovladač interně převede zdroj na RGB565 a aplikuje škálování, ROI, paletu a transformace orientace, takže volající nemusí obraz předem upravovat na správnou velikost. Jas podsvícení lze ponechat jako jednoduchý zapni/vypni GPIO (výchozí), nebo jej řídit pomocí DACBacklight / PWMBacklight předáním jednoho z nich jako klíčový argument backlight.

Příklad – zrcadlení kamery na SSD1351 OLED OpenMV LCD Shieldu:

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 Šířka SPI LCD v pixelech (1..32767).

height Výška SPI LCD v pixelech (1..32767).

refresh Obnovovací frekvence LCD v hertzech (1..120). Řídí frekvenci hodin SPI.

bgr nastavte na True pro prohození červeného a modrého kanálu.

byte_swap nastavte na True pro prohození bajtů pixelů RGB565 odesílaných na LCD.

hmirror nastavte na True pro horizontální zrcadlení výstupu displeje.

vflip nastavte na True pro vertikální překlopení výstupu displeje.

triple_buffer pokud je True, učiní aktualizace obrazovky neblokujícími za cenu trojnásobku velikosti displeje v RAM. Výchozí hodnota závisí na desce (zapnuto u desek se SDRAM).

controller pouze jako klíčový argument. Předejte instanci třídy řadicího čipu, která se inicializuje spolu s displejem. Pokud je poskytnut, jsou namísto vestavěných příkazů volány metody řadiče init, display_on, display_off a ram_write (jsou-li přítomny).

backlight pouze jako klíčový argument. Předejte modul řadiče podsvícení, který se má použít. Ve výchozím nastavení je podsvícení řízeno pomocí GPIO pinu.

width() int

Vrací šířku obrazovky.

height() int

Vrací výšku obrazovky.

refresh() int

Vrací obnovovací frekvenci.

bgr() bool

Vrací, zda jsou prohozeny červený a modrý kanál.

byte_swap() bool

Vrací, zda jsou pixely RGB565 odesílány s prohozenými bajty.

triple_buffer() bool

Vrací, zda je povoleno trojité bufferování.

framesize() int

Vrací nakonfigurovaný identifikátor 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

Zobrazí image s levým horním rohem na pozici (x, y). Místo obrazu lze předat řetězec s cestou, čímž se obraz v jednom kroku načte a vykreslí.

x_scale měřítko ve směru osy x. Záporné hodnoty překlápějí horizontálně. Pokud je y_scale vynecháno, řídí se x_scale pro zachování poměru stran.

y_scale měřítko ve směru osy y. Záporné hodnoty překlápějí vertikálně (vyžaduje triple_buffer=True). Pokud je x_scale vynecháno, řídí se y_scale.

roi obdélník oblasti zájmu (x, y, w, h) zdrojového obrazu, který se má vykreslit.

rgb_channel RGB kanál, který se má extrahovat ze zdrojového obrazu RGB565 (0=R, 1=G, 2=B, -1=vše). Rozsah: -1..2.

alpha neprůhlednost obrazu. 0 je zcela průhledný (černý), 255 je neprůhledný. Rozsah: 0..255.

color_palette enum barevné palety (např. image.PALETTE_RAINBOW) nebo obraz RGB565 o 256 pixelech používaný jako vyhledávací tabulka barev nad hodnotou stupně šedi zdroje. Aplikuje se po extrakci rgb_channel.

alpha_palette obraz ve stupních šedi o 256 pixelech používaný jako vyhledávací tabulka alfy pro jednotlivé pixely, která moduluje alpha na základě hodnoty stupně šedi zdroje.

hint logický součet (OR) příznaků:

clear(display_off: bool = False) None

Vymaže obrazovku LCD do černa.

display_off pokud je True, vypne logiku displeje namísto vymazání framebufferu. Poté by mělo být také vypnuto podsvícení.

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

S argumentem value nastaví intenzitu podsvícení (0=vypnuto..100=plné). Bez argumentů vrátí aktuální hodnotu podsvícení.

Pokud není při konstrukci předán řadič DACBacklight nebo PWMBacklight, je podsvícení řízeno jako GPIO pin a může nabývat pouze hodnoty 0 (vypnuto) nebo nenulové (zapnuto).

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

Odešle cmd na displej přes sběrnici SPI, volitelně následované args (celočíselný bajt nebo buffer bajtů). dcs volí rámcování DCS, pokud jej řadič podporuje.

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

Odešle cmd přes sběrnici SPI a načte zpět len bajtů, které vrátí jako bytearray. args se volitelně zapíše před čtením (celočíselný bajt nebo buffer bajtů). dcs volí rámcování DCS, pokud jej řadič podporuje.

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

Vyvolá ioctl cmd specifický pro řadič s volitelným arg. Vyvolá ValueError, pokud podkladový displej ioctl nepodporuje.