前回、ArduinoのサンプルにあるgraphicstestをMicroPythonに移植したので、ついでに同じくAdafruitのビットマップファイルの表示のサンプルも移植してみました。
ST7735で画像を表示するには、表示させたい矩形領域を指定した後、その領域のピクセルをまとめて転送します。矩形領域の指定と1ピクセルの転送は、ST7735のドライバに_setwindowlocと_pushcolorというメソッドが定義されていますので、これを使います。
1ピクセルは16ビットで、24ビットカラーからの変換関数は同じくドライバ内に用意されています。
画像ファイルが「RGBRGB…」というデータの羅列だとすると、このファイルを読み出してLCDに表示するコードは以下のような感じになります。
ここでは画像ファイルが128×160ピクセルであると仮定しています。
bitmap形式のファイルは、画像サイズや圧縮形式などを記述したヘッダが付きますが、非圧縮のbitmapファイルであればファイルの中身は上記と大差ありません。(ピクセルの並びはBGRBGR…となります)
上のコードにヘッダ部分の処理を追加して、bitmap形式のファイルを表示するサンプル「tftbmp.py」も下記のリポジトリに追加しました。
LCDとESP32との結線は以前と同じですが、再掲します。
なお、ここで使っている1.8インチTFT LCDモジュールのFritzing用データはこちらに置きました。
このサンプルを動作させるには、ビットマップファイルをMicroPythonのファイルシステムに書き込む必要があります。
uPyCraftはバイナリファイルの転送には向かないので、Adafuit製のツール「ampy」を使いました。
このツールはPythonスクリプトなので、LinuxなどPythonが動作する環境が前提となります。
ツールの解説は以下にあります。
Overview | MicroPython Basics: Load Files & Run Code | Adafruit Learning System
このツールはファイルの転送コマンド「get」「put」があります。
ホスト側からMicroPython側へファイルを転送するには、
$ ampy -p /dev/ttyUSB0 put test128x160.bmp
のようにします。
なお、ファイルの転送には結構時間がかかりますので、気長に待つ必要があります。
Windowsで使えるアップロードツールとしては、MicroPython File Uploaderというのもあるようです。
最後に、動作している様子の動画を載せておきます。
コメント