1602 キャラクタ LCD モジュールを I2C で接続してみます。
「1602 キャラクタ LCDモジュール を STM32 と RaspberryPi で動かす」
https://qiita.com/nanbuwks/items/d5f094e54a3f6641c970
にて、16行2列の液晶モジュールについて説明しました。
この記事ではパラレル接続で RaspberryPi と STM32 で動かしましたが 今回は I2C 接続と ESP32 の組み合わせで試してみます。
環境
- ESP32 WEMOS Lolin32
- Arduino 1.8.10 開発環境
- LiquidCrystal I2C by Franc de Brabander バージョン 1.1.2 ライブラリ
LCD と I2C 変換アダプタ
LCDは先の記事「1602 キャラクタ LCDモジュール を STM32 と RaspberryPi で動かす」
https://qiita.com/nanbuwks/items/d5f094e54a3f6641c970
で紹介した 3.3V のものを使いました。
今回は表面にはんだ付けしました。
このI2C変換アダプタは中華製のノーブランド品です。
接続
I2C変換アダプタ側 | Wemos ESP32側 |
---|---|
GND | GND |
VCC | 3.3V |
SCL | SCL |
SDA | SDA |
I2C アドレス
変換アダプタのチップや、アドレス指定ジャンパーの設定によりいくつかアドレスが変わっているそうだ。購入の際ドキュメントなどはないので、スキャナで調べた所 0x27 だった。
cf.,「ESP32 を使って I2C スキャナ」
https://qiita.com/nanbuwks/items/c235f7f867f6139b6c8b
一見同じに見える「1602LCDをI2C変換アダプタを使ってArduinoで表示する。」
https://qiita.com/clses/items/b4940804eb0a663fdc41
の記事では 0x3F となっているが、こちらではサンプルプログラムのデフォルトの 0x27 のままで動作した。
以下は「1602 キャラクタ LCDモジュール を STM32 と RaspberryPi で動かす」のサンプルプログラムをI2C用に書き換えたもの。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // I2C addr, 16x2 character
void setup()
{
Serial1.begin(115200);
lcd.init(); // initialize the lcd
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0); //LCD Row 0 and Column 0
lcd.print("Hello...!");
lcd.setCursor(0, 1); //LCD Row 0 and Column 1
lcd.print("Time:");
}
void loop() {
lcd.setCursor(6, 1);
int times=millis() / 1000;
lcd.print(times);
Serial1.println(times);
delay(1000);
}
おまけ 秋月電子のLCDで失敗
秋月電子「I2C接続キャラクタLCDモジュール 16×2行 白色バックライト付」
(ACM1602NI-FLW-FBW-M01)
でもやってみました。こちらは追加モジュール無しでI2C通信ができます。
I2Cアドレスはマニュアルでは 10100000 とあります。このまま読むと 0xA0 となりますが、最下位ビットはR/Wビットなのでそれを除外し 1ビットシフトして 0x50 が I2C アドレスらしい。
しかしやってみましたが、I2Cスキャナにもスケッチにも反応しませんでした。調査中・・・
接続
|No.|Symbol|説明|
|:---:|:---:|:---:||
|1|VSS|GND||
|2|VDD|3.3V||
|3|V0|LCDコントラスト調整。10kΩの半固定抵抗に接続|
|4|SCL|I2C SCL|ESP32 SCLに接続
|5|SDA|I2C SDA|ESP32 SDAに接続|
|6|BL+|バックライトLED+|接続なし|
|7|BL-|バックライトLED-|接続なし|