LCDモジュールを使う(ILI9341)

コンピュータ、組み込み

LCDモジュールの表示制御をします。
LCDモジュールは多種ありますが、今回比較的中型のILI9341ドライバ搭載モデルを紹介します。

今回紹介するもの

LCDモジュール (ILI9341) 2.4inch

特徴

Arduino環境で使用できる液晶カラーモニタとしては中型の2.4inch サイズです。
画面描画命令をSPIを使った通信で表示を行います。
SDカードスロットがついていますが、モニタ部とは独立していています。
電源とGNDは共通ですが、SPI配線と命令は通常のSDカードモジュールを制御するのと同じです。
感圧式タッチパネルによりタッチ操作ができます。

注意
ILI9341搭載モデルでも、SDカードスロットの無いモデルや、タッチパネルの無いモデルは販売されています。
購入の際には商品画像だけでなく、商品紹介にSDカードスロットやタッチパネルについて記載のあるものを確認してください。

製品情報
サイズ2.2, 2.4, 2.8, 3.2inch (今回 2.4インチの紹介)
解像度(X, Y)240, 320
通信方式SPI
ドライバILI9341
動作電圧3.3~5V
その他SDカードリーダ
感圧式タッチパネル
外観

前面

背面

これまで使用してきたST7735と比べてみると一回り大きいです。
ピン数はタッチパネル分増えていますが、LCDのみであれば同じピン数で使用できます。

使用感

ILI9341ドライバを搭載するLCDモジュールは、中型(2.4inch~3.2inch)に使用されています。
解像度もST7735より高いので、画像の表現力が上がります。

ST7735くらいだとソフトウエアSPIでも我慢できる速度ですが、ILI9341クラスになるとハードウエアSPIを使用しないと表示がもたつきます。

本記事ではまだ紹介していませんが、感圧タッチパネルの感度はそれほど良くないので指先未満のポイント指定には不向きです。
少しシートのたわみも気になります(複数所有していますが、どれも同じくらいです)

小型サイズLCD ST7735はこちらで紹介しています。

準備

ライブラリ

LCDを制御するためのライブラリにはAdafruit製ライブラリを使用します。

ライブラリ名検索確認時バージョン
Adafruit GFX Library by AdafruitGFX1.11.3
Adafruit ILI9341 by AdafruitILI93411.5.12

Adafruit ILI9341 by Adafruitライブラリをインストールすると、依存ライブラリが不足している場合不足している依存関係のインストールの問い合わせがあります。
「すべてをインストール」を選択してください。

使い方(LCD表示)

サンプルの表示はテキストの表示のみです。
各マイコンでのSPIの設定方法について記述します。
そのほかの描画サンプルについては
スケッチ例 > Adafruit ILI9341 > graphictest を参照してください。

YD-RP2040 SPI0(SPI1)でLCD表示

説明

サンプルは、”TAMANEGI”の文字列を表示します。
RP2040系のSPIの設定方法についての参考にしてください。

SPI1を使用する場合SPI1の記述のコメントを解除し、SPI0をコメント化してください。

配線

SPI0を使う場合のサンプルです。
サンプルはYD-RP2040を使用した場合ですので、別のRP2040基板を使用する場合はマイコン基板のピンアサイン表を参照して配線してください。

YD-RP2040配線ILI9341
3.3VVCC
3.3VLED
GNDGND
GP1(SPI0 CS)CS
GP28Reset
GP27D/C
GP3(SPI0 TX)SDI(MOSI)
GP2(SPI0 SCK)SCK

スケッチ

/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
RP2040搭載基板で利用できます。

例 : Raspberry Pi Pico

【スケッチの説明】
ILI9341 LCDの制御をします。
SPIは SPI0とSPI1のどちらのサンプルも掲載しますが、
SPI1側はコメントアウトしますので、状況に応じてコメントを外してください。
※コメント検索 [SPI1の場合]

【ライブラリ】
例 Raspberry Pi Pico / RP2040 > Raspberry Pi Pico

【準備】
マイコン基板 <-> ILI9341
3V3               <-> VCC
GND               <-> GND
GPIO1(SPI0 CS)    <-> CS
GPIO28            <-> Reset
GPIO27            <-> AO
GPIO3(SPI0 MOSI)  <-> SDA
GPIO2(SPI0 SCK)   <-> SCK

SPI1の場合
3V3               <-> VCC
GND               <-> GND
GPIO13(SPI1 CS)   <-> CS
GPIO28            <-> Reset
GPIO27            <-> AO
GPIO14(SPI1 MOSI) <-> SDA
GPIO15(SPI1 SCK)  <-> SCK

【バージョン情報】
2022/10/30 : 新規
**********************************************************************/

#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <SPI.h>

//SPI0の場合
#define TFT_CS          1   // CS
#define TFT_RST         28  // Reset 
#define TFT_DC          27  // D/C
#define TFT_MOSI        3   // SDI(MOSI)
#define TFT_SCK         2   // SCK

//SPI1の場合
// #define TFT_CS          13  // CS
// #define TFT_RST         28  // Reset 
// #define TFT_DC          27  // D/C
// #define TFT_MOSI        15  // SDI(MOSI)
// #define TFT_SCK         14  // SCK

//SPI0の場合
//Adafruit_ILI9341 tft = Adafruit_ILI9341(&SPI, TFT_DC, TFT_CS, TFT_RST);

//SPI1の場合
//Adafruit_ILI9341 tft = Adafruit_ILI9341(&SPI1, TFT_DC, TFT_CS, TFT_RST);

//ソフトウエアSPIの場合
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCK, TFT_RST, -1);


void setup(void) 
{
  //SPI0の場合
  SPI.setTX(TFT_MOSI);
  SPI.setSCK(TFT_SCK);

  //SPI1の場合
  // SPI1.setTX(TFT_MOSI);
  // SPI1.setSCK(TFT_SCK);
   tft.begin();
  
  tft.fillScreen(ILI9341_BLACK);               //背景の塗りつぶし

  //テキスト表示
  tft.setRotation(3);                         //画面回転
  tft.setTextSize(3);                         //サイズ

  tft.setCursor(0, 20);                      //カーソル位置                      
  tft.setTextColor(ILI9341_RED);              //赤
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ILI9341_GREEN);            //緑
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ILI9341_BLUE);             //青
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ILI9341_YELLOW);           //黄
  tft.printf("TAMANEGI\n");
}

void loop()
{
}

結果

LCDの表示ができました。

ライセンスについて

MIT License および ST7735/ST7789

Raspberry Pi Pico関連リンク

コメント

タイトルとURLをコピーしました