JLX12864G 液晶を ESP32で動かしてみる


中国 JLX 社の 128x64の SPI接続LCDを買ってきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f2ccf18d-5c62-931e-51a9-65b1a5711bfb.png)

これを ESP32で動かしてみます。

# JLX12864G 液晶スペック


- 型番 JLX12864G-332-PN
- 128x64 2.1in モノクロ液晶
- 液晶色：青/白 、白/青 または 黒/緑
- 見た目 STN 形式
- バックライトLED付
- 接続 SPI
- 動作電圧 3.3V
- コントローラ ST7567
- PCB付き
- PCBサイズ 58.4x47.5mm
- 表示サイズ 48.62x24.94mm
- 使用LCDモジュール JLX12864G-332
- 消費電力 バックライト無し 1mW（3.3V*0.3mA）,バックライト点灯時最大 150mW（3.3V*45mA）

JLX 社ホームページ
http://www.jlxlcd.cn/
商品ページ
http://www.jlxlcd.cn/html/zh-detail-274.html
データシート
http://www.jlxlcd.cn/UpFile/2014822141524.pdf




# 環境 

- Arduino 1.8.10 for Linux
- esp32 by Espressif System Version 1.0.3
- WEMOS LOLIN32

# 購入

taobao で購入しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/0fd563b1-d0cd-ca8e-b998-662364068bcc.png)

通信方法と電源電圧、色が選択して購入できます。SPI版、3.3Vで色はそれぞれを購入しています。


# PCB 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/2d9baa57-3f13-4a9e-8749-e0bd28c3ce7a.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/56792049-f936-88b7-35cf-02170fd079bb.png)

SPI 版を購入しました。購入したものを調べてみると基板の R3,R4 のどちらをジャンパーするかでモードを作り分けているようです。

# JLX12864G の SPI 信号線

通常の4線式SPIは、MOSI、MISO, CS(SSと呼称のこともあり),CLOCK、の4本となりますが、今回のSPI通信にはそれに加え CD 信号が必要となります。更に SPI 信号とは別に 液晶モジュール自体をリセットする RST 信号も配線します。

実は今回の実際の配線は MISO が無いため合計5本です。更に液晶モジュール上の表記では、一般的な表記ではなく以下のような表記になっています。

|SPI信号名|液晶モジュール上の端子表記|
|:---:|:---:|
|MOSI|D7(SDA)|
|MISO|使用せず|
|CLOCK|D6(SCK)|
|CS|CS|
|CD|RS|
|(リセット信号)|RST|



余談として、CD信号が必要なSPIは「4-wire SPI」と呼ばれることもありますが、MOSI,MISO,CLOCK,CS のセットのことを 4-wire SPI と呼ぶ方が主流ぽいです。信号線の把握には注意が必要です。
cf.,電子ペーパー を ESP32 と Arduino開発環境で使う その3
https://qiita.com/nanbuwks/items/1a4d58fc7f74ab8c8d85


# 配線

以下のように配線しました

|LCD PCB上表記|信号の意味|ESP32信号|WEMOS LOLIN32 PCB表記|
|:---:|:---:|:---:|:---:|
| LEDA |LED電源|3V3|3V3|
|VSS |GND|GND|GND|
|VDD |3V3|3V3|3V3|
|RS |Data/Command|15|15|
|RST |RESET|21|SDA/21(*1)|
|CS |CableSelect|5|SS/5/LED|
|07(SDA) |MOSI|23|MISO/23(2*)|
|06(SCK) |CLOCK|18|SCK/18|

*1 WEMOS LOLIN32 上の SDA は I2C 通信のためのものです。今回はESP32のハードウェアSPIのデフォルトピン配置を使うため、別の GPIO23 を使います。
*2 PCB 上に書かれている MISO/23 は誤植です。

# ソフトウェア

ソフトウェアのサンプルがデータシートに書かれている他、Arduino のライブラリなどでも使えそうなものがいくつかあります。

JLX12864Gに使われている ST7567 は、ST7565またはUC1701 UC1705 などと互換性があるみたいで、それらで使われているものを探すと g8glib が使えるかも知れないということがわかりました。

また、身近なところでは、秋月電子の
「超小型グラフィックＬＣＤ　ＡＱＭ１２４８Ａ」
https://akizukidenshi.com/catalog/g/gP-07005/
が同じ ST7565 を使用しています。AQM1248A 用のスケッチを使うこともできるでしょう。

今回は、
「aqm1248a esp8266 esp32」
https://hatakekara.com/aqm1248a/
ページの AQM1248A 用のスケッチを使い、縦ドット数を48から64に変更などしてみました。

動きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d657f41b-14e0-a9e0-c664-389c09286e63.png)



# バックライトの取扱

電池で動かしていると、バックライトの輝度がふらつくので調べてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e06937d3-7aba-0422-2aea-b4adffec9cb4.png)

データシートによると、3つのLEDがついてますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3fea22dd-ff0b-f5a0-e15a-030b59a28931.png)

割と電流が流れます。マイコンのIOに直結するのは難しそうです。
また電圧が MAX 3.1V なので3.3V系の電源に直結するのも考えものです。
3.3V に繋ぐには、電流制限が必要ですがLED並列なので工夫が必要ですね。