ESP32入門 通信機能が標準搭載されたマイコン・ボード (8) i2clcdライブラリを使ってみる
●IPアドレスをLCDモジュールに表示する
前回、温度センサTMP102で測定した温度をLCDモジュールに表示しました。そのプログラムに、Wi-Fiに接続して割り当てられたIPアドレスをLCDモジュールの下段に表示する機能を追加します。
●ヘッダ・フィルの読み込み
最初にヘッダ・ファイの読み込みを指定します。今回はWi-Fi経由でのネットワークへの接続だけなので、WiFiライブラリの追加だけです。ヘッダ・ファイルの読み込みの指定は、次に示すようにWiFi.hを追加します。
#include <Wire.h>
#include <i2clcd.h>
#include <WiFi.h>
具体的なデータのやり取りをネットワーク経由で行う場合は、サーバまたはクライアントの役割を担うライブラリの設定が必要になります。別途検討します。
●Wi-FiのSSID、パスワードの設定
次に、接続するWi-FiのSSIDとパスワードの文字列を設定します。ここでは文字列の先頭アドレスのポインタとして*ssid、*passwordと記述されています。
const char *ssid = "Buffalo-G-2C6E";
const char *password = "hxxxx3kvvvv3d";
この設定は、ssid[]、password[]と文字列と設定したものと同じになります。
●変数、定数の設定
IPAddress型の変数 ipadrを設定します。この変数には、DHCPサーバから振られたIPアドレスがセットされます。整数型の変数nは、カウンタで温度を測定するたびにカウントアップします。tmp2_adrにセットされる0x48の値は、温度センサのI2Cのスレーブ・アドレスです。
IPAddress ipadr;
int n = 0;
unsigned char tmp2_adr = 0x48;
●I2C経由でLCDに書き込むオブジェクトを作る
I2Cスレーブ・アドレス、電源電圧とLCDのコントラストを指定して、このプログラムで実際にLCDモジュールへの表示の処理を行うオブジェクトqlcdを作ります。
i2clcd qlcd(0x3E, 3, 0x20); //具体的な処理を行うためのオブジェクトを作る
●温度センサから温度を読み取る関数
関数get_tmp102()の戻り値が、実数の摂氏の温度となります。
float get_tmp102(unsigned char tmp0_adr) { // 温度センサを読み取る関数
Wire.requestFrom(tmp0_adr, 2);
while (Wire.available() < 2) {
}
int tmpin = Wire.read() * 16;
tmpin = tmpin + (Wire.read() >> 4);
return 0.0625 * tmpin;
}
●最初に1回だけ実施する処理がまとめられた関数
setup()の最初で、LCDモジュールの初期化を行い、startの文字を表示します。。
void setup(void) {
qlcd.init_lcd(); // LCDモジュールの初期化処理
qlcd.i2cprint("start:"); // 初期化の後”start“を表示
Serial.begin(115200); // シリアル通信を115200b/sで初期化
WiFi.mode(WIFI_STA); // WiFiをスタンダード・モードで開始
WiFi.begin(ssid, password); // 設定されたssid、passwordでWi-Fiに接続
Serial.println(""); // 改行を指定
while (WiFi.status() != WL_CONNECTED) { // 繰り返し接続をチェックし
delay(500); // 接続するまでチェックを繰り返す
Serial.print(".");
}
Serial.println(""); // 改行を指定
Serial.print("Connected to "); // 接続されたことを表示
Serial.println(ssid); // 接続先のssid、自身のIPアドレス得て表示する
Serial.print("IP address: ");
ipadr = WiFi.localIP(); // ipadrに自身のIPアドレスをセット
Serial.println(ipadr); // IPアドレスをシリアルモニタに表示
}
●繰り返し終わりなく処理される関数
カウンタ値と温度をLCDへ表示します。
void loop(void) {
qlcd.lcdclear(); // LCDモジュールのクリア
n = n + 1; // カウンタのカウントアップ
qlcd.i2cprint(String(n)); // カウンタの値をLCDへ表示
qlcd.i2cprint(":");
qlcd.i2cprint("temp2="); // 見出しをLCDへ表示
qlcd.i2cprint(String(get_tmp102(tmp2_adr))); // 測定温度を表示
qlcd.lcdcu_set(0, 1); // 下段の先頭にカーソルを設定
●IPaddress型
次の命令は、IPアドレスをLCDモジュールに表示します。ここでは配列ipad[0]には192、ipad[1]には168、ipad[2]には1、ipad[3]には66が設定されていました。ipad[2]、ipad[3]の値はそれぞれのネットワークで異なった値になります。配列の各要素をString()関数で0から255の表示できる文字列にして各要素の間に“.”を表示しています。
qlcd.i2cprint(String(ipadr[0]) + "."+String(ipadr[1]) + ".");
qlcd.i2cprint(String(ipadr[2]) + "."+String(ipadr[3]));
delay(1000);
}
テストしたプログラムは次のようになります。ssidとpasswordの値はダミーをセットしてあります。各自のネットワークに応じた値を設定してください。
コンパイルして実行した結果を次に示します。割り当てられたIPアドレスがLCDモジュールでも確認できるようになりました。
次回は、PCからこのアドレスにブラウザでアクセスして、測定した温度などを確認する方法を検討します。
(2019/3/10 V1.0)
<神崎康宏>
<参考> ライブラリi2clcdのインストールi2clcdライブラリに必要なi2clcd.cpp、i2clcd.h、keyword.txtをまとめたzipファイルを用意しました。このzipファイルをインストールして、Arduino IDEの「zip形式のライブラリをインストール」でこのライブラリが利用できるようにします。
●zip形式のライブラリをインストール
次に示すように、メニューバーの、
スケッチ>ライブラリをインクルード> zip形式のライブラリをインストール
を選択します。
●該当するzipファイルを選択する
「zip形式のライブラリをインストール」を選択して、次に示すインストールするzipファイルを選択する画面が表示されます。ダウンロードしたi2clcd.zipを選択し開くをクリックすると、ドキュメント・フォルダの、
Arduino\libraries\i2clcd
にライブラリがインストールされます。
●ライブラリの関数の各機能
次のページに、i2clcdライブラリの各メソッドの説明をまとめてあります。
ESP32入門 通信機能が標準搭載されたマイコン・ボード (7) i2clcdライブラリ
●i2clcdライブラリの作成
次のページにライブラリの作成について説明しています。