工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

液晶モジュール1602AをESP-WROOM-32で動かす

概要

液晶モジュールをESP-WROOM-32で動かし、文字の表示ができることを確認した。




背景と目的

最近、電子工作をあまりやっていなかったのだが、久々に何かを作ろうと思っている。その中で、文字が表示できる小さな液晶モジュールが使いたい。これまで、いろいろ電子工作をやってきたのだが、液晶画面を使用する機会がなく、触ることがなかった。そこで、ひとまず使い方を確認するため、ESP-WROOM-32と繋いで動かす。



詳細

1. デバイスの購入

Amazonで見つけた液晶モジュール1602A。約700円。このモジュールには、I2C接続が可能なように、変換モジュール基板が基板裏についている。なので、接続すべきラインが少なくて済む。I2Cアドレスは、0x3fと書いてある。

https://www.amazon.co.jp/gp/product/B07BJ5PW3R/ref=ppx_yo_dt_b_asin_title_o01_s03?ie=UTF8&psc=1


2. 配線する

以下のように配線。SCL、SDAにはプルアップ抵抗1kΩをつけている。

ESP32 DevModule 液晶モジュール
3V3 VCC
IO22 SCL
IO21 SDA
GND GND


3. 液晶モジュールとI2Cで通信できるArduinoライブラリを探す

1602液晶モジュール用のライブラリは、さまざまなものがある。今回注意が必要なのは、I2C接続用のライブラリを使わないといけないこと。

選定したのは、

LiquidCrystal_I2C

というもの。ESP32用というわけではないが、ひとまずこれを試すことにする。

https://burariweb.info/electronic-work/arduino-learning/arduino-i2c-communication-basics.html#i-3


4. 通信がうまくいかない??? -> I2CアドレスがAmazonサイトの説明と違う!!!

上記ライブラリで試したのだが、どうもAmazonのサイト記載のI2Cアドレス 0x3f では反応がない。ESP-WROOM-32用というわけではないのでそのせいか?と思ったが、オシロスコープで波形を確かめると、正しく波形が出ている。にもかかわらず、ACKが来ないのでおかしいなと思い、以下のI2Cスキャナ

leico.github.io

でデバイスをスキャンしてみたところ、なんと

0x27

だった。たぶん、アドレス設定用の抵抗の実装忘れとか、そんなところだろうと思うが、とにかくAmazonで売っている格安電子部品の場合、この手のトラブルが付き物なので、いちいち怒ってはいけない。


5. 実装

気を取り直して、アドレスを0x27に設定したソースコードは以下。

#include "LiquidCrystal_I2C.h"

LiquidCrystal_I2C lcd(0x27, 16, 2); 

void setup() {
  // 初期化
  lcd.init();
  // バックライト点灯
  lcd.backlight();
  // カーソル点滅
  lcd.blink();
  // 文字出力
  lcd.print("Hello, world!");
}

void loop()
{
}

表示結果は以下。Hello, World!が無事表示された。

しかし、コントラストが弱くて見づらい。基板裏のVRを目いっぱい回してやっと読める程度。あまり気にしていなかったが、本来5V駆動なのだろうか?


6. コントラストを上げる

ESP32のIOは3.3V系なので、レベルシフト回路をかませてみる。 手持ちのレベルシフトIC

akizukidenshi.com

がどこかに行ってしまい見つからないので、ずいぶん昔に使った簡易レベルシフト回路

blog.livedoor.jp

をユニバーサル基板に組み、SDA、SCLにかませる。

すると、以下のように非常にくっきりと映った。というわけで、コントラスト不足は、駆動電圧の問題であった。


7. いろいろ試す

この後、必要そうなコマンドを試してみたが、問題ないようなので、ひとまず今回はこれで十分。



まとめと今後の課題

液晶モジュールをESP-WROOM-32で動かし、文字の表示ができることを確認できた。機器に組み込んで使っていく。