ArduinoでST77xxフルカラー液晶を動かす

フルカラーの液晶ディスプレイが今どきはAliexpressで送料込み2,3百円で買える。

SPIインタフェースなのでラズパイを始め色々なマイコンで使えそうだが、今回はGitHubに公開されているArduino用のドライバを使って動作テストを行ったので、記事にまとめた。

Arduinoは例によってAVRマイコンAtmega328にブートローダーを書き込んでArduino UNO相当として使えるものを使った(関連記事1,記事2)。また、ディスプレイの電源は3.3VのためAVRマイコンは8MHz動作に設定しマイコンの電源も3.3Vとした。

スポンサーリンク

ST7789搭載の240×240液晶

上記販売ページで”1.3 TFT”を選択するとST7789搭載の240×240ドットの物が届く。

使用したドライバと配線方法

ドライバは以下の物を利用した。

上記ドライバはAdafruit GFXライブラリを参照しており、以下もインストールしておく。

ハードウエアSPIの信号線(SCK,MOSI)のArduino側ピンは固定。DCとRSTは動かすサンプルプログラムによって設定がまちまちなので、適宜スケッチの#defineマクロを変更するなり配線の変更なりを行う。

ST7789液晶AVRマイコン#defineマクロ名
SCLSCK(D13)
SDAMOSI(D11)
DCD8などTFT_DC
RSTD9などTFT_RST

サンプルプログラムの動作

上記Arduino_ST7789_FastをGitHubからダウンロードするとexampleディレクトリに便利そうなサンプルプログラムがいくつか付いている。

  • benchmark – 様々な描画を行い描画時間を計測
  • bitmap – 小さなマリオのビットマップが画面いっぱいに描画される
  • numeric display – 数値を見やすくリアルタイム表示
  • terminal – エスケープシーケンスを使ったカラー文字表示(vt100)

この中で特に気に入ったのはnumeric display(ディレクトリST7789_Numeric_display)で、下の写真のように色々な数値を色分けで表示される。何かの測定値をモニターするのに使ったら見やすそう。

こちらのディスプレイの消費電流は25〜30mA前後と少し大き目だ。

ST7735搭載の128×128液晶

上記販売ページで”1.44 TFT”を選択するとST7735搭載の128×128ドットの物が届く。

使用したドライバと配線方法

ドライバは以下の物を利用した。

こちらもAdafruit GFXライブラリを参照しているので、インストールしておくこと。

ハードウエアSPIの信号線(SCK,MOSI)は固定で、他の制御線は適当にデジタルピンを割り当ててスケッチの#defineマクロで指定するのは上記と同様だ。配線は例えば以下のようにする。

ST7735S液晶AVRマイコン#defineマクロ名
SCLSCK(D13)
SDAMOSI(D11)
CSD10などTFT_CS
RSTD9などTFT_RST
A0D8などTFT_DC

ST7735の初期化コードはinitRメソッドで、引数に渡すハードウエアのIDとして画面のドット数が同じ物選択する必要がある。今回購入した128×128ドットの物はINITR_144GREENTABやINITR_HALLOWINGなので、どちらかを指定すれば動作させることが出来た。

   tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab

このドライバはST7789にも対応しているようなので上記のST7789の物でもコードを変更すれば動作すると期待したものの、何故か動作しなかった。

バックライト電源供給ピン

さて、このディスプレイにはLEDという名前のピンが出ていて、ここからバックライトへの電源供給をする必要がある。100Ωを介して3.3Vに接続すれば十分な明るさが得られるがディスプレイの消費電流が約7mA程度になる。試しに680Ωにしてみたところ、ディスプレイ表示が辛うじて見える程度の暗い表示になってしまったが消費電流は2.5mA位に落とすことが出来た。暗くても構わないからとにかく電力を抑えたい場合には電源とLEDピンの間に大きめの抵抗を挟むと良いだろう。

サンプルプログラムの動作

Arduino_ST7789_Fastとは異なり、こちらのサンプルプログラムは普通のベンチマークしか無かった。それでも、カラーでテキスト表示したい場合にプログラムの一部を切り出して使えるだろう。

まとめ

今回は、ST7789とST7735をそれぞれ搭載したディスプレイ2種類をArduinoで動作させてみた。どちらも300円を切る低価格なので本当に動くのか半信半疑だったが、無事動作させる事が出来た。

使用したドライバのサンプルプログラムはST7789の方が種類が多く色々流用出来そうな一方、ST7789は消費電力が30mA近くと少し大き目なのは欠点と感じた。

ST7735の方が10mA未満と比較的低消費電力で、しかもバックライトの電源供給ピンと電源との間の抵抗値で調節出来るのは便利そう。ただ、こちらはドライバ付属のサンプルプログラムがあまり充実していなかった。

今回試用したドライバはいずれもAdafruit GFXライブラリを利用していて、グラフィック関連は共通のAPIが使われているようだ。今回は詳しく確認していないが、ひょっとするとST7789用のサンプルプログラムをST7735用に移植することが出来たりするのかもしれない。本格的にディスプレイを利用する時になったら検討しようと思う。

コメント