class DSIDisplay -- DSI ディスプレイドライバ¶
DSIDisplay クラスは、STM32 DSI ホストコントローラを介して MIPI-DSI パネルを駆動します。MIPI DSI はパケット化されたシリアルディスプレイプロトコルで、1 本のクロックレーンと 1 本以上のデータレーンを差動ペアとして使用します。これにより、24 ビットパラレル RGB よりもはるかに少ない配線で高解像度コンテンツ(最大 1080p)を伝送できます。ピクセルは SDRAM ベースのフレームバッファから選択したリフレッシュレートで直接ストリーミングされるため、リフレッシュに CPU は関与しません。
パネルの解像度は、display モジュールの定数(QVGA、VGA、HD、FHD など)を使って framesize を通じて選択します。パネル固有の初期化シーケンスは controller キーワード引数を介して組み込まれます。ST7701 は一般的な ST7701 ベースの 480x800 DSI パネルに対応します。DCS コマンドは bus_write() / bus_read() を介してアウトオブバンドで発行できます。バックライトの輝度はデフォルトで単純な GPIO として駆動されますが、backlight として渡せば DACBacklight / PWMBacklight によって駆動できます。
フレームは image.Image を指定して write() を呼び出すことで表示されます。ドライバは RGB 変換、スケーリング、ROI、パレット、向きの変換を内部で処理します。
例 -- カメラ映像を ST7701 ベースの 480x800 DSI パネルにミラーリングする:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.DSIDisplay(framesize=display.TFWVGA,
controller=display.ST7701())
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
コンストラクタ¶
- class display.DSIDisplay(framesize: int = FWVGA, *, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, channel: int = 0, controller: Any | None = None, backlight: Any | None = None)¶
framesize標準でサポートされている解像度のいずれか(例:display.FWVGA)。refresh画面のリフレッシュレートをヘルツで設定します。有効範囲は 30 から 120 です。これは DSI LCD クロックを制御します。display_onディスプレイを有効にします。triple_bufferティアリングのないディスプレイ更新を可能にするために 3 つのフレームバッファを割り当てます。write()での垂直反転に必要です。portraitframesize の幅と高さを入れ替えます。channelディスプレイとの通信に使用する仮想 MIPI DSI チャネル。controllerディスプレイとともに初期化するコントローラチップクラスをここに渡します。例:display.ST7701()。これは MIPI DSI ディスプレイ用の標準ディスプレイコントローラです。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: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
左上隅が位置
x、yから始まるimageを表示します。imageには、画像オブジェクトの代わりにパス文字列を指定して、ディスクから画像を自動的に読み込むこともできます。例:write("test.jpg")。x_scaleは表示画像を x 方向にどれだけ拡大縮小するかを制御します(float)。この値が負の場合、画像は水平方向に反転されます。y_scaleが指定されていない場合、アスペクト比を維持するためにx_scaleに一致します。y_scaleは表示画像を y 方向にどれだけ拡大縮小するかを制御します(float)。この値が負の場合、画像は垂直方向に反転されます。垂直反転にはtriple_buffer=Trueが必要です。x_scaleが指定されていない場合、y_scaleに一致します。roiは表示する画像の関心領域を表す矩形タプル (x, y, w, h) です。rgb_channelは、RGB565 画像から抽出してディスプレイにグレースケールで描画する RGB チャネル(0=R、1=G、2=B)です。-1で抽出を無効にします。有効範囲は -1 から 2 です。alphaは画像の不透明度を制御します。255 で不透明な画像を表示し、値を下げるほど黒に近づき、0 で完全に黒い画像になります。有効範囲は 0 から 255 です。color_paletteには、カラーパレット列挙値、または入力画像のグレースケール値に対するカラールックアップテーブルとして使用する 256 ピクセルの RGB565 画像を指定できます。rgb_channel抽出後に適用されます。alpha_paletteには、入力ピクセルのグレースケール値ごとにalphaを変調するアルファルックアップテーブルとして使用する 256 ピクセルのグレースケール画像を指定できます。rgb_channel抽出後に適用されます。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: スケーリングの前にカラーパレットを適用します。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_offが True の場合、フレームバッファをクリアする代わりにディスプレイロジックをオフにします。
- backlight(value: int | None = None) int¶
LCD バックライトの調光値を 0(オフ)から 100(オン)で設定します。引数を渡さない場合は現在のバックライト値を取得します。
DACBacklightまたはPWMBacklightコントローラがコンストラクタに渡されない限り、バックライトは GPIO ピンとして制御され、0(オフ)から非ゼロ(オン)の間でのみ動作します。
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
DSI コマンド
cmdをディスプレイに送信します。argsはコマンドパラメータを含むオプションの整数またはバッファです。dcsが True の場合、コマンドを DCS(Display Command Set)パケットとして送信します。