ESP32でSPI接続1.3インチ液晶モジュールを使ってみる

Arduino/ESP321.3inch,ESP32,LCD,NodeMCU-32S,SPI,ST7789,TFT_eSPI

前回は初マイコンLCDにチャレンジして負けましたからね、、

今回のお客様はこれ。

TZT TFTディスプレイ 1.3inch SPI接続ボード

LCD1.3inch_module01

前回のブツと同時に買っておいて、ずっと眠らせていた品物。

こいつなら大丈夫です。

なにしろ裏に

LCD1.3inch_module02

ドライバーICがちゃんと書いてあるんですから!

今回のドライバICは、ST7789様の様です。

なんかIPSって書いてあるので、IPS液晶なのかしら。

購入ページにはTFTって書いてあったのに・・・まぁいいや

こんなに小さいのに、解像度は240×240もあるみたいです。

LCDモジュールとの接続

というわけで、早速これを

・・・どうやって接続しましょうかね。

SPIという事は、CS、SCLK、MOSI、MISOを使うんだと思うんですが、このボードはなんかシルク印刷の文字が違う。

BLK、DC、RES、SDA、SCK、VCC、GND の7ピン。

VCCとGNDはとりあえず置いといて、BLKはなんかバックライトっぽい

すると、DC、RES、SDA、SCK。

受け取る専門だと思うので液晶側にMOSIは無いとして、SCKはクロックでしょう。

RESはリセット?するとあと2本

DCは何だろな、、、

SDAは、なんかデータ線っぽいか

と思って販売元のページを見たら書いてありました。

PinsDesc
GNDPower Gtound
VCC3.3V-5V(DC)
SCLSPI clock line
SDASPI data line
RESReset interface
DCSPI data / command selection
CSChip select(0.96inch only)
BLKBacklight control, default floating, low level off

んん?

チップセレクトが無いんだってさ

大丈夫かしら・・・

