ESP32-WROOM-32でI2C LCD(液晶ディスプレイ)を試した
Contents
I2C LCD
ESP32(ESP32-WROOM-32)の開発モジュールに I2C 1602 16×2行 キャラクタ LCDモジュール ディスプレイを接続してサンプルプログラムを動作させた時の備忘録。
ちなみにESP32-WROOM-32 は ESP32 に Wi-Fi と Bluetooth を追加したチップだ。
今回は Aideepenブランドの上記の製品を使用したが、モジュールによってはピン配置が異なるので注意が必要だ。
この製品のピン配置はESP32 DEVKIT V1 の配置になっており、こちらに写真が載っている。
LCDの特徴
LCD(Liquid Crystal Display)は液晶ディスプレイの事で16文字×2行であれば安い製品が幾つも出ている。
また ESP32-WROOM-32 に接続しやすい I2C(Inter-Integrated Circuit)端子の付いたディスプレイを選択した。
シリアル通信なので高速表示は出来ないが温度や湿度、気圧などの情報を表示するには十分だ。
LCD 自体のスペックは以下の通り。
- 表示サイズ:64.5mm x 16mm
- 5V DC(3.3Vでも表示できたがかなり薄く表示される、詳しくは後述)
- 16 文字 × 2行
- 接続:I2C※
※自分はディスプレイに I2C 接続用のモジュールが付いた製品を購入したが、ハンダ付けが得意ならディスプレイと I2C 接続モジュールを別々に購入しても良いと思う。
ディスプレイのみ
I2C インターフェースボード
購入したディスプレイ。
環境
サンプルプログラムは Windows上の Arduino IDE で開発&コンパイルして USB 経由で ESP32-WROOM-32 に書き込んだ。
環境は以下の通り。
OS | Windows 10 Home(64 Bit) |
Arduino IDE | 1.8.13 |
配線図
ESP32-WROOM-32 モジュールと I2C LCD との配線図。
- VIN はテスターで計った所、4.736V だった
- D21 をSDA、D22 を SCL に接続している
事前準備
I2C接続用のライブラリーのダウンロード
Arduino IDE に I2C LCD 用のライブラリーをインストールする。
こちらのページから LiquidCrystal I2C ライブラリーをインストールしようとした所、最終バーションは 1.1.2 となっていたが、同じ作者の 1.1.3 のバージョンがあったのでそれをダウンロード(ファイル名:LiquidCrystal_I2C-1.1.3.zip)した。
ライブラリーのインクルード
Arduino IDE を起動してスケッチー>ライブラリをインクルードー>.ZIP形式のライブラリをインストールを選択する。
先程ダウンロードした ZIP ファイルを指定する。
“ライブラリが追加されました” のメッセージが表示されてインストールは終了。
尚、ライブラリーはデフォルトだと、C:¥Users¥ユーザ名¥Documents¥Arduino¥libraries¥ 配下にフォルダーが作成されてインストールされる。
※保存場所の確認はファイルー>環境設定ー>スケッチブックの保存場所で確認できる
ライブラリをアンインストールしたい時はこのフォルダー毎、削除すれば良い。
サンプルプログラム
サンプルプログラムは以下の通り。
1行目に “Start” 、2行目に数字をカウントアップしていくだけのスケッチだ。
I2cLcd.ino
/*
* I2C 1602 16x2 LCDテストスケッチ
*
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // I2C addr、16x2
void setup() {
Serial.begin(115200);
lcd.init(); // LCD初期化
lcd.backlight(); // バックライト点灯
/*
lcd.autoscroll(); // 自動でスクロール
*/
lcd.clear(); // クリア
lcd.setCursor(0, 0); // カーソル位置
lcd.print("Start"); // 文字表示
lcd.setCursor(0, 1);
lcd.print("Count:");
}
void loop() {
lcd.setCursor(6, 1);
int times=millis() / 1000; // プログラム開始からのミリ秒
lcd.print(times);
/*
lcd.scrollDisplayRight(); // 右にシフト
*/
Serial1.println(times);
delay(1000);
}
補足説明
LiquidCrystal Library で使用可能なコマンドはこちらを参照して欲しい。
I2Cアドレス
最初に I2C のアドレスとキャラクターの文字数と行数を指定している。
LiquidCrystal_I2C lcd(0x27,16,2); // I2C addr, 16x2 character
I2C のアドレスは自分が購入した製品はデフォルトの 0x27 だったが製品によっては他のアドレスが割り当てられている事がある。
その際はこちらの I2CScanner を使えば割り当てられたアドレスが分かる(最初の Serial.begin(9600); を Serial.begin(115200); に変更して使用した)
尚、I2Cアドレスは背面のソルダジャンパーで変更することが出来るらしい。
上記の写真ではA0、A1、A2 ともに開放されている(上下が未接続)ので 0x27 になったがこのジャンパーをハンダで短絡するとアドレが変わるとの事。
0:短絡
1:開放
A2 | A1 | A0 | I2Cアドレス |
0 | 0 | 0 | 0x20 |
0 | 0 | 1 | 0x21 |
0 | 1 | 0 | 0x22 |
0 | 1 | 1 | 0x23 |
1 | 0 | 0 | 0x24 |
1 | 0 | 1 | 0x25 |
1 | 1 | 0 | 0x26 |
1 | 1 | 1 | 0x27 |
秒数を表示
millis() は Arduinoボードがプログラムの実行を開始して時から現在までの時間をミリ秒で返す関数。
1000 で割って秒数に変換して lcd.print でディスプレイに表示している。
int times=millis() / 1000;
lcd.print(times);
自動スクロール
スケッチ上ではコメントアウトしているが、右から左に自動でスクロールする事ができる。
lcd.autoscroll(); // 自動でスクロール
一文字ずらす
また同じくコメントアウトしているが一文字づつ右にシフトしてスクロールしているように見せることもできる。
lcd.scrollDisplayRight(); // 右にシフト
その他の機能
コントラスト
表示のコントラスト(明暗)を裏面の半固定抵抗で調整可能だ。
最初にサンプルプログラムを動かした時に何も表示されなくて配線やプログラムのミスを疑ったが、半固定抵抗をプラスドライバーで時計回りに回したら表示されるようになった。
工場出荷時の状態だと 5V に接続しても半固定抵抗をやや時計回りに回さないと文字が視認できなかった。
VCC を 3.3V に接続した時は半固定抵抗を時計回りに最大まで回してようやく見える程度だったので基本的には 5V 電源が必要だと思ったほうが良い。
写真と肉眼では見え方が違うが 3.3V の方は半固定抵抗を目一杯時計回りに回した状態。
バックライト調整
バックライト調整用のジャンパーピンが背面に付いている。
外すとバックライトが消灯する。
半固定抵抗を入れることでバックライトの強さを調整できる模様(未検証)。
以上で今回の記事は終了とする。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
最近のコメント