Grove Beginner Kit For Arduino(以下、Beginner Kit)検証報告の8番目です。前回の記事はこちらです。
hirocom777.hatenadiary.org
OLED ディスプレイ
前回は3軸加速度計でBeginner Kit自体の状態や動きを見てみました。今回は、OLED ディスプレイについて見てみます。OLEDのOはオーガニックのOです。『有機』って意味です。つまり、『有機LED』ってことですね。液晶に比べて、表示速度が早い、黒が鮮やかに出るなどの特徴があります。
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); }
入力して実行してみると・・・以下のように表示されたと思います。
スケッチの解説
文字を表示するには、スケッチの先頭に#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