ESP32を使ってIoTデバイスを作ってみた第2弾です。
その1では、ESP32を使えるようにライブラリを導入してLEDを光らせるところまでやりました。
その2では、ESP32をネットワークに接続し、ブラウザからLEDを光らせるところまで行きたいと思います。
■まずはwebサイトの準備です。
webサイトに作成については今回は詳しく書きません。
無料でサーバを借りられるサービスなどがありますのでそちらで借りてください。
私は以下のxfreeというサイトで無料のサーバーを準備しました。
https://www.xfree.ne.jp/
そのサーバーに置くファイルは以下のgitから落としてきましょう。
https://github.com/MassSkt/IoT_Airconditioner_webInterface_and_API/tree/master/html
こちらのhtml以下にあるファイルたちををサーバにおいてください。
ただしhtml\js\index.jsファイルだけ少し書きかえる必要があります。
index.jsを適当なソフトで開きましょう。
開くと以下のようなコードになっています。
この3行目と4行目の部分(赤枠の白字部分)のURLを自分のサイトのURLに変更してください。
(Temperatureの部分文字化けして、変なのが表示されているかもしれませんが、気にしないでください。)
とりあえずこれで、サイト側の準備は完了です。
■ESP32をネットワークにつながるようにしましょう。
回路については前のブログをご参照ください。
https://goengine.hatenablog.com/entry/2019/05/26/141312
早速ですが、以下のコードをesp32に書き込みましょう。
#include <WiFi.h>
const char* ssid = "************"; //ご自分のルーターのSSIDに書き換えてください。
const char* password = "************"; //ご自分のルーターのパスワードに書き換えてください。
const char* host = "************";
int IR_SEND_PIN = 27; // LEDのピン
void setup() {
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// 出力に設定
pinMode(IR_SEND_PIN, OUTPUT);
}
void loop() {
delay(100);
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// We now create a URL for the request
String url = "/stateGet.php";
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = millis() + 5000;
while (client.available() == 0) {
if (timeout - millis() < 0) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
int i = 0;
while (client.available()) {
String line = client.readStringUntil('\r');
if (i == 8) {
if (line.lastIndexOf("OFF") == -1) {
Serial.println("on");
digitalWrite(IR_SEND_PIN, 1);
} else {
Serial.println("off");
digitalWrite(IR_SEND_PIN, 0);
}
break;
}
i++;
}
Serial.println("closing connection");
}
3行目、4行目、6行目はそれぞれ環境自分の環境にあったものをご使用ください。
これでESP32に書き込めば、サーバー上のphpファイルからon,offの情報を取ってきてLEDが光るはずです。
ちなみに完成は品はこんな感じで、web上でon,offボタンを押すとLEDがそれに対応して光ります。
こちらは温度センサも付属させており、部屋の温度も表示するようになっています。
次回はこのLEDを赤外線LEDに変更して部屋のエアコンを操作できるようにしていきたいと思います。