ArduinoでAdafruit 240x320 2.0" TFTを使う
Adafruit社のSPI接続グラフィックLCDモジュールには、Arduinoの用のライブラリがある。使い方はライブラリ内のReadmeとソースコードに書いてある通りだが、備忘録として接続〜サンプル表示までを記述する。
なお、対象のLCDモジュールにはSDカードスロットがあるが、今回は使わない。
使うもの
下記を使った。LCDモジュールはDigikeyで購入。
- Adafruit 240x320 2.0" TFT
- Arduino UNO R4 MINIMA
- ブレッドボード、ジャンパーワイヤーを適当に
結線
今回はブレッドボードを使って接続するので、まずはLCDモジュールにピンヘッダーをはんだ付けした。
結線は下記の通りに。LCDに表示するだけなら受信はしないので、MISOは不要。
開発環境
Arduinoなので素直にArduino IDEを使う。ビルドにはAdafruitのST7735・ST7789用ライブラリが必要になる。Arduino IDEのライブラリ検索でST7735などと入力すると下記が見つかるはずなので、これをインストールする。依存関係で他に必要なライブラリがある場合にはそれも入れる。
このライブラリのexampleフォルダにサンプルコードが入っていて、これを使えば動作確認はできる。
スケッチの書き込み
とりあえずサンプルコードを動かしてみる。ライブラリのexampleフォルダから適当なサンプルを選ぶ。今回はLCDの表示だけをやってくれそうなgraphicstestを使ってみる。
IDEでgraphicstest.inoの内容を新しく作ったスケッチにコピペする。ライブラリのスケッチ例を使っても良い。一旦そのままビルドしてみたらエラーはなかったので、arduinoに書き込んでみたものの、表示が崩れていた。
ソースコードを眺めてみると、「OR use this initializer (uncomment) 」といったコメントが散見される。なるほど、使うモジュールによって変更しろってことか。
まずは65行目辺りのデバイスごとにクラスを分けてる部分を変更する。元から有効になっているST7735の宣言はコメントアウトして、ST7789のコメントを解除した。
// For 1.44" and 1.8" TFT with ST7735 use:
// Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// For 1.14", 1.3", 1.54", 1.69", and 2.0" TFT with ST7789:
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
次は90行目あたりのスクリーンサイズ指定を変更する。今回は240x320なので、tft.init(240, 320)を有効にする
// Use this initializer if using a 1.8" TFT screen:
// tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
// 省略
// OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
tft.init(240, 320); // Init ST7789 320x240
// 省略
元のソースコードから変更したのはこれだけ。ビルドして書き込んだら表示のズレもなく動いたので、これで動作確認はOKとする。
おわりに
ArduinoでこのLCDモジュールを使っている人(情報)がなかなか見つからなくて苦労したけど、ライブラリの中を見たらあっさり動いた。
そもそもこのLCDを買った目的はSTM32F446でI2C接続のキャラクタLCDよりも多くの文字を表示したいからで、ArduinoはあくまでLCDの動作確認(不良品じゃないかの確認)が目的なので、これからが本番というところ。うまくいったらまた書くかも。
Discussion