前回の記事でArduinoに、OLED液晶ディスプレイモジュールを接続し、サンプルプログラムが動くまでを紹介しました。今回は、温湿度センサーを使い、計測結果をディスプレイに表示する例を紹介します。
Arduino(アルデュイーノ)にDHT11と呼ばれる温湿度センサーを接続し、温湿度をOLED液晶ディスプレイに表示してみます。併せてOLEDライブラリーの使い方について、今回はテキスト表示だけではありますが、他のプログラムでも使えるように設定例を紹介します。
なお、当記事の前提は前回の記事でOLEDライブラリー導入済みで、サンプルプログラムがうまく動いていることです。また、Arduinoについて初めての方はこちらの記事を参照ください。Scratchのようにブロックでプログラミングできる環境も紹介しています。
A.Arduinoに液晶ディスプレイとDHT11を接続
以下のように、配線します。私が購入したDHT11は3ピンしかないタイプでした。
B.サンプルプログラムで温湿度をシリアルモニターで表示してみる
1.DHT11用のライブラリーを追加するためにArduinoのツールメニューから『ライブラリーを管理』を選択します。
2.以下の『ライブラリーマネージャー』ウインドウが表示されますので、以下のように検索窓に『SimpleDHT』を入力すると下に結果が表示されますので、『SimpleDHT』をインストールしてください。インストールが完了したら、ライブラリーマネージャーのウインドウは閉じてください。
注:バージョンは最新が表示されていますので、特定のバージョンをインストールしたい場合以外は変更する必要はありません。
3.サンプルスケッチを開くために『開く』をクリックします。
4.以下のフォルダーにサンプルスケッチがありますので、それを使用します。
ドキュメント→Arduino→libraries→SimpleDHT→examples→
DHTDefault→DHT11Default.ino
5.このスケッチの実行結果は、シリアルモニタに表示されますので、以下のようにツールからシリアルモニタを開きます。
6.シリアルモニタが開きますので、今回使用するスケッチでは、Serial.begin(115200); と指定されていますので、シリアルモニタの右下のスピードが同じ値になっているか確認し、違っていれば変更します。
7.マイコンボードに書き込むをクリックします。
8.ボードへの書き込みが完了すると、シリアルモニタに計測結果が表示されます。これで、ArduinotoとDHT11が正しく接続されていると確認できましたので、次のステップで、サンプルスケッチに液晶ディスプレイに表示するための変更をします。
C.DHT11サンプルスケッチに液晶表示を追加
Adafruit_SSD1306ライブラリでは、ドット単位の表示、図形の表示、テキスト表示が簡単にできるよう色々な命令が準備されていますが、当記事ではテキスト表示について詳しく説明していきます。手順の最後に、以下の手順を踏んで作成した液晶に温度と湿度を表示するサンプルスケッチを掲示していますので、そちらを参照しながらステップを見ていただけると分かりやすいと思います。なお、英語版ですが、私が参考にした詳しい説明はこちらの記事を参照ください。
1.ドキュメント→Arduino→libraries→Adafruit_SSD1306フォルダー内の『Adafruit_SSD1306.h』ファイルで、どのタイプのディスプレイを使用するのか設定があります。私がダウンロードしたファイルでは、以下のように 128 x 32 になっていましたので今回128×64ですので、使用前にいつも使用されているエディターで確認して必要に応じて修正ください。//はコメントです。 128 x 64 を使用する場合は // #define SSD1306_128_64 を #define SSD1306_128_64 に修正して#define SSD1306_128_32 に//を追記すればOKです。以降の説明は、以下の設定前提で液晶も128 x 64 を使用しています。
#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16
2.Adafruit_SSD1306ライブラリーを使用するために、スケッチの最初に以下を追記してください。
// for OLED Display ///////////////
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
///////////////////////////////////
3.void setup () {} 内に、以下の命令を追記してください。
// Set display mode///////////////
// 以下の命令はディスプレイの初期化と、I2Cで通信する際のディスプレイのアドレス『0x3C』を指定しています。このアドレスは使用するディスプレイによって異なりますので、注意してください。
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//以下の命令は、ディスプレイのクリアーをします。(ディスプレイ用バッファーのクリアーと思われます)
display.clearDisplay();
//以下の命令は表示するテキストの大きさを指定します。スケッチのどこでも変更できますが、当サンプルでは最初に設定するようにしています。1を指定すると1行21文字で4行表示、2を指定すると1行10文字で2行表示、3を指定すると1行7文字表示、4を指定すると1行5文字表示となります。後ほど各表示例を示します。
display.setTextSize(2);
//以下の命令は表示文字色の指定します。WHITEで白文字、BLACK,WHITE指定で反転表示です。後ほど表示例を示します。
display.setTextColor(WHITE);
//////////////////////////////////
4.void loop () {} 内で、液晶に表示したい以下の命令を追記してください。この命令前までにDHT11から温度(int)temperatureと湿度(int)humidityが読み込まれている前提です。
// Display OLED //////////////////////
//以下の命令は、表示する数字が温度と湿度だと示すための文字列をtとhに保存します。
String t = “Ondo=”;
String h = “Shitudo=”;
//以下は”Ondo=”文字列と(int)temperature文字列をつないでtに保存する命令です。
t.concat((int)temperature);
//以下は”Shitudo=”文字列と(int)humidity文字列をつないでhに保存する命令です。
h.concat((int)humidity);
//以下の命令は、ディスプレイのクリアーをします。
display.clearDisplay();
//以下の命令は、文字をどこに表示するのか、ドットの位置で指定します。液晶ディスプレイの左上が0,0です。
display.setCursor(0,0);
//以下の命令は、ディスプレイの1行目に温度を表示し改行します。(実際にはバッファーに書き込む命令)
display.println(t);
//以下の命令は、ディスプレイの2行目に湿度を表示し改行します。(実際にはバッファーに書き込む命令)
display.println(h);
//以下の命令はバッファーの内容を実際にディスプレイに表示します
display.display();
//////////////////////////////////////
5.以下が上記の手順を反映したスケッチです。シリアルモニタと液晶ディスプレイの両方に温度と湿度が表示されます。
6.以下が液晶ディスプレイの表示例です。display.setTextSize(2)の場合です。
D.補足
1.文字表示場所は横ドット位置0~127、縦ドット位置0~63で指定します。上記のサンプルでは(横0、縦0)で左上を指定するサンプルですが、例えば、上から4ドット目、左端から表示したい場合はdisplay.setCursor(0,3);と指定します。
2.フォントは、Adafruit-GFX-Library-masterフォルダーの中のFonsフォルダーにあります。フォントを変更したい場合は、Fontsフォルダー内のフォントをスケッチに組み込みます。サンプルスケッチに、コメントして使用例が示してありますので//を消して動かしてみてください。フォントを変更するとカーソル位置を(0,20)のようにフォントの左下の位置を指定しないといけないようです。
3.残念ながら、Adafruit-GFX-Library-masterには、日本語フォントが入っていません。ttfファイルから変換できるようですので、もう少し調べてからひらがなとカタカナ表示について紹介したいと思います。
以上、OLED液晶ディスプレイへの文字出力についての紹介です。他のArduinoのスケッチにステップCの内容をコピーしていただけば、いろいろ使えるのではないでしょうか?
当記事のサンプルプログラムは以下のライセンスに基づき使用、提供しています。
https://opensource.org/licenses/mit-license.php
Copyright (c) 2012, Adafruit Industries
All rights reserved.
https://github.com/adafruit/Adafruit_SSD1306/blob/master/license.txt
最後まで記事をお読みいただきありがとうございます。
記事の改善に役立てたいと思いますので、よろしければアンケートにご協力ください。
コメントを書く