液晶モジュールを使ってみたい(Arduino 2.4 インチ TFT 液晶タッチスクリーンシールド) その2
さて前回使ってみようと試みたものの、使い方が判らなかったArduino用2.4インチのLCDシールドですが、、
色々調べて回り、とりあえずなんか診断プログラムでコントローラを判別してから使うみたいな感じの様ですのでその様に進めていきます。
というわけでこちらのライブラリを使わせて頂きます。
このライブラリには、LCDコントローラを判別するサンプルが含まれている様でして。
説明を見ると、
1. The Arduino Library Manager should find and install MCUFRIEND_kbv library
Arduinoライブラリマネージャからインストールしてくれとあるので、PlatformIOからチャチャっとインストールしまして、、、
2. Install the Adafruit_GFX library if not already in your User libraries.
Adafruit_GFXライブラリも入れろとあるのでこれも同様に導入します。
3. Insert your Mcufriend style display shield into UNO. Only 28-pin shields are supported.
で、シールドをUNOに差し込めと。
難関が。
とりあえずArduinoのピン配置と見比べてみます。
Arduino-左 | LCD-左 | Arduino-右 | LCD-右 | |
---|---|---|---|---|
0 RX← | – | A5 | – | |
1 TX→ | – | A4 | LCD_RST | |
2 | LCD_D2 | A3 | LCD_CS | |
3 PWM | LCD_D3 | A2 | LCD_RS | |
4 | LCD_D4 | A1 | LCD_WR | |
5 PWM | LCD_D5 | A0 | LCD_RD | |
6 PWM | LCD_D6 | |||
7 | LCD_D7 | VIN | – | |
GND | GND | |||
8 | LCD_D0 | GND | – | |
9 PWM | LCD_D1 | 5V | 5V | |
10 PWM | SD_SS | 3.3V | 3.3V | |
11 PWM | SD_D1 | RESET | – | |
12 | SD_D0 | IOREF | – | |
13 | SD_SCK | |||
GND | – | |||
AREF | – |
どうやらLCDのコントロールを担っているのは、以下の5ピンの様です。
LCD_RST
LCD_CS
LCD_RS
LCD_WR
LCD_RD
電源とGNDはとりあえず3.3VとGNDを繋いでおくとして、、
このコントロールピンをArduinoのAnalogピンに接続する様になっている様ですね。
そしてデータ制御っぽい LCD_D1~LCD_D7 の8本は、Arduinoのデジタルピンに接続する模様。
これをESP32に当てはめてみると、、
デジタルピンはとりあえず何でも良さそうですが、Analogピン、、、?
LCDの制御にアナログOUTとか使わないでしょうよ・・・?
なんか不安ですので、ESP32のArduino互換ボードのピン配置を確認してみます。
WeMos D1 R32 というボードが確かArduinoシールドが使える系のボードだったと思うのでピン配置を照らし合わせてみると、、、
Arduino-左 | LCD-左 | WeMos D1 R32-左 | Arduino-右 | LCD-右 | WeMos D1 R32-右 | |
---|---|---|---|---|---|---|
0 RX← | – | RX← 0 | A5 | – | IO39 | |
1 TX→ | – | TX→ 0 | A4 | LCD_RST | IO38 | |
2 | LCD_D2 | IO26 | A3 | LCD_CS | IO34 | |
3 PWM | LCD_D3 | IO25 | A2 | LCD_RS | IO36 | |
4 | LCD_D4 | IO17 | A1 | LCD_WR | IO4 | |
5 PWM | LCD_D5 | IO16 | A0 | LCD_RD | IO2 | |
6 PWM | LCD_D6 | IO27 | ||||
7 | LCD_D7 | IO14 | VIN | – | VIN | |
GND | GND | GND | ||||
8 | LCD_D0 | IO12 | GND | – | GND | |
9 PWM | LCD_D1 | IO13 | 5V | 5V | 5V | |
10 PWM | SD_SS | IO5 | 3.3V | 3.3V | 3.3V | |
11 PWM | SD_D1 | IO23 | RESET | – | RST | |
12 | SD_D0 | IO19 | IOREF | – | 5V | |
13 | SD_SCK | IO18 | IO0 | |||
GND | – | GND | ||||
AREF | – | RST | ||||
SDA | ||||||
SCL |
Analogピンに指定されている箇所は GPIO39,GPIO38,GPIO34, GPIO36,GPIO4,GPIO2 となっており、ESP32のAnalogOutが出来るピンは使ってなさそう。
という事はAnalogを使うにしてもReadが出来ればいいと。
多分デジタル出力だと思いますけど・・・
とにかく沢山繋がなくてはいけない様ですん( ノД`)
我らの NodeMCU-32S との接続はこんな感じに。
キモい感じにつながってます。
見事な空中配線(ぇ
接続はこんな感じ。
NodeMCU-32S 左 | LCD-左 | NodeMCU-32S 右 | LCD-右 | |
---|---|---|---|---|
– | – | |||
– | 2 | LCD_RST | ||
12 | LCD_D2 | 0 | LCD_CS | |
27 | LCD_D3 | 4 | LCD_RS | |
26 | LCD_D4 | 16 | LCD_WR | |
25 | LCD_D5 | 17 | LCD_RD | |
33 | LCD_D6 | |||
32 | LCD_D7 | – | ||
GND | GND | |||
35 | LCD_D0 | – | ||
34 | LCD_D1 | 5V | ||
SD_SS | 3.3V | 3.3V | ||
SD_D1 | – | |||
SD_D0 | – | |||
SD_SCK | ||||
– | ||||
– |
多分使っちゃいけないピンとか避けれた、、と思う。
※GPIO12は繋ぐとプログラムの書き込みが不安定になるらしく、何度も書き込み失敗しましたので避けてあります。
さてここで診断プログラムを実行してみようと思うます。
MCUFRIEND_kbvのexamplesの中に、LCD_ID_readreg というのがあるまして。(\MCUFRIEND_kbv\examples\LCD_ID_readreg\LCD_ID_readreg.ino)
これをコピってきてちょっと編集。
先頭の辺りのピンの定義を書き換えておきます。
//-- Arduino UNO or Mega 2560 Plugged as shield
/*
#define LCD_RST A4
#define LCD_CS A3
#define LCD_RS A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_D0 8
#define LCD_D1 9
#define LCD_D2 2
#define LCD_D3 3
#define LCD_D4 4
#define LCD_D5 5
#define LCD_D6 6
#define LCD_D7 7
*/
#define LCD_RST 2
#define LCD_CS 0
#define LCD_RS 4
#define LCD_WR 16
#define LCD_RD 17
#define LCD_D0 35
#define LCD_D1 34
#define LCD_D2 14
#define LCD_D3 27
#define LCD_D4 26
#define LCD_D5 25
#define LCD_D6 33
#define LCD_D7 32
こんな感じに。
そしてシールド定義も同様に書き換えておきます。
utilityの中にヘッダファイルがあるまうすので、これをゴリっと。
一番下の方に、ESP32のセクションがあります。
//################################### ESP32 ##############################
#elif defined(ESP32) //regular UNO shield on TTGO D1 R32 (ESP32)
/*
#define LCD_RD 2 //LED
#define LCD_WR 4
#define LCD_RS 15 //hard-wired to A2 (GPIO35)
#define LCD_CS 33 //hard-wired to A3 (GPIO34)
#define LCD_RST 32 //hard-wired to A4 (GPIO36)
#define LCD_D0 12
#define LCD_D1 13
#define LCD_D2 26
#define LCD_D3 25
#define LCD_D4 17
#define LCD_D5 16
#define LCD_D6 27
#define LCD_D7 14
*/
#define LCD_RST 2
#define LCD_CS 0
#define LCD_RS 4
#define LCD_WR 16
#define LCD_RD 17
#define LCD_D0 35
#define LCD_D1 34
#define LCD_D2 14
#define LCD_D3 27
#define LCD_D4 26
#define LCD_D5 25
#define LCD_D6 33
#define LCD_D7 32
さて、、、
書き込んでみますと。。
ts Jun Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)
reg(0x0000) C0 C0 ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00 Manufacturer ID
reg(0x0009) 00 00 00 00 00 Status Register
reg(0x000A) 00 00 Get Power Mode
reg(0x000C) 00 06 Get Pixel Format
reg(0x0061) 00 00 RDID1 HX8347-G
reg(0x0062) 00 00 RDID2 HX8347-G
reg(0x0063) 00 00 RDID3 HX8347-G
reg(0x0064) 00 00 RDID1 HX8347-A
reg(0x0065) 00 00 RDID2 HX8347-A
reg(0x0066) 00 00 RDID3 HX8347-A
reg(0x0067) 00 00 RDID Himax HX8347-A
reg(0x0070) 00 00 Panel Himax HX8347-A
reg(0x00A1) 00 00 00 00 00 RD_DDB SSD1963
reg(0x00B0) 00 00 RGB Interface Signal Control
reg(0x00B4) 00 02 Inversion Control
reg(0x00B6) 00 0A 82 27 04 Display Control
reg(0x00B7) 00 02 Entry Mode Set
reg(0x00BF) 00 0F 0F 0F 0F 0F ILI9481, HX8357-B
reg(0x00C0) 00 B2 B2 B2 B2 B2 B2 B2 B2 Panel Control
reg(0x00C8) 00 02 00 00 00 00 00 00 00 00 00 00 00 GAMMA
reg(0x00CC) 00 30 Panel Control
reg(0x00D0) 00 00 00 Power Control
reg(0x00D2) 00 00 00 00 00 NVM Read
reg(0x00D3) 00 00 00 00 ILI9341, ILI9488
reg(0x00D4) 00 00 00 00 Novatek ID
reg(0x00DA) 00 00 RDID1
reg(0x00DB) 00 00 RDID2
reg(0x00DC) 00 00 RDID3
reg(0x00E0) 00 08 0E 12 05 03 09 47 86 2B 0B 04 00 00 00 00 GAMMA-P
reg(0x00E1) 00 08 0E 12 05 03 09 47 86 2B 0B 04 00 00 00 00 GAMMA-N
reg(0x00EF) 00 00 00 00 00 00 ILI9327
reg(0x00F2) 00 00 00 00 00 00 00 00 00 00 00 00 Adjust Control 2
reg(0x00F6) 00 00 00 00 Interface Control
IDがC0 C0、、、?
ILI9481, HX8357-B が0F 0F、、、?
わかんねっす・・・
その他色々接続を変えたり、LCD_ID_readnew.ino(\MCUFRIEND_kbv\examples\LCD_ID_readnew\LCD_ID_readnew.ino) を使ってみたりしてもウンともスンともいわづ
ギブアップ!
LCDのドライバが判らないと動かせないんすね・・・
他のライブラリも試みてみようかと少しだけ思ったのですが、ちょっと力尽きてしまい。
腹いせにこのLCDの裏の基盤に何か書いてないかと、固定されていたグルーをベリっと引っぺがし
なんかPCB変換っぽいパターンがついてますね・・・
コンデンサがいくつかと、、抵抗やダイオードがありそうな箇所に抵抗は無し
一番左のグチャっとしている何かが気になりますが
KAと書いてある様です。
型式らしき文字が。
SKY024S15B V9 2018/11/24 と書いてあります。
わかんねっす・・・
ちょっとまたお蔵入りかなトホー
誰かこのボードの使い方が判る方がおりましたら教えてくだしあ
ディスカッション
コメント一覧
液晶モジュールを使ってみたい(Arduino 2.4 インチ TFT 液晶タッチスクリーンシールド)ギブUPの件
ESP32のアナログピンに注意!
アナログピンは、GPIO34,35,36,飛んで39はデジタルとして使えます。
ただし、アナログ入力ピンなので、一般的にデジタルも入力オンリーと成ります。
したがって、このピンから信号を送る事が出来ず、コントロールできないのでは?