[SPI] 2.2 inch TFT ディスプレイ (ILI9341)

2.2 inch の TFT ディスプレイです。3.3V 動作なので注意が必要です。



購入

Amazon 等で購入できます (購入時価格: ¥968)。

パッケージには、

2.2寸SPI串口模块
分辨率: 320x240

とあります。日本語訳すると、

2.2 インチ SPI シリアル モジュール
解像度: 320x240

といった所でしょうか。

小ネタ

See Also:



動作確認

5V 系の Arduino と接続するには、microSD カードの接続を行うのにも使ったロジックレベル変換モジュールが必要になります。

ご覧の通り、ちょっと面倒 (抵抗分圧でやろうとするとさらに面倒) な接続になるため、3.3V 系の Arduino と接続する事をオススメします。

以下は 3.3V 系ボードへ直結するためのピンアサインです。

TFT Arduino UNO ESP-WROOM-02 ESP-WROOM-32 STM32F103 micro:bit
1 VCC 3V3 / VCC 3V3 / VCC 3V3 / VCC 3V3 / VCC 3V3 / VCC
2 GND GND GND GND GND GND
3 CS 10 IO15 IO5 (VSPICS0) PA_4 16
4 RESET 8 IO5 IO16 PA_3 12
5 DC 9 IO4 IO17 PA_2 2
6 MOSI 11 IO13 (MOSI) IO23 (VSPID) PA_7 (MOSI) 15 (MOSI)
7 SCK 13 IO14 (SCK) IO18 (VSPICLK) PA_5 (SCK) 13 (SCK)
8 LED 3V3 / VCC 3V3 / VCC 3V3 / VCC 3V3 / VCC 3V3 / VCC
9 MISO 12 IO12 (MISO) IO19 (VSPIQ) PA_6 (MISO) 14 (MISO)

Arduino UNO 互換機の中には 5V / 3.3V を切り替えられるものがあり、このタイプだとロジックレベル変換モジュールは不要です。

この TFT モジュールを使うのに必要なライブラリは以下の2つです。Arduino IDE の libraries フォルダにコピーしてください (zip で取得したのであれば [スケッチ | ライブラリをインクルード | .zip 形式のライブラリをインストール...] からでも OK)。

サンプルスケッチは graphicstest.ino ですが、このままではうまく動きませんので少し修正します。

// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

RESET の定義を追加してやります。

Arduino (UNO)

// For the Adafruit shield, these are the default.
#define TFT_RST 8 // 追加
#define TFT_DC 9
#define TFT_CS 10

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

ESP-WROOM-02

// For the Adafruit shield, these are the default.
#define TFT_RST 5 // 追加
#define TFT_DC 4
#define TFT_CS 15

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

ESP-WROOM-32

// For the Adafruit shield, these are the default.
#define TFT_RST 16 // 追加
#define TFT_DC 17
#define TFT_CS 5

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

STM32F103

// For the Adafruit shield, these are the default.
#define TFT_RST 3 // 追加
#define TFT_DC 2
#define TFT_CS 4

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

micro:bit

// For the Adafruit shield, these are the default.
#define TFT_RST 12 // 追加
#define TFT_DC 2
#define TFT_CS 16

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

micro:bit (nRF51) の場合には Adafruit_ILI9341.h も修正する必要があります。

  ...

#if defined(ARDUINO_STM32_FEATHER)
typedef volatile uint32 RwReg;
#endif
#if defined(ARDUINO_FEATHER52) || defined (ARDUINO_MAXIM) || defined (NRF51)
typedef volatile uint32_t RwReg;
#endif

  ...

#if defined (ARDUINO_STM32_FEATHER) || defined (ARDUINO_MAXIM) || defined (NRF51)   // doesnt work on wiced feather
  #undef USE_FAST_PINIO
#elif defined (__AVR__) || defined(TEENSYDUINO) || defined(ESP8266) || defined (ESP32) || defined(__arm__)
  #define USE_FAST_PINIO
#endif

  ...

上記コードの直下でコメントアウトしてある "引数を 6 個取るコンストラクタ" の書き方だとソフトウェア SPI になってしまい、速度が極端に低下しますのでご注意下さい。

TFT モジュールと 5V 系 Arduino (UNO 互換機) を接続してみたところです...5V 系だとゴチャゴチャしますね。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: