class SPIDisplay -- SPIディスプレイドライバ

SPIDisplay クラスは、SPI接続の小型TFTおよびOLEDパネルを駆動します。最も一般的なのは、OpenMV LCD Shield上のSSD1351 128x160 RGB OLEDです。ドライバはSPIバスとGPIOチップセレクト/DCラインを内部で所有するため、呼び出し側はパネルのジオメトリ、リフレッシュレート、向きのフラグを設定するだけで済みます。パネル固有の初期化(レジスタシーケンス、RAM書き込みフレーミング)は controller キーワード引数を介して提供されます。LCD Shieldを駆動するには SSD1351 インスタンスを渡すか、他のパネル向けに独自のコントローラクラスを実装してください。

フレームは image.Image を指定して write() を呼び出すことで表示されます。ドライバはソースをRGB565に変換し、スケーリング、ROI、パレット、向きの変換を内部的に適用するため、呼び出し側で画像のサイズをあらかじめ調整する必要はありません。バックライトの明るさは単純なオン/オフのGPIO(デフォルト)のままにしておくか、backlight キーワード引数として DACBacklight / PWMBacklight を渡すことで駆動できます。

例 -- カメラ映像をOpenMV LCD ShieldのSSD1351 OLEDにミラーリングする:

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())

コンストラクタ

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 SPI LCDの幅(ピクセル単位、1〜32767)。

height SPI LCDの高さ(ピクセル単位、1〜32767)。

refresh LCDのリフレッシュレート(ヘルツ単位、1〜120)。SPIクロックレートを制御します。

bgr Trueに設定すると赤と青のチャンネルを入れ替えます。

byte_swap Trueに設定するとLCDに送信されるRGB565ピクセルのバイトを入れ替えます。

hmirror Trueに設定するとディスプレイ出力を水平方向にミラーリングします。

vflip Trueに設定するとディスプレイ出力を垂直方向に反転します。

triple_buffer Trueの場合、ディスプレイサイズの3倍のRAMを消費する代わりに、画面更新がノンブロッキングになります。デフォルトはボードに依存します(SDRAMを搭載したボードではオン)。

controller キーワード専用。コントローラチップクラスのインスタンスを渡すと、ディスプレイと一緒に初期化されます。指定された場合、組み込みコマンドの代わりにコントローラの initdisplay_ondisplay_offram_write メソッド(存在する場合)が呼び出されます。

backlight キーワード専用。使用するバックライトコントローラモジュールを渡します。デフォルトでは、バックライトはGPIOピンを介して制御されます。

width() int

画面の幅を返します。

height() int

画面の高さを返します。

refresh() int

リフレッシュレートを返します。

bgr() bool

赤と青のチャンネルが入れ替えられているかどうかを返します。

byte_swap() bool

RGB565ピクセルがバイト反転して送信されるかどうかを返します。

triple_buffer() bool

トリプルバッファリングが有効かどうかを返します。

framesize() int

設定された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

image を左上隅が (x, y) になるように表示します。画像の代わりにパス文字列を渡すと、読み込みと描画を一度に行えます。

x_scale x軸方向のスケール係数。負の値は水平方向に反転します。y_scale が省略された場合、アスペクト比を維持するために x_scale に従います。

y_scale y軸方向のスケール係数。負の値は垂直方向に反転します(triple_buffer=True が必要)。x_scale が省略された場合、y_scale に従います。

roi 描画するソース画像の関心領域(ROI)を表す矩形 (x, y, w, h)

rgb_channel RGB565ソース画像から抽出するRGBチャンネル(0=R、1=G、2=B、-1=すべて)。範囲:-1〜2。

alpha 画像の不透明度。0は完全に透明(黒)、255は不透明。範囲:0〜255。

color_palette カラーパレット列挙型(例:image.PALETTE_RAINBOW)、またはソースのグレースケール値に対するカラールックアップテーブルとして使用される256ピクセルのRGB565画像。rgb_channel 抽出の後に適用されます。

alpha_palette ソースのグレースケール値に基づいて alpha を変調する、ピクセルごとのアルファルックアップテーブルとして使用される256ピクセルのグレースケール画像。

hint 以下のフラグの論理OR:

clear(display_off: bool = False) None

LCD画面を黒にクリアします。

display_off Trueの場合、フレームバッファをクリアする代わりにディスプレイのロジックをオフにします。その後バックライトも無効にしてください。

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

value を指定すると、バックライトの強度を設定します(0=オフ〜100=フル)。引数なしの場合は、現在のバックライト値を返します。

コンストラクション時に DACBacklight または PWMBacklight コントローラが渡されない限り、バックライトはGPIOピンとして駆動され、0(オフ)から非ゼロ(オン)までしか変化しません。

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

cmd をSPIバス経由でディスプレイに送信します。オプションで args(intバイトまたはバイトのバッファ)を続けることができます。dcs は、コントローラがサポートしている場合にDCSフレーミングを選択します。

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

cmd をSPIバス経由で送信し、len バイトを読み戻して bytearray として返します。args は読み取りの前にオプションで書き込まれます(intバイトまたはバイトのバッファ)。dcs は、コントローラがサポートしている場合にDCSフレーミングを選択します。

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

オプションの arg を伴うコントローラ固有のioctl cmd を発行します。基盤となるディスプレイがioctlをサポートしていない場合は ValueError を発生させます。