みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

PlatfromIOでArduino UNO + 2.4 TFT LCD Shield(ILI9341)を動かす

はじめに

SPI接続のILI9341のLCDが欲しくてこれを買ったがSPIではなく届いてみると8ビットパラレルのモジュールだったので絶望した。

きっとポチッとしたときは眠たかったんだと思う。

しかし買ってしまったものは仕方ないので動かしてみることにした。

PlatformIOのインストール

pipでインストールできる。

$ pip3 install platformio --user

ライブラリ

2.4 TFT LCD Shieldを駆動するためのライブラリはAdafruit-TFT-LCDを使う。

ライブラリのインストールはpio lib installで行う。依存関係もこのコマンドで解決される。

環境構築

ベース環境の構築

PlatformIOで環境を構築する。ライブラリのインストールもここで行う。

$ mkdir uno_r3
$ cd uno_r3
$ pio init -b uno
$ pio lib install "adafruit/Adafruit-TFT-LCD"

platformio.iniの修正

依存関係を追加しないとビルドが失敗するので、下記のようにする。

[env:uno]
platform = atmelavr
board = uno
framework = arduino
lib_deps = 
    adafruit/Adafruit-TFT-LCD@0.0.0-alpha+sha.9b701b6d5a
    adafruit/Adafruit BusIO
    Wire
    SPI

サンプルソースのコピー

graphicstestのサンプルをビルドするためソースをsrcディレクトリにコピーする。

$ cp .pio/libdeps/uno/Adafruit-TFT-LCD/examples/graphicstest/graphicstest.ino ./src

修正

このシールドはパチモンなので、チップのデバイスIDチェックの結果が残念なことになる。

そのため、IDを0x9341(ILI9341)に固定する必要がある。

--- graphicstest.ino~    2020-10-16 09:23:26.419496756 +0900
+++ graphicstest.ino  2020-10-16 09:28:54.187508970 +0900
@@ -57,7 +57,7 @@ void setup(void) {
 
   tft.reset();
 
-  uint16_t identifier = tft.readID();
+  uint16_t identifier = 0x9341;
 
   if(identifier == 0x9325) {
     Serial.println(F("Found ILI9325 LCD driver"));

ビルドおよび書き込み

次のコマンドでビルドする。

$ pio run

ターゲットへの書き込みは次のようにする。

$ pio run -t upload

まとめ

ILI9341(8ビットパラレル)のLCD ShieldをArduino UNOで試してみた。

パチモンのため、デバイスIDのチェックが機能しないためIDを固定する必要があるので注意。

それ以外は問題なく動いているようだ。

参考