とりあえずザクザク繋いで、あとはマイコンにお任せしよう( ノД`)

こういうのはやってみるのが肝心なんですよきっと

BLK、DC、RES、SDA、SCK、VCC、GND の接続を

NodeMCU-32S1.3inch LCDDesc
21BLKBacklight control, default floating, low level off
16DCSPI data / command selection
17RESReset interface
23SDASPI data line
18SCLSPI clock line
3.3VVCC3.3V-5V(DC)
GNDGNDPower Gtound
CSChip select(0.96inch only)

ひとまず動作確認はこんな感じの接続で、、

LCD1.3inch_module03

今回もそびえ立つ様な空中配線ですね

植物系モンスターみたいな佇まい。

LCDライブラリと設定

さてこれを動かすライブラリをどうしようかと。

PlatformIOからST7789で検索すると、現在一番ダウンロード数が多そうなコレを使ってみる事にします。

なんかePaperまで手を出している様ですので、長く使わせていただけそうな感じです。

とりあえずPlatformIOからこのライブラリを導入しまして、、、

ざっとライブラリの構成を眺めてみると、「/TFT_eSPI/tree/master/User_Setups」というディレクトリがあり、なんかいろんなコントローラの設定サンプルが並んでいました。

まさにこのLCDの240×240サンプルもある様で。

ソレっぽいこの「Setup24_ST7789.h」テンプレを使わせていただきます。

説明書きに、モジュールをアップデートとかするとセットアップファイルが上書きされるから、「TFT_eSPI_Setups」とかディレクトリ作って置いとくといいよ!とか書いてあるので、ディレクトリを作ってそこに置きます。

\src\TFT_eSPI_Setups\Setup24_ST7789.h みたいな感じで。
※VSCode PlatformIOの場合

そしたらライブラリの「User_Setup_Select.h」にあるincludeパスを書き換えて、先ほど設置したコンフィグファイルを読ませる様にします。(/TFT_eSPI/User_Setup_Select.h)

ただ、ここでライブラリからの相対パスの記述がなんか上手くいきませんでしたので、、、

//#include <User_Setup.h>           // Default setup is root library folder
//#include <../TFT_eSPI_Setups/Setup24_ST7789.h>
#include <D:\VSCodeProjects\PlatformIO\UsingLCD_ST7789\src\TFT_eSPI_Setups\Setup24_ST7789.h>

こんな感じでセパレータは¥(\)のフルパスで記述。
いやん、、ディレクトリ構造がバレちゃう

ううん、釈然としませんので今度調べておきます・・・

さて、このコピったセットアップファイルに結線した情報を書き込んでおきます。

デフォルトのIOピンの設定はこんな感じになっていました。

/TFT_eSPI_Setups/Setup24_ST7789.h(編集前)

// Generic ESP32 setup
//#define TFT_MISO 19
//#define TFT_MOSI 23
//#define TFT_SCLK 18
//#define TFT_CS    -1 // Not connected
//#define TFT_DC    2
//#define TFT_RST   4  // Connect reset to ensure display initialises

// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation
#define TFT_CS   -1      // Define as not used
#define TFT_DC   PIN_D1  // Data Command control pin
#define TFT_RST  PIN_D4  // TFT reset pin (could connect to NodeMCU RST, see next line)
//#define TFT_RST  -1    // TFT reset pin connect to NodeMCU RST, must also then add 10K pull down to TFT SCK

なんかNodeMCU用の設定のサンプルがコメント付きであるんですが、、

リセットピンとマイコンのリセットピンを繋いで、クロックの線をプルダウンしろと・・・?

プルダウンの方はなんかクロック信号を安定させる目的でしょうかね。

近くで携帯やラジオを使ったら誤動作するかもしれません(ぇ

めんどくさそうなのでとりあえずコメントアウトして勝手に設定(ぇ

/TFT_eSPI_Setups/Setup24_ST7789.h(編集後)

// Generic ESP32 setup
#define TFT_MISO -1     // misoは使わないぽ
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   -1     // Not connected
#define TFT_DC   16     // データ用
#define TFT_RST  17     // リセット
#define TFT_BL   21     // バックライト

// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation
//#define TFT_CS   -1      // Define as not used
//#define TFT_DC   PIN_D1  // Data Command control pin
//#define TFT_RST  PIN_D4  // TFT reset pin (could connect to NodeMCU RST, see next line)
////#define TFT_RST  -1    // TFT reset pin connect to NodeMCU RST, must also then add 10K pull down to TFT SCK

NodeMCU用設定はとりあえずガン無視で、、

主に信号線ですから間違ってても多分大丈夫ですキット。

ライブラリサンプルプログラムの実行:その1

さてライブラリのサンプル「examples」の中に「Test and diagnostics」というディレクトリが。

そこに診断プログラムっぽい気がするネーミングの「Read_User_Setup.ino」というのがありましたので、これをコピってきて実行してみます。
/TFT_eSPI/examples/Test and diagnostics/Read_User_Setup/Read_User_Setup.ino

実行時のシリアルモニタの出力がこちら。

[code]
TFT_eSPI ver = 2.3.2 
Processor    = ESP32 
Frequency    = 240MHz
Transactions = Yes   
Interface    = SPI   
Display driver = 7789
Display width  = 240 
Display height = 240

MOSI    = GPIO 23
MISO    = GPIO 19
SCK     = GPIO 18
TFT_DC   = GPIO 16
TFT_RST  = GPIO 17

TFT_BL           = GPIO 21
TFT_BACKLIGHT_ON = HIGH

Font GLCD   loaded
Font 2      loaded
Font 4      loaded
Font 6      loaded
Font 7      loaded
Font 8      loaded
Smooth font enabled

Display SPI frequency = 40.00
[/code]

上手く動いた様ですね。

このツールはつまり設定が正しく読まれてるかどうかを確認するためのツールの様で。。。

Display driver も 7789 が読み込まれ、液晶サイズも 240×240 の指定ができましたよ的な。

重要な事ではありますが、なんかつまらないので他のスケッチを試してみます。(ぇ

ライブラリサンプルプログラムの実行:その2

これなんかヨサゲですね。

「Viewport_graphicstest.ino」
/TFT_eSPI/examples/Generic/Viewport_graphicstest/Viewport_graphicstest.ino

名前的に。

これをコピってきまして、、

いつからかPlatformIOではプロトタイプを書けとエラーが沢山出るので、面倒ですが使っている関数を全て書き出します。

シリアルの速度を変えて、あとは画面サイズはなんか「setViewport()」でやるみたいですので、240×240に合わせて変えました。

setViewportは2か所あります。

変更点はこれだけ。

スケッチはこんな感じ。