ESP32-DevKitCと2.8インチ液晶モジュール(240×320、タッチパネル、SDカード)をSPI接続して動作確認

ILI9341を搭載した240×320の2.8インチTFT液晶モジュールをESP32-DevKitCにSPI接続して動作確認した際の作業メモです。液晶とタッチパネルはVSPI、SDカードはHSPI接続です。TFT_eSPIライブラリ(User_Setup.hの設定変更が必要)を使って、液晶表示、タッチパネル、SDカードの動作を確認しました。

スケッチ(2)を実行中:カウントアップしていく数字を画面表示
SDカードへのファイル書き込みとTFT液晶にその進行表示を行うスケッチ(2)を実行中
目次

2.8インチ液晶モジュール(ILI9341)、タッチパネル(XPT2046)、SDカードスロット

2.8インチ液晶モジュールには、ドライバーICとしてILI9341を使った240×320の液晶モジュールに加えて、XPT2046を使ったタッチパネル、SDカードスロットが実装されています。

秋月電子通商サイトに「3.3Vで使用する場合はJ1をショートさせて三端子レギュレータ(U1)をバイパスさせてください。」とあったので、J1のランドパターンをはんだ付けしてショートします。

SDカード側コネクタ(J4)にはピンヘッダが未実装なので手持ちのピンヘッダをはんだ付けします。

2.8インチ液晶モジュール基板のJ1ランドパターン
基板裏面のJ1のランドパターン(黄色の点線枠)

参考:
ILI9341搭載2.8インチSPI制御タッチパネル付TFT液晶(akizukidenshi.com)
2.8inch SPI Module ILI9341 SKU-MSP2807 – LCD wiki(回路図)

ESP32-DevKitCと4線式SPIで接続(液晶とタッチパネルはVSPI、SDカードはHSPI)

ESP32-DevKitCにはユーザが利用できる4線式SPIとしてVSPIとHSPIの2つがあります。液晶とタッチパネルはVSPI、SDカードはHSPIで接続しました。この液晶モジュールのロジックレベルはESP32-DevKitCと同じ3.3Vなのでレベルシフターなしで直結できます。

液晶とタッチパネル側のコネクタ(J2)のGPIOへのピンアサインです。MOSI、MISO、SCKの3線は液晶とタッチパネルで共通、CS信号で切り替えます。VCCとGNDはモジュール内の液晶、タッチパネル、SDカードで共通です。

モジュールのシルク印刷VSPIその他接続したGPIO番号
1VCC(共通) 3.3V3V3
2GND(共通) GNDGND
3CSCS 5
4RESET RESETEN
5DC DC32
6SDI(MOSI)MOSI23
7SCKSCK18
8LEDバックライト3V3
9SDO(MISO)MISO 19
10T_CLKSCKタッチパネル18
11T_CSCSタッチパネル4
12T_DINMOSIタッチパネル23
13T_DOMISOタッチパネル19
14T_IRQタッチパネル未接続

SDカード側のコネクタ(J4)のGPIOへのピンアサインです。

#モジュールのシルク印刷HSPI接続したGPIO番号
1SD_CSCS(Chip Select) 15
2SD_MOSIMOSI (Master Out Slave In)13
3SD_MISOMISO (Master In Slave Out)33
4SD_SCKSCK(Serial CLocK)14

動作確認できた現在の結線図です。SDカードスロットの動作はSD_MISO(GPIO33)を1kΩの抵抗でプルアップすることで安定しました。他の3線には基板裏面に1KΩのチップ抵抗が入っています(終端抵抗?)。SD_MISOは基板表面側に配線パターンが走っていますが他の3線にあるチップ抵抗は無いようです。
通信線には短めの長さ10cmのジャンパーワイヤを使っています。

動作確認できた現在の結線図
動作確認できた現在の結線図

参考:
ESP32-DevKitC ESP-WROOM-32開発ボード回路図 | akizukidenshi.com
ESP32-DevKitC-1 pin-layout | espressif.com
2.8inch SPI Module ILI9341 SKU-MSP2807 – LCD wiki(回路図)

TFT_eSPIライブラリのインクルード、User_Setup.hの編集

ESP32-DevKitCの開発ツール arduino-esp32 をインストールしたArduino IDEに、TFT_eSPIライブラリをインクルードします。手順メモを纏めました。

あわせて読みたい
ESP32-DevKitCの開発ツール arduino-esp32 のインストール手順 Arduino IDE上で動作する ESP32-DevKitC の開発ツール arduino-esp32(Arduino core for the ESP32)をインストールした際の手順メモです。 【ESP32-DevKitC の開発ツー...

TFT_eSPIライブラリのインクルード

GitHubサイトからTFT_eSPIライブラリのzipファイル( TFT_eSPI-master.zip )をPCにダウンロードして保存(「Code」ボタンをクリックして「Download ZIP」)。Arduino IDEのメニューの「スケッチ」→「ライブラリをインクルード」→「.ZIP形式の ライブラリを インストール」で ダウンロードしたZIPファイルを追加します。

Bodmer/TFT_eSPI

https://github.com/Bodmer/TFT_eSPI

User_Setup.hのGPIO番号を結線した環境に合わせて設定変更

Arduino IDEのメニューからTFT_eSPIライブラリのzipファイルをインクルードすると「User_Setup.h」はWinsowsでは下記フォルダ配下にあります。

