第12回では、一般的な16PinLCDをI2Cに変換できる基盤を用い、I2CでLCDを制御します。
第11回はこちらからどうぞ
I2C変換基盤とLCDの構成
今回使用するLCDは、
です。
Amazonには似たような変換基盤が多数出ていますが、今回はLCDと一緒に購入できるものを選択しました。
他のものと大きな差はないと思いますが、LCDとの接続部、14pinの並び順が逆のものがあるらしいので、はんだ付けする前に確認してください。
※今回購入したWayinTop 1602 LCDはLCDの上部からつける向きにピンが並んでいます。(裏向きにもつけられます。)
購入時点ではLCDと変換基盤がはんだ付けされていないので、向きを確認してからはんだ付けをします。
回路
接続は非常にシンプルで、変換基盤から出てる4pinに
変換基盤側 | Arduino側 |
GND | GND |
VCC | 5V |
SDA | SDA |
SCL | SCL |
をつなぐだけになっています。
ちなみに変換基盤についている可変抵抗(青色)は、画面の照度を変更するためのものですので、使用環境によって可変させてください。
コード
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0,0); // Line 1
lcd.print("MC Tourting ADV");
lcd.setCursor(0,1); // Line 2
lcd.print("SetUp Now");
}
void loop()
{
lcd.init();
lcd.setCursor(0,0); // Line 1
lcd.print("MC Tourting ADV");
lcd.setCursor(0,1); // Line 2
lcd.print("Mode 1");
delay(1000);
}
コードをシンプルにするためにライブラリを使用します。
ArduinoIDEのライブラリのインクルードから一覧を表示し、検索窓に
「LiquidCrystal I2C the library allows to control I2C displays」
と入力してください。
一番上に出てくる作者:Frank de Brabanderの「LiquidCrystal I2C」をインストールしてください。
コードの先頭で
LiquidCrystal_I2C lcd(0x27, 16, 2);
を宣言してますが、これは0x27のアドレスを使用すること、16列2行のLCDを使用することを示しています。
※今回使用する変換基盤のデフォルトアドレスは0x27になっています。
一般的なLiquidCrystalのコードと異なる点は、
①初期化がclearからinitに変わっている
②バックライトの制御ができ、最初に初期化.backlightを書く必要がある
の2点が異なるぐらいで、ほぼ同じコードが使えます。
結果
ひとつ前の記事のI2C制御LCDより、配線がシンプルになりましたね。
バックライト用の配線が変換基盤内で分岐しているため、5VとGNDの線が1本づつで済んでいます。
ここまで配線をコンパクトできると、旅Arduinoみたいに制御部(Arduino nano)をLCDの裏に持たなくてもよくなるので、ディスプレイ部だけ独立させることができ、スペースに余裕がある制御部に、Arduinoを持って行くことができます。
追加機能-表示の切り替え機能の実装-
簡単にLCDを4配線で駆動&制御できるようになってしまいましたので、今回は+αの機能を付けたいと思います。
今回使用したLCDは16列2行の文字を表示できるため、32文字の情報を取り扱えます。
ただ、機能をどんどん増やしていくと32文字では足りなくなることがあると思います。
LCDの中には20列2行や16列4行などと言った、もっと大きなLCDもありますが、表示数に応じて巨大化していきますので、同時に大量の情報を表示する必要がない場合は、今から紹介する、表示切替の仕組みを入れると従来のLCDで多数の情報を表示できます。
構成
LCDは上記のI2C変換基板との接続と同じです。
切り替え機能の実装に使用するのは、切り替えスイッチです。種類は何でもよいのですが、押すタイプのスイッチ(タクトスイッチ)ではなく、スライドして切り替えするタイプのスイッチを使用します。
タクトスイッチでも画面の切り替え機能を実装することはできますが、割り込み処理などを使わないといけないので、今回は簡単に使えるスライドスイッチを使います。
スライドスイッチにはArduinoから5Vを供給します。5Vはスイッチの足両方とつながっている足につないでください。
(一般的には3本足の中央)
そして余った2本の足のどちらかを、ArduinoのDigitalPin 13番につないでください。
コード
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int ModeOne = 13;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0,0); // Line 1
lcd.print("MC Tourting ADV");
lcd.setCursor(0,1); // Line 2
lcd.print("SetUp Now");
pinMode(ModeOne,OUTPUT);
}
void loop()
{
if ( digitalRead( ModeOne ) == HIGH ){
lcd.init();
lcd.setCursor(0,0); // Line 1
lcd.print("MC Tourting ADV");
lcd.setCursor(0,1); // Line 2
lcd.print("Mode 1");
}
else if ( digitalRead( ModeOne ) == LOW ){
lcd.init();
lcd.setCursor(0,0); // Line 1
lcd.print("MC Tourting ADV");
lcd.setCursor(0,1); // Line 2
lcd.print("Mode 2");
}
delay(1000);
}
ArduinoのDigitalPin13番を読み、状態がHIGH(スイッチが入り、デジタルピンに5Vが流れている状態)の場合、Mode1の文字列が表示されます。
逆にLOW(スイッチが切れ、デジタルピンに何もつながっていない状態)の場合、Mode2の文字列が表示されるようになっています。
これで、2画面を切り替えることができ、64文字までの情報を表示することができました。
まとめ
変換基盤を用いれば、どんなLCDでもI2C通信ができるようになります。ただ、ピン配置は各LCDで異なるので、変換する際は注意してください。
また、LCDをI2C化する変換基盤はAmazonでたくさん販売されていますので、ご自身が買った基盤が、今回ご紹介したものと同じかどうか確認してください。
旅を楽しくするArduino端末を作る。リンク集
その1-不満点を挙げよう-
その2-不満点をまとめよう-
その3-電圧測定器を作る-
その4-温湿度計を作る-
その5-気圧計を作る-
その6-方位・高度計をGPSで-
その7-12Vバッテリーから電力供給
その8-Ver1作成-
その9-電圧計の誤差とその代替案-
その10-Ver2へアップデート-
その11-LCDをI2Cで制御しよう-
その12-LCDをI2C化-
その13-Ver3へアップデート-
その14-USB充電の仕様に関して-
その15-Arduino言語を用いながらBluetoothで通信できるESP32-
その16-旅Arduino Ver4 スマホアプリ化-
この記事へのコメントはありません。