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カードの動作を確認しました。

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

準備したパーツの組立て

ESP32-DevKitCと2.8インチTFT液晶モジュールをSPI接続して、液晶表示、タッチパネル、内蔵するSDカードスロットを動作させます。

2.8インチ液晶モジュール

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
  + Product Documentation
   + 2.8 inch SPI Module Schematic(回路図)

ESP32-DevKitCと4線式SPIで接続

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
  + Product Documentation
   + 2.8 inch SPI Module Schematic(回路図)

開発ツール arduino-esp32のインストール

ESP32の開発ツール arduino-esp32を準備してスケッチを作っていきます。Arduino IDEへの設定手順を纏めました。

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

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

2.8インチ液晶モジュールには、ドライバーICとしてILI9341を使った240×320の液晶モジュールに加えて、XPT2046を使ったタッチパネル、SDカードスロットが実装されています。
利用するにあたり必要となるTFT_eSPIライブラリのインクルードと初期設定を行います。

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」はWindowsでは下記フォルダ配下にあります。

C:\Users\[ユーザー名]\Documents\Arduino\libraries\TFT_eSPI-master
または、ライブラリのアップデートを行った際などに下記のフォルダ名になっている場合もあります。
C:\Users\[ユーザー名]\Documents\Arduino\libraries\TFT_eSPI

「User_Setup.h」の200行目付近の「// For ESP32 Dev board・・・」の下にある#defineを今回の環境用にピン番号を変更します。
左側がデフォルトのUser_Setup.h 設定、右側の黄色点線枠が環境に合わせてGPIO番号を変更した箇所です。左端の // を削除して上書き保存します。

User_Setup.h の編集
左側は初期のUser_Setup.h 右側は今回結線した環境向けのUser_Setup.h(200行目付近)

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

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

(1)TFT_eSPIライブラリのサンプルスケッチ Keypad_240x320.ino(2024/7/27 追記)

Arduino IDEのメニュー の「スケッチ例」–> TFT_eSPI –> 320×240 -> Keypad_240x320 を選択すると、スケッチ「Keypad_240x320.ino」が開きます。

スケッチを書き込む前に、Arduino IDEの右上の「シリアルモニタ」アイコンをマウスでクリックしてシリアルモニタを9600bpsで開いておきます(2024/7/27 追記)。

実行すると、初回のみタッチパネルの四隅に矢印マークが順次表示されます。指示通りに同封のペンでタッチするとキャリブレーションされてタッチパッドとして使えるようになります。

キーバットから数字をタッチ入力してSendボタンをタッチすると、シリアルモニタにその値を表示できます。入力レスポンス、タッチ操作も良好です。

Keypad_240x320.inoを実行中
Keypad_240x320.inoを実行中
sendボタンで送信した数値がシリアルモニタに表示。
赤丸部分をクリックしてシリアルモニタを表示(2024/7/27 追記)。

(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液晶対応スケッチ

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

あわせて読みたい
ESP32-DevKitC + DS3231 + SCD4x + BME280で日時・時刻、CO2濃度、気圧、温湿度を2.8インチ液晶表示、SD... ESP32-DevKitCとILI9341を搭載した2.8インチTFT液晶モジュールをSPI接続(液晶とタッチパネルはVSPI、SDカードはHSPI)、RTCモジュールDS3231、CO2濃度センサSCD41と気...
あわせて読みたい
ESP32-DevKitC + DS3231 + SCD30 + BME280で日時・時刻、CO2濃度、気圧、温湿度を2.8インチ液晶表示、SD... ESP32-DevKitCとILI9341を搭載した2.8インチTFT液晶モジュールをSPI接続(液晶とタッチパネルはVSPI、SDカードはHSPI)、RTCモジュールDS3231、CO2濃度センサSCD30と気...
あわせて読みたい
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接続し...
あわせて読みたい
Raspberry Pi Zero 2 W + Raspberry Pi OS + Python3でI2CやSPI接続のセンサを制御 Raspberry Pi Zero 2 W(以下、Zero 2 W)にRaspberry Pi OS 32bit版をセットアップしました。メモリ(SDRAM)搭載量が512MBと少ないのでRaspberry Pi OSが満足に動作す...
あわせて読みたい
Raspbery Pi 5と2.8インチ液晶モジュール(240×320)を使ったCO2濃度、気圧、温度、湿度&WiFi時計(2):CO... Raspberry Pi 5 とBME280センサ(気圧、温度、湿度)とSCD4xセンサ(CO2濃度、温度、湿度) モジュールをI2C接続、その測定データをSPI接続した2.8インチTFT液晶 (240×3...
あわせて読みたい
Raspbery Pi 5と2.8インチ液晶モジュール(240×320)を使ったCO2濃度、気圧、温度、湿度&WiFi時計(1):CO... Raspberry Pi 5 とBME280センサ(気圧、温度、湿度)とSCD30センサ(CO2濃度、温度、湿度) モジュールをI2C接続、その測定データをSPI接続した2.8インチTFT液晶 (240×3...
よかったらシェアしてね!
  • URLをコピーしました!
目次