ArduinoでLCDに文字表示

ArduinoでLCDに文字表示
ArduinoでLCDに文字表示

こんなことやります。

  • LCD1602をI2C化してシリアル通信できるようにする
  • ArduinoとLCDをI2C接続して文字を表示する

つかうもの

本記事で「つかうもの」を紹介します。

LCD(1602)ディスプレイモジュール

KKHMFの2個セットで販売されているLCD1602ディスプレイモジュールを使用しました。

LCDとは

LCDとは、Liquid Crystal Displayの略で、いわゆる液晶ディスプレイのことです。液晶に電圧を加えることで、光の屈折具合が変化し文字表示などに利用されます。液晶そのものが発光するわけではないので、見やすくするためにバックライトが必要です。 一方で、文字そのものが発光する「OLED」も最近ではよく利用されます。OLEDについて詳しくは 【Arduino】OLEDに文字表示【Seeeduino】 をご覧ください。

LCD用I2Cシリアル変換モジュール

LCDモジュールはそのままですとパラレル通信なため、Arduinoとの配線が10本程度にもなってしまいます。そこで、LCDをI2C接続できるようにシリアル変換モジュールを使います。こちらのシリアルインタフェースを介せば、わずか4本線でLCDを制御できます。

▼ シリアル変換モジュールとセットのLCDも販売されてます。

Arduinoボード

ここではArduinoボードとして、Arduino Uno Rev3を使用しました。

▼ もちろん、他のArduinoを使ってもらっても構いません。

まだ、Arduinoをお持ちでないようでしたら、 おすすめArduinoどれを選べばいい?Arduinoで電子工作をはじめる方へ をご覧ください。

その他の電子部品

ブレッドボードやジャンプワイヤをお持ちでない方は揃えておくと良いでしょう。

準備

LCDとArduinoの準備を行います。

LCDとシリアル変換モジュールのはんだ付け

写真のように、LCDとシリアル変換モジュールをはんだ付けします。 シリアル変換モジュールのLEDジャンパ線は、バックライトになりますので短絡します。 また、シリアル変換モジュールについている半固定抵抗は文字表示のコントラスト調整になります。ここを適切に調整しないと文字表示されても見えませんので覚えておいてください。

LCDとシリアル変換モジュールのはんだ付け
LCDとシリアル変換モジュールのはんだ付け

ArduinoとLCDシリアルインタフェースモジュールの配線

ArduinoとLCDシリアルインタフェースモジュールを、それぞれ次のように繋いでください。

I2CモジュールArduino
GNDGND
VCC5V
SDAA4
SCLA5

Arduino UNO Rev3でI2Cを使う場合には、A4がSDA、A5がSCLに指定されているため配線に注意してください。 下図のように、A4とA5はそれぞれ2つづつピンが用意されてますので、どちらの配線でも構いません。

ArduinoとLCDの配線図その1
ArduinoとLCDの配線図その1
ArduinoとLCDの配線図その2
ArduinoとLCDの配線図その2

ライブラリのインストール

ArduinoからI2C通信でLCDに文字表示するため、「LiquidCrystal I2C」というライブラリを使用します。ライブラリマネージャーから「LiquidCrystal I2C」で検索してインストールしてください。

ライブラリのインストール
ライブラリのインストール

GitHub - johnrickman/LiquidCrystal_I2C: LiquidCrystal Arduino library for the DFRobot I2C LCD displays

I2Cアドレスの設定

今回使用するLCDシリアル変換モジュールのI2Cアドレスは、デフォルトで0x27に設定されてます。 シリアル変換モジュールのジャンパピンA0、A1、A2を短絡することで、I2Cアドレスを0x20〜0x27の間で変更できるようです。

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

0はジャンパピンを短絡、1はジャンパピンが開放状態を意味します。

ArduinoでLCDに文字表示

次のアニメーションのような文字表示をプログラミングします。

ArduinoでLCDに文字表示
ArduinoでLCDに文字表示

ソースコード

cpp
#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に文字表示させました。

さいごに

ArduinoでLCDに文字表示
ArduinoでLCDに文字表示
今回はじめてLCDをArduinoで使ってみました。パラレル接続のLCDは配線がややこしいので今まで嫌厭していましたが、I2Cのシリアルインタフェースを利用するととても簡単に配線ができ、プログラミングも簡単でした。 CUI型のディスプレイには、他にもOLEDがあります。

OLEDは、文字表示の表現がLCDより広く自由です。その代わり、キレイに文字を並べようとするとカーソルの移動などに苦労します。 一方で、LCDは文字表示される位置が決められているので、プログラミングが容易です。値段も安いので、今後はLCDをもっと活用していきたいと思いました。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

人気のArduino互換機
Arduinoで人気の周辺パーツ
あると便利な道具
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容です。ほかのArduino書籍と比べて図や説明がとてもていねいで読みやすいです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事