C:\Users\[ユーザー名]\Documents\Arduino\libraries\TFT_eSPI-master

液晶モジュールと接続したESP32-DevKitCのGPIO番号をUser_Setup.hの「// For ESP32 Dev board・・・」の行付近にある#defineを設定して、コメント(//)を外します。

左がUser_Setup.h のデフォルト。右側の黄色点線枠のGPIO番号を結線した環境に合わせて変更して、左端の//を削除して保存します。

User_Setup.h の編集
User_Setup.h の編集

スケッチでTFT液晶、タッチパネル、HSPI接続SDカードの動作確認

TFT_eSPIライブラリのサンプルスケッチ(1)を使ってTFT液晶とタッチパネルの動作を確認します。SDカードへの書き込みとTFT液晶表示はスケッチ(2)を作って確認しました。

(1)TFT_eSPIライブラリのサンプルスケッチ(Keypad_240x320.ino)

Arduino IDEのメニュー の「スケッチ例」–> TFT_eSPI –> Keypad_240x320 を選択すると、スケッチ「Keypad_240x320.ino」が開きます。実行すると、初回のみタッチパネルの四隅に矢印マークが順次表示されます。指示通りにタッチするとキャリブレーションされてタッチパッドとして使えるようになります。
キーバットから数字をタッチ入力してSendボタンをタッチすると、シリアルモニタにその値を表示できます。入力レスポンス、タッチ操作も良好です。

Keypad_240x320.inoを実行中
Keypad_240x320.inoを実行中
sendボタンで送信した数値がシリアルモニタに表示
sendボタンで送信した数値がシリアルモニタに表示

(2)HSPI接続SDカードへの書き込みとTFT液晶にその進行表示(2022/9/24 コード訂正)

SDカードへのファイル書き込みとTFT液晶にその進行表示を行うスケッチ(2)を作って動作確認しました。1秒毎に0から1づつ加算した数値をSDカードに記録しつつ、液晶パネルに大きな文字で表示します。240×320の解像度があるので文字の描画も精細です。

SDカードは事前にFAT32でフォーマットしておきます。SDカードのマウントに失敗した時は、赤文字で「Card Mount Failed」と表示します。

スケッチ(2)を実行中:カウントアップしていく数字を画面表示
スケッチ(2)を実行中:カウントアップしていく数字を画面表示
スケッチ(2)の実行結果:SDカードへの書き込み
スケッチ(2)の実行結果:SDカードへの書き込み

SDカードへのファイル書き込みとTFT液晶にその進行表示を行うスケッチ(2)です。

1行目に不要なコードの記述があったので削除しました(2022/09/24)。

esp32-devkitc_ili9341-sdcard_test.ino  ※ここをクリックするとコード表示を開閉できます。

#include <SD.h>
#include <TFT_eSPI.h> 
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();
SPIClass spiSD(HSPI);
int count=0;

void setup(void) {
// SDカード初期化
spiSD.begin(14, 33, 13, 15); //SCK,MISO,MOSI,CS
// TFT液晶初期化
  tft.init();
  tft.setRotation(1);
  tft.setTextSize(1);
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);
  tft.drawString("Initializing SD library & card", 0, 20, 4);
delay(1000);
// SDカードマウント確認
if (!SD.begin(15, spiSD)) {
  tft.setTextColor(TFT_RED, TFT_BLACK);
  tft.drawString("Card Mount Failed", 0, 50, 4);
return;
}
else  {
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);
  tft.drawString("Card Mount Successful", 0, 50, 4);
}
delay(1000);
// SDカードファイル書き込み
File dataFile = SD.open("/datalog.txt", FILE_WRITE);
dataFile.println("File written");
dataFile.close();
  tft.drawString("File written", 0, 80, 4);
}

void loop() {
// SDカードのdatalog.txtにcountを上書き
File dataFile = SD.open("/datalog.txt", FILE_APPEND);
dataFile.println(count);
dataFile.close();
// TFT液晶にcountを表示
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);
  tft.drawNumber(count, 0, 120, 8);
// カウントアップ
count++;
delay(1000);
}

本ブログ内の2.8インチ240x320TFT液晶対応スケッチ(2022/5/21追加)

本ブログ内のILI9341を搭載した2.8インチTFT液晶モジュールとESP32-DevKitC、ライブラリとしてTFT_eSPIを使ったスケッチ対応の作業メモです。
240×320の解像度を持つ2.8インチのTFT液晶は、日本語の画像表示もギザギザが少なく見やすいです。

あわせて読みたい
ESP32-DevKitCと2.8インチ240×320液晶モジュール(SDカード)をSPI接続、CO2濃度センサSCD30をI2C接続 ESP32-DevKitCとILI9341を搭載した2.8インチTFT液晶モジュールをSPI接続(液晶とタッチパネルはVSPI、SDカードはHSPI)、CO2濃度センサSCD30をI2C接続しました。TFT_eSP...
あわせて読みたい
ESP32-DevKitCと2.8インチ240×320液晶モジュール(SDカード)をSPI接続、気圧・温湿度センサBME280をI2C接続 ESP32-DevKitCとILI9341を搭載した240×320の2.8インチTFT液晶モジュールをSPI接続(液晶とタッチパネルはVSPI、SDカードはHSPI)、気圧・温湿度センサBME280をI2C接続し...
よかったらシェアしてね!
  • URLをコピーしました!
目次