👏

ArduinoでAdafruit 240x320 2.0" TFTを使う

2024/12/14に公開

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