サイトロゴ

ArduinoでLCDに文字表示

著者画像
Toshihiko Arai

はじめに

こんなことやります。 - 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>

LiquidCrystal_I2C lcd(0x27,16,2);
float count = 1.0;

void setup() {
  lcd.init(); 
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Ready...");
  delay(3000);
}

void loop(){
  char line1[15] = "Hello, world!";
  char line2[15];
  char floatString[4];    
  dtostrf(count, 3, 1, floatString);
  snprintf(line2, 15, "Count: %s", floatString);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(line1);
  lcd.setCursor(0, 1);
  lcd.print(line2);

  count = count + 0.1;
  delay(100);
}

プログラムの解説

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をもっと活用していきたいと思いました。

関連記事