MicroPython + ST7735でのbitmap画像表示

前回、ArduinoのサンプルにあるgraphicstestをMicroPythonに移植したので、ついでに同じくAdafruitのビットマップファイルの表示のサンプルも移植してみました。

ST7735で画像を表示するには、表示させたい矩形領域を指定した後、その領域のピクセルをまとめて転送します。矩形領域の指定と1ピクセルの転送は、ST7735のドライバに_setwindowlocと_pushcolorというメソッドが定義されていますので、これを使います。
1ピクセルは16ビットで、24ビットカラーからの変換関数は同じくドライバ内に用意されています。

画像ファイルが「RGBRGB…」というデータの羅列だとすると、このファイルを読み出してLCDに表示するコードは以下のような感じになります。
ここでは画像ファイルが128×160ピクセルであると仮定しています。

bitmap形式のファイルは、画像サイズや圧縮形式などを記述したヘッダが付きますが、非圧縮のbitmapファイルであればファイルの中身は上記と大差ありません。(ピクセルの並びはBGRBGR…となります)
上のコードにヘッダ部分の処理を追加して、bitmap形式のファイルを表示するサンプル「tftbmp.py」も下記のリポジトリに追加しました。

boochow/MicroPython-ST7735

LCDとESP32との結線は以前と同じですが、再掲します。
なお、ここで使っている1.8インチTFT LCDモジュールのFritzing用データはこちらに置きました。

esp32-st7735r-breadboard.png

このサンプルを動作させるには、ビットマップファイルを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というのもあるようです。

最後に、動作している様子の動画を載せておきます。

ESP32 MicroPython drawing bitmap on ST7735 TFT LCD

コメント