GROVE液晶モジュール(Arduino詳解その13)

Arduino詳解その13です。前回の記事はこちらです。

hirocom777.hatenadiary.org

文字の表示ができる!!

 液晶モジュール、面白いですよね。文字の表示が出来るようになれば、色々可能性が出てきます。今回は、このGROVE液晶モジュールについて解説していこうと思います。

GROVE液晶モジュール

 GROVE液晶モジュールは16文字×2行の文字表示ができる液晶ディスプレイをGROVEのインターフェースでコントロールできるようにしたものです。Arduinoには、もともとSC1602という液晶ディスプレイの部品を制御できる仕組みが標準で装備されています。ArduinoIDEメニューでスケッチ例を開くと、LiquidCrystalという項目が出てきます。ここに収められているスケッチを使用するとArduinoに接続されているSC1602が制御できるという寸法なのですが、配線が10本以上必要でめんどくさい!!使用する信号も多いので、一緒に接続できるデバイスも限られてしまいます。そこで、GROVE液晶モジュールです。このモジュールは電源、GND、信号2本の4本の接続だけで使用できます。でも、どうして4本の配線だけで動かせるんでしょうか?

I2C通信

 それは、I2C通信っていう方法を使っているからです。そう言えば、GROVEベースシールドに接続するときに"I2C"って表示されているコネクタに接続しましたよね!!これは、このコネクタはI2C通信に使えますって意味なんです。I2C通信はシリアル通信方式の1種です。一方SC1602との接続はパラレル通信。シリアル通信とパラレル通信は以下で少しお話ししました。

hirocom777.hatenadiary.org

一般的に、パラレル通信では配線が多くなりますが、高速な通信が出来て用意するハードウェアもシンプルです。一方、シリアル通信では配線量が少なくて済みます。でも、通信速度は速くできませんし、データを変換するハードウェアを送受信側で持たないといけません。GROVE液晶モジュールは、I2C通信を可能にするハードウェアを搭載した液晶モジュールなんです。液晶モジュールの場合、液晶自体の反応速度が遅く、あまり高速な通信を必要としません。ハードウェアを搭載した分価格は高くなりますが、配線が少なくなることを考えたら大したことはありません。I2C通信は液晶モジュールの制御をするには打ってつけなのです。また、GROVEベースシールドには"I2C"と表示されたコネクタが複数(4つ)ありますが、これは1つのI2Cポートに複数のデバイスが接続できることを意味しています。I2C通信については別の機会に詳しく説明していきたいと思います。

スケッチの解説

 前回使用したスケッチを解説します。以下に再掲しますね。

#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

void setup() {
    // set up the LCD's number of columns and rows:
    lcd.begin(16, 2);
    // Print a message to the LCD.
    lcd.print("hello, world!");
}

void loop() {
    // Turn off the display:
    lcd.noDisplay();
    delay(500);
    // Turn on the display:
    lcd.display();
    delay(500);
}

・#include
 最初の2行に現れる#includeは、予め作ってあるライブラリファイルを読み込むって意味です。でも、1行目と2行目で表記方法が違いますよね。
1行目のWire.hはArduino側で予め用意した標準のライブラリです。I2C通信を使用する際にこのライブラリを読み込みます。標準のライブラリを読み込むときにはファイル名を<と>で囲います。
2行目のrgb_lcd.hは今回登録したGrove_LCD_RGB_Backlight-masterに含まれます。このライブラリファイルは何処にあるのでしょうか?ArduinoIDEのファイルメニュー→環境設定とすると、スケッチブックの保存場所の欄に表示されるフォルダ名が表示されます。

f:id:HiroCom777:20200615225636j:plain

この下にGrove_LCD_RGB_Backlight-masterというフォルダがあるはずです。rgb_lcd.hはこの中にあります。このライブラリは非標準で、非標準のライブラリを呼び出す場合には""でファイル名を囲います。

・rgb_lcd ~
次に現れる"rgb_lcd lcd;"ですが、rgb_lcdはrgb_lcd.h内で定義されているクラスです。この様に記述すると、lcdを液晶モジュールを制御できるオブジェクトとして定義されます。この辺は難しいので、こうするとlcdを使って液晶を制御できると覚えておけばいいと思います。定義されたlcdは、液晶モジュールをコントロールするメソッドを使えるようになります。以下に、何点かメソッドを紹介します。

・オブジェクト.begin(cols, rows);
 液晶モジュールを初期化します。colsは列数、rowsは行数を指定するのですが、実際のところはcolsは16、rowsは2で固定です。でも、将来もっと表示できる液晶モジュールが現れるのかもしれません。 

・オブジェクト.print(text);
 液晶モジュールに文字列を表示します。

・オブジェクト.noDisplay(); オブジェクト.Display();
 noDisplayは、液晶モジュールを消灯します。Displayで再度点灯します。

上記のスケッチは、以上のメソッドを使ってsetupで液晶モジュールの初期化、文字の表示を行い、loopで表示の点滅を実行しています。他にも、以下のメソッドがよく使用されます。

・オブジェクト.setCursor(col, row);
 液晶モジュールのカーソル位置を設定します。設定すると、以後その場所から文字を表示します。colは列、rowは行です。何れも先頭は0になります。

・オブジェクト.clear();
 液晶モジュールの表示を消去して、カーソル位置を左上に設定します。

上記以外にもメソッドがあります。他のスケッチ例を試してみると色々わかりますよ!!

次回は音です

 文字の表示はできたので、次回は音による通知を実現したいと思います。以下のモジュールを使いますよ!!
www.switch-science.com
お楽しみに!!
hirocom777.hatenadiary.org


Arduino UNO入門の連載記事はコチラからどうぞ!!