ESP32でSPI接続1.3インチ液晶モジュールを使ってみる
前回は初マイコンLCDにチャレンジして負けましたからね、、
今回のお客様はこれ。
TZT TFTディスプレイ 1.3inch SPI接続ボード

前回のブツと同時に買っておいて、ずっと眠らせていた品物。
こいつなら大丈夫です。
なにしろ裏に

ドライバー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は、なんかデータ線っぽいか
と思って販売元のページを見たら書いてありました。
| Pins | Desc |
|---|---|
| GND | Power Gtound |
| VCC | 3.3V-5V(DC) |
| SCL | SPI clock line |
| SDA | SPI data line |
| RES | Reset interface |
| DC | SPI data / command selection |
| CS | Chip select(0.96inch only) |
| BLK | Backlight control, default floating, low level off |
んん?
チップセレクトが無いんだってさ
大丈夫かしら・・・
とりあえずザクザク繋いで、あとはマイコンにお任せしよう( ノД`)
こういうのはやってみるのが肝心なんですよきっと
BLK、DC、RES、SDA、SCK、VCC、GND の接続を
| NodeMCU-32S | 1.3inch LCD | Desc |
|---|---|---|
| 21 | BLK | Backlight control, default floating, low level off |
| 16 | DC | SPI data / command selection |
| 17 | RES | Reset interface |
| 23 | SDA | SPI data line |
| 18 | SCL | SPI clock line |
| 3.3V | VCC | 3.3V-5V(DC) |
| GND | GND | Power Gtound |
| – | CS | Chip select(0.96inch only) |
ひとまず動作確認はこんな感じの接続で、、

今回もそびえ立つ様な空中配線ですね
植物系モンスターみたいな佇まい。
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 SCKNodeMCU用設定はとりあえずガン無視で、、
主に信号線ですから間違ってても多分大丈夫ですキット。
ライブラリサンプルプログラムの実行:その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か所あります。
変更点はこれだけ。
スケッチはこんな感じ。

https://github.com/Bodmer/TFT_eSPI















ディスカッション
コメント一覧
まだ、コメントがありません