ArduinoでLCDに文字表示

はじめに
こんなことやります。 - LCD1602をI2C化してシリアル通信できるようにする - ArduinoとLCDをI2C接続して文字を表示する
準備
LCDとArduinoの準備を行います。
LCDとシリアル変換モジュールのはんだ付け
写真のように、LCDとシリアル変換モジュールをはんだ付けします。
シリアル変換モジュールのLEDジャンパ線は、バックライトになりますので短絡します。
また、シリアル変換モジュールについている半固定抵抗は文字表示のコントラスト調整になります。ここを適切に調整しないと文字表示されても見えませんので覚えておいてください。
ArduinoとLCDシリアルインタフェースモジュールの配線
ArduinoとLCDシリアルインタフェースモジュールを、それぞれ次のように繋いでください。
I2Cモジュール | Arduino |
---|---|
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
Arduino UNO Rev3でI2Cを使う場合には、A4がSDA、A5がSCLに指定されているため配線に注意してください。 下図のように、A4とA5はそれぞれ2つづつピンが用意されてますので、どちらの配線でも構いません。


ライブラリのインストール
ArduinoからI2C通信でLCDに文字表示するため、「LiquidCrystal
I2C」というライブラリを使用します。ライブラリマネージャーから「LiquidCrystal
I2C」で検索してインストールしてください。
https://github.com/johnrickman/LiquidCrystal_I2C
I2Cアドレスの設定
今回使用するLCDシリアル変換モジュールのI2Cアドレスは、デフォルトで0x27
に設定されてます。
シリアル変換モジュールのジャンパピンA0、A1、A2を短絡することで、I2Cアドレスを0x20〜0x27の間で変更できるようです。
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 |
0はジャンパピンを短絡、1はジャンパピンが開放状態を意味します。
ArduinoでLCDに文字表示
次のアニメーションのような文字表示をプログラミングします。
ソースコード
#include <LiquidCrystal_I2C.h>
(0x27,16,2);
LiquidCrystal_I2C lcdfloat count = 1.0;
void setup() {
.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Ready...");
lcd(3000);
delay}
void loop(){
char line1[15] = "Hello, world!";
char line2[15];
char floatString[4];
(count, 3, 1, floatString);
dtostrf(line2, 15, "Count: %s", floatString);
snprintf
.clear();
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
lcd
= count + 0.1;
count (100);
delay}
プログラムの解説
LiquidCrystal_I2C lcd(0x27,16,2);
でLCDを初期化します。I2Cアドレスはデフォルトで0x27
、2行16文字のLCDを使うのでこのように設定します。
文字が表示されない場合は、I2Cアドレスが正しいか確認してください。また、コントラストの関係で文字が見えない場合は、I2Cモジュールの半固定抵抗を回して調整してください。
lcd.setCursor(列番号、行番号)
で文字表示を開始する位置を指定できます。
float型の変数をLCDに表示させるには、ソースコードのように少し工夫が必要です。dtostrf
関数でfloat型のような小数点を含む数値を文字列へ変換させます。dtostrf(変換する値, 小数点や符号を含んだ変換後の文字数, 小数点以下の桁数, 変換後の文字列を格納する変数)
のように指定します。そして、snprintf
関数でchar型の配列へ格納し、lcd.print
でLCDに文字表示させました。
さいごに
今回はじめてLCDをArduinoで使ってみました。パラレル接続のLCDは配線がややこしいので今まで嫌厭していましたが、I2Cのシリアルインタフェースを利用するととても簡単に配線ができ、プログラミングも簡単でした。
CUI型のディスプレイには、他にもOLEDがあります。
OLEDは、文字表示の表現がLCDより広く自由です。その代わり、キレイに文字を並べようとするとカーソルの移動などに苦労します。 一方で、LCDは文字表示される位置が決められているので、プログラミングが容易です。値段も安いので、今後はLCDをもっと活用していきたいと思いました。
関連記事
- 【Raspberry Pi】はじめてのI2C設定
- 【Arduino】リアルタイムクロック(DS3231)で現在時刻の表示
- 【Arduino】OLEDに文字表示【Seeeduino】
- 【Arduino】MAX30100で心拍数と血中酸素濃度の測定【パルスオキシメーター】
- ESP32でST7735 TFT LCD液晶ディスプレイを使ってみる