MicroPython + ST7735でのグラフィックス速度テスト

以前、以下の記事でMicroPythonからTFT LCDへの表示を行っています。

TFT LCD(ST7735R)をMicroPythonで動かしてみた: 楽しくやろう。

しかし、この記事で使っていたAdafruitのライブラリは矩形と水平線・垂直線しか描画できませんでしたので、他のライブラリを探してみたところ以下のライブラリが見つかりました。
(他にhosaka/micropython-st7735というのも見つかりましたが、こちらは描画プリミティブはAdafruit版とあまり変わらないようです)

MicroPython/ST7735.py at master · GuyCarver/MicroPython

このライブラリは円やテキスト表示も実装されています。
テキスト表示のフォントデータは、同じリポジトリにsysfont.py、seriffont.py、terminalfont.pyが置かれています。

ただ、このライブラリは作られた時期が2014/11/25と古く、ハードウェアもPyBoardを想定しているようです。そのため、現バージョンのmicropython-esp32で動作するように修正しました。
修正版は以下にアップロードしてあります。

boochow/MicroPython-ST7735

テストプログラムとして、Arduino用ST7735ライブラリに付属していたgraphicstestスケッチを移植してみました。
ただし三角形や角丸矩形は無いので、それぞれ線分の描画や矩形描画で代用しています。また、三角形の塗りつぶしはできないので、省略しました。

このテストプログラムも上記のリポジトリにアップロードしてあります。
動作の様子を載せておきます。

Arduinoよりも遅いですが、MicroPythonで描かれていることを考慮すればこんなものかもしれません。
ただ、少なくとも塗りつぶしはもっと高速にできるはずで、改善の余地がありそうです。
ST7735へのデータ送信は、矩形領域を設定した後、その領域に書き込むデータをSPIで連続して書き込む部分だけがネイティブコードで実行されています。
この連続書き込みの部分を高速化できればかなりの速度向上が見込めるのではないかと思います。

追記:
とりあえず、塗りつぶしの際にループで1ピクセルずつ送っていた処理を32ピクセルずつ処理するようにしてみました。
これだけでもfillrectとhline、vlineはかなりスピードアップしました。
文字表示とlineは、いずれも1ピクセルずつ描画するような実装になっており、現時点では高速化できていません。

コメント