ESP32と ILI9488ドライバでTFTを動かすには?

esp32とILI9488ドライバー搭載の3.5インチ 480×320 TFT LCDモジュールの設定と注意点などまとめました。

ILI9488 3.5インチ 480×320 TFT LCD

3.5インチ 480×320 の TFT LCDモジュールを購入しました

高解像度タッチスクリーン、65Kカラーディスプレイ、SPIインターフェース搭載ということでしたのでつい手が出てしまいました ^^;

太陽熱温水器のコントローラーが調子悪かったので、この際TFTタッチスクリーンで自作しようという思いつきでの購入です

TFT ボタンスイッチを作成しました

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 ILI9488 3.5インチ 480x320 TFT LCD』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :3.5インチ 480×320 の TFT LCDモジュールを購入しました高解像度タッチスクリーン、65Kカラーディスプレイ、SPIインターフェース搭載ということでしたのでつい手が出てしまいました ^^;

TFTモジュールの購入は初めてになりますが結構大きめですね

包装シールにはドライバー:ILI9488 , Bus SPI ,Touch yes それに品番が記入されています

タッチスクリーンには保護シールが貼られていました

裏はこんな感じ

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 ILI9488 3.5インチ 480x320 TFT LCD』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :高解像度タッチスクリーン、65Kカラーディスプレイ、SPIインターフェース搭載ということで包装シールにはドライバー:ILI9488 , Bus SPI ,Touch yes それに品番が記入されていますタッチースクリーンには保護シールが貼られていました裏はこんな感じ

ピンが多いですね

TFT表示用とタッチ用ピンがあります

表示だけならタッチピンは使いません

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 ILI9488 3.5インチ 480x320 TFT LCD』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :高解像度タッチスクリーン、65Kカラーディスプレイ、SPIインターフェース搭載ということで包装シールにはドライバー:ILI9488 , Bus SPI ,Touch yes それに品番が記入されていますTFT表示用とタッチ用ピンがあります表示だけならタッチピンは使いません

esp32 tftタッチシールド の使い方 ① ボタン作成

HSPIとVSPI

このTFTモジュールはバスSPI規格で通信するということでこれまで使ってきたI²Cとはやや勝手が違いました

ネット情報では HSPI接続されているようで、しかもMISOは使わないとか??

最も使っても使わなくてもTFTの表示はされます

ということでHSPIとVSPIについてまとめると…

esp32には3つのSPIがある
① SPI0 これは内部専用で使えない
② HSPI (Host SPI)ユーザー使用可能
③ VSPI (Virtual SPI)ユーザー使用可能

シリアル通信にSerial2などあるようにSPIも2つ用意されています

TFT接続にはどちらを使っても問題なく動作します

カズはヘッダファイル記載のようにVSPIを使いました

これには理由もあって…

このTFTモジュールでお風呂の温度や太陽熱温水器の湯量や温度を表示したり水やお湯を流す電磁弁の操作するために2台のesp32を使います

esp32同士の通信にはespnowというルーターに依存しない通信を使うのですがWIFI使用中は使えるピンが2~3しかないことが判っています

ということで使えるGPIOピン側を空けています

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 HSPIとVSPI』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :このTFTモジュールはバスSPI規格で通信するということでこれまで使ってきたI²Cとはやや勝手が違いましたネット情報では HSPI接続されているようで、しかもMISOは使わないとか??シリアル通信にSerial2などあるようにSPIも2つ用意されていますTFT接続にはどちらを使っても問題なく動作しますesp32同士の通信にはespnowというルーターに依存しない通信を使うのですがWIFI使用中は使えるピンが2~3しかないことが判っています

HSPI VSPI GPIOピン

TFTとesp32の接続でCSピンは他のピンでもほぼ使えます(esp32で制限されていないピンならOKです)

PIN HSPI VSPI
MOSI 13 23
MISO 12 19
CLK 14 18
CS 15 5

TFT_eSPIライブラリをダウンロード

