文字を表示する(Grove Beginner Kit For Arduino検証報告)

Grove Beginner Kit For Arduino(以下、Beginner Kit)検証報告の8番目です。前回の記事はこちらです。
hirocom777.hatenadiary.org

OLED ディスプレイ

 前回は3軸加速度計でBeginner Kit自体の状態や動きを見てみました。今回は、OLED ディスプレイについて見てみます。OLEDのOはオーガニックのOです。『有機』って意味です。つまり、『有機LED』ってことですね。液晶に比べて、表示速度が早い、黒が鮮やかに出るなどの特徴があります。

f:id:HiroCom777:20201107132212j:plain

OLED ディスプレイもI2C通信で制御されています。OLED ディスプレイを使用するには、以下からu8g2-master.zipをダウンロードして、ArduinoIDEのメニュー スケッチ⇒ライブラリをインクルード⇒.ZIP形式のファイルをインストール と進んでダウンロードしたファイルを開いてください。

GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2

まずは文字から表示

 さて、今までのモジュールに比べてOLED ディスプレイですが機能が豊富です。まずは文字の表示から取り組みたいと思います。Grove Beginner Kit For Arduino検証報告⑤で、温湿度センサーの値をシリアルモニターに表示するスケッチをご紹介しました。今回は表示先をOLED ディスプレイに変更したスケッチをご紹介します。

#include <U8x8lib.h>
#include "DHT.h"
DHT dht(3, DHT11);
int temp = 0;
int humid = 0;

U8X8_SSD1306_128X64_ALT0_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
void setup() {
  u8x8.begin();
  u8x8.setFlipMode(1);
  u8x8.setFont(u8x8_font_chroma48medium8_r);
}
void loop() {
  temp = dht.readTemperature();
  humid = dht.readHumidity();

  u8x8.setCursor(0, 1);
  u8x8.print("Temp:");
  u8x8.print(temp);
  u8x8.print("C  ");

  u8x8.setCursor(0, 2);
  u8x8.print("Humidity:");
  u8x8.print(humid);
  u8x8.print("%  ");
  delay(200);
}

入力して実行してみると・・・以下のように表示されたと思います。

f:id:HiroCom777:20201107134652j:plain

スケッチの解説

 文字を表示するには、スケッチの先頭に#include <U8x8lib.h>を記述します。I2C通信を使用するので本来ならWire.hも呼び足さなければならないのですが、U8x8lib.hの関連ファイルで記述があるので不要になっています。今回使用したライブラリは複数のOLED ディスプレイと接続方法に対応しています。そこで、以下の記述があります。

U8X8_SSD1306_128X64_ALT0_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

ここで選択されているOLED ディスプレイはSSD1306という型名です。実はBeginner KitのOLED ディスプレイはSSD1315なのですが、解像度が同じ(128×64 dot)でコンパチ品なのだと思います。これで"u8x8"を128x64のディスプレイをI2C通信で制御するオブジェクトを作成したことになります。

お次はsetup()の中身です。
・u8x8.begin()
 使用を開始する時に最初に宣言します。
・u8x8.setFlipMode()
 表示を180度反転させます。かっこの中に0を指定すると無効。1を指定すると有効になります。Beginner Kitでは反転を指定しないとさかさまに表示されてしまいます。何故なんだろ?
・u8x8.setFont()
 表示に使用するフォントを指定します。指定出来るフォントは今回読み込んだライブラリの\U8g2\src\clib\u8x8_fonts.cに記述されていますが、ここでは詳細は割愛します。

続いてloop()の中身です。
・u8x8.setCursor()
 文字を表示する位置を決めます。横方向の表示位置(左から0~15)と縦方向の表示位置(上から0~3)をかっこの中にコンマ区切りで指定します。u8x8.setCursor(0, 1)は2行目の先頭から表示するって意味です。

・u8x8.print()
 これは簡単ですね。文字や数字を表示します。使い方の詳細はSerial.print()と同じです。

次は図形を表示

 いかがでしたでしょうか。文字の表示だけでもかなりの機能がありますね。次回は図形の表示に取り組みたいと思います。お楽しみに!!
hirocom777.hatenadiary.org


Arduino Grove Beginner Kit For Arduinoの連載記事はコチラからどうぞ!!