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)¶
widthSPI LCDの幅(ピクセル単位、1〜32767)。heightSPI LCDの高さ(ピクセル単位、1〜32767)。refreshLCDのリフレッシュレート(ヘルツ単位、1〜120)。SPIクロックレートを制御します。bgrTrueに設定すると赤と青のチャンネルを入れ替えます。byte_swapTrueに設定するとLCDに送信されるRGB565ピクセルのバイトを入れ替えます。hmirrorTrueに設定するとディスプレイ出力を水平方向にミラーリングします。vflipTrueに設定するとディスプレイ出力を垂直方向に反転します。triple_bufferTrueの場合、ディスプレイサイズの3倍のRAMを消費する代わりに、画面更新がノンブロッキングになります。デフォルトはボードに依存します(SDRAMを搭載したボードではオン)。controllerキーワード専用。コントローラチップクラスのインスタンスを渡すと、ディスプレイと一緒に初期化されます。指定された場合、組み込みコマンドの代わりにコントローラのinit、display_on、display_off、ram_writeメソッド(存在する場合)が呼び出されます。backlightキーワード専用。使用するバックライトコントローラモジュールを渡します。デフォルトでは、バックライトは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¶
imageを左上隅が(x, y)になるように表示します。画像の代わりにパス文字列を渡すと、読み込みと描画を一度に行えます。x_scalex軸方向のスケール係数。負の値は水平方向に反転します。y_scaleが省略された場合、アスペクト比を維持するためにx_scaleに従います。y_scaley軸方向のスケール係数。負の値は垂直方向に反転します(triple_buffer=Trueが必要)。x_scaleが省略された場合、y_scaleに従います。roi描画するソース画像の関心領域(ROI)を表す矩形(x, y, w, h)。rgb_channelRGB565ソース画像から抽出する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:image.AREA:縮小時にエリアスケーリングを使用します。image.BILINEAR:バイリニアスケーリングを使用します。image.BICUBIC:バイキュービックスケーリングを使用します。image.CENTER:画像をディスプレイの中央に配置します(スケーリング後)。image.HMIRROR:画像を水平方向にミラーリングします。image.VFLIP:画像を垂直方向に反転します。image.TRANSPOSE:画像を転置します(x/yを入れ替え)。image.EXTRACT_RGB_CHANNEL_FIRST:スケーリングの前にrgb_channel抽出を適用します。image.APPLY_COLOR_PALETTE_FIRST:スケーリングの前にcolor_paletteを適用します。image.SCALE_ASPECT_KEEP:ディスプレイ内に収まるようにスケーリングします。image.SCALE_ASPECT_EXPAND:ディスプレイいっぱいに表示するようにスケーリングします(クロッピング)。image.SCALE_ASPECT_IGNORE:ディスプレイいっぱいに表示するようにスケーリングします(引き伸ばし)。image.ROTATE_90:90度回転します(VFLIP | TRANSPOSE)。image.ROTATE_180:180度回転します(HMIRROR | VFLIP)。image.ROTATE_270:270度回転します(HMIRROR | TRANSPOSE)。
- clear(display_off: bool = False) None¶
LCD画面を黒にクリアします。
display_offTrueの場合、フレームバッファをクリアする代わりにディスプレイのロジックをオフにします。その後バックライトも無効にしてください。
- 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フレーミングを選択します。