先週紹介したSlackからデジタルサイネージにメッセージを表示する。では、Slackで指定したメッセージをデジタルサイネージに表示させるため、サーバーを実装するところまで説明しました。本記事では、デジタルサイネージ側からサーバーにあるメッセージを取得します。具体的には、ESP8266でのHTTP GETリクエスト処理について解説します。 当例ではESP8266のプログラミングはArduino IDEを用いて行いますが、環境構築については公式ドキュメントか日本語の紹介記事をご覧ください。
ライブラリのインクルードとWiFi情報の用意
ESP8266でHTTPリクエストを行うにはいくつかの方法がありますが、今回はESP8266HTTPClientを使った方法を紹介します。はじめに必要なライブラリをインクルードして、WiFiに接続するためのSSIDとパスワードを用意します。#include
#include
char ssid[] = "";
char password[] = "";
WiFi接続/切断・JSONレスポンスの表示
setup関数を記述します。サーバーからメッセージを一度だけ取得するのでほとんどの処理がこの関数に書かれています。処理ごとに確認していきましょう。 Arduino IDEのシリアルモニタから出力を確認するためにシリアル接続を設定します。シリアルモニタはIDEの右上にある虫眼鏡のようなアイコンをクリックして表示されるウィンドウです。 シリアルモニタを開いたら、右下にあるボーレートを9600bpsから115200bpsに変更しておきましょう。while(!Serial){}
はシリアルの接続が確立するまで次の処理を待ちます。
void setup() {
Serial.begin(115200);
while(!Serial) {}
...
続けてWiFi接続を行います。WiFi.mode()
はESP8266のWiFi機能を親機や子機、または両方として設定できます。下記のコードでは子機となります。
...
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
Serial.println("Connected!");
...
setup関数最後の処理は、HTTPリクエスト後に受け取ったJSONメッセージの表示とWiFiの切断です。fetchMessage
関数は次のセクションで定義します。
...
String message = fetchMessage("");
Serial.println(message);
WiFi.disconnect();
Serial.println("Disconnected!");
}
ESP8266でのGETリクエスト
fetchMessage関数を定義し、GETリクエストの処理を記述します。接続先のURLを引数として受け取り,http.GET()
で実際にGETリクエストを行います。その後httpCode
の値によって条件分岐をかけていますが0以上の場合は200, 404のようなHTTPステータスコードが含まれています。マイナスの値はリクエストがなにかしらの理由で失敗した場合に使われます。例えば-4
はネットワークの接続が切れていることを示します。
String fetchMessage(char host[]) {
HTTPClient http;
http.begin(host);
int httpCode = http.GET();
String payload = "";
if (httpCode > 0) {
Serial.printf("HTTP GET ... code: %dn", httpCode);
if (httpCode == HTTP_CODE_OK) {
payload = http.getString();
}
} else {
Serial.printf("HTTP GET failed, error: %sn", http.errorToString(httpCode).c_str());
}
http.end();
return payload;
}
今回は何も処理を記述しませんが、存在しない場合はエラーとなるのでloop()
関数を末尾に追加します。
void loop() {}