TFTを動かすためにTFT_eSPIマスターファイルをダウンロードします

上のリンク先からCode をクリックしてZIPファイルをダウンロードします

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 TFT_eSPIライブラリをダウンロード』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :TFTを動かすためにTFT_eSPIマスターファイルをダウンロードします

arduinoIDEから「スケッチ」 ⇒ 「ライブラリをインクルード」 ⇒ 「ZIP形式のライブラリをダウンロード」と進み、先程DLした TFT_eSPI-master zip を選択します

TFT_eSPI-master

このTFT_eSPI-masterファイルは殆ど全てのドライバーやマイコンに対応するように作られています

そのため記述はありますが全てコメント形式になっているので必要な部分だけコメント // を外して使います

インストールされたファイルは「libraries」フォルダの中の「TFT_eSPI_master」フォルダにあります

User_Setup h ファイル

TFT_eSPI_masterを開いてUser_Setup hファイルを開きます

修正する箇所は2箇所でデフォルト設定を先ず// でコメントアウトします

45 行 #define ILI9341_DRIVER ⇒ // #define ILI9341_DRIVER (先頭に半角でダブルスラッシュ // を入れる)

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 User_Setup h ファイル』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :TFT_eSPI_masterを開いてUser_Setup hファイルを開きます修正する箇所は2箇所でデフォルト設定を先ず// でコメントアウトします45 行 #define ILI9341_DRIVER       // Generic driver for common displays

170〜176行 #define TFT_MISO PIN_D6 から #define TFT_RST PIN_D4 までをドライバーと同様の処理をする

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 User_Setup h ファイル』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :170〜176行 #define TFT_MISO  PIN_D6  から #define TFT_RST   PIN_D4  までをドライバーと同様の処理をする

初期設定を使えないように上書き保存して完了です

次にesp32のGPIOとILI9488ドライバーのコメントを外します

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 User_Setup h ファイル』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :TFT_eSPI_masterを開いてUser_Setup hファイルを開きます修正する箇所は2箇所です① ILI9488_DRIVER のコメントを外す

コメントを外しTFTのILI9488ドライバーを選択します

② GPIPピンを指定する

TFTのCSピンやMOSIピンとesp32で使用するGPIOピンを設定します

212行あたりになります

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 User_Setup h ファイル』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :② GPIPピンを指定するTFTのCSピンやMOSIピンとesp32で使用するGPIOピンを設定します221行あたりになります

これも上書き保存して完了です

一部コメントアウトだけではなくGPIOピンを変更していますがタッチ設定との兼ね合いです ^^;

特にGPIO 2 はプログラムの書き込みに影響することがあるので注意が必要です

TFT_MISO 19 はコメントアウトしたままでもTFTの動作には影響しませんがタッチ設定では必要になります

タイトル :『 ESP32と ILI9488ドライバでTFTを動かすには?』見出し:『 User_Setup h ファイル』関連する重要なキーワード important!:『esp32,ILI9488,ドライバ、TFT,tft,タッチ,TOUCH,動かない、e_SPI,タッチパネル、液晶モジュール』画像の説明文 :一部コメントアウトだけではなくGPIOピンを変更していますがタッチ設定との兼ね合いです ^^;特にGPIO 2はプログラムの書き込みに影響することがあるので注意が必要ですTFT_MISO 19 はコメントアウトしていてもTFT動作には影響しませんがタッチ設定では必要になります

TFT サンプルスケッチ

簡単なサンプルスケッチです ^^;

1
2
3
4
5
6
7
8
9
10
11
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.drawString("Hello ILI9488 World!", 50, 100, 4);
}
void loop() {
}

ESP32と ILI9488でTFTが動いた!まとめ

サンプルスケッチは簡単なお決まりの呪文、Hello World のTFTバージョンです ^^;

esp32 で動作確認済みですのでGPIOピンを設定したら試してみてください

TOUCH タッチ設定は近日アップしますので見てねっ !

iotおうち栽培

Posted by Kazu