ESP32-WROOM-32でI2C LCD(液晶ディスプレイ)を試した | そう備忘録

ESP32-WROOM-32でI2C LCD(液晶ディスプレイ)を試した

I2C LCD

ESP32(ESP32-WROOM-32)の開発モジュールに I2C 1602 16×2行 キャラクタ LCDモジュール ディスプレイを接続してサンプルプログラムを動作させた時の備忘録。

ESP32-WROOM-32とI2C 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 インターフェースボード

購入したディスプレイ。

I2C LCD

環境

サンプルプログラムは Windows上の Arduino IDE で開発&コンパイルして USB 経由で ESP32-WROOM-32 に書き込んだ。

環境は以下の通り。

OS

Windows 10 Home(64 Bit)

Arduino IDE

1.8.13

配線図

ESP32-WROOM-32 モジュールと I2C LCD との配線図。

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:開放

A2A1A0I2Cアドレス
0000x20
0010x21
0100x22
0110x23
1000x24
1010x25
1100x26
1110x27

秒数を表示

millis() は Arduinoボードがプログラムの実行を開始して時から現在までの時間をミリ秒で返す関数。

1000 で割って秒数に変換して lcd.print でディスプレイに表示している。

    int times=millis() / 1000;
    lcd.print(times);

自動スクロール

スケッチ上ではコメントアウトしているが、右から左に自動でスクロールする事ができる。

    lcd.autoscroll(); // 自動でスクロール

一文字ずらす

また同じくコメントアウトしているが一文字づつ右にシフトしてスクロールしているように見せることもできる。

    lcd.scrollDisplayRight(); // 右にシフト

その他の機能

コントラスト

表示のコントラスト(明暗)を裏面の半固定抵抗で調整可能だ。

最初にサンプルプログラムを動かした時に何も表示されなくて配線やプログラムのミスを疑ったが、半固定抵抗をプラスドライバーで時計回りに回したら表示されるようになった。

工場出荷時の状態だと 5V に接続しても半固定抵抗をやや時計回りに回さないと文字が視認できなかった。

半固定抵抗でコントラスト

VCC を 3.3V に接続した時は半固定抵抗を時計回りに最大まで回してようやく見える程度だったので基本的には 5V 電源が必要だと思ったほうが良い。

写真と肉眼では見え方が違うが 3.3V の方は半固定抵抗を目一杯時計回りに回した状態。

5Vと3V3の比較

バックライト調整

バックライト調整用のジャンパーピンが背面に付いている。

外すとバックライトが消灯する。

半固定抵抗を入れることでバックライトの強さを調整できる模様(未検証)。

バックライト調整用ジャンパーピン

以上で今回の記事は終了とする。

最後に

この記事が何処かで誰かの役に立つことを願っている。

尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。