mono が 2020年06月15日08時30分57秒 に編集
初版
タイトルの変更
ESP8266とDHT11センサーとIFTTTを使ってLineに温度と温度を通知する
タグの変更
Arduino
ESP8266
IFTTT
本文の変更
**はじめに** 前回(ESP8266とDHT11とAmbientを使って部屋の温度と湿度をグラフ化)に引き続き、ESP8266とDHT11を使った工作です。 今回は「IFTTT」という異なるプラットホームを連携してくれる便利なwebサービスを使って、温度と湿度をLineに通知させます。 ※http通信を使用してるので注意 **準備** 事前にIFTTTのアカウントを作成し,アプレットの作成とWebhooksチャンネルの設定を行います。 Webhooksの使い方についてはこちらのサイト[「IFTTTの『Webhooks』の使い方を例題で簡単説明【初心者向け解説】」](https://ifttt-japan.club/apply-webhooks)が大変わかりやすかったので、こちらを参照してみてください。 アプレットはWebhooksとLineを指定して作ります。 こんな感じ イベント名は「test」にして作りました。 ![キャプションを入力できます](https://camo.elchika.com/afebbd1bfa24b93cfdb8d208119525baa45ead8d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34623535663234372d343264612d346463342d383136312d3465313134383033653664362f64626338653366352d353239652d343833622d623935652d343731656361343433666338/) **コード** ```arduino:IFTTTに投稿 #include <ESP8266WiFi.h> #include "DHT.h" // DHT11の設定 #define DHTPIN 12 // 使用するGPIOピン #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); WiFiClient client; //WiFiのIDとPASS const char *ssid = "****"; const char *password = "****"; //host名 const char* host = "maker.ifttt.com"; void setup() { // put your setup code here, to run once: Serial.begin(115200); // WiFiに接続 Serial.println(ssid); Serial.print("Waiting for Wi-Fi connection"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); dht.begin(); } void loop() { // put your main code here, to run repeatedly: float t = dht.readTemperature(); float h = dht.readHumidity(); delay(200); if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT sensor!"); return; } //シリアルモニターに温度・湿度の表示 Serial.println("Temperature: " + String(t) + "C Humidity: " + String(h) + "%"); const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // IFTTTに温度と湿度を送る //urlを作成 String url = "/trigger/イベント名/with/key/イベントキー"+"?value1="+String(t)+"&value2="+String(h); // IFTTTにリクエストを送る Serial.print("Requesting URL: "); Serial.println(url); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { // ヘッダ部分の受取終了 break; } } delay(1000*60); //1000ミリ秒=1 *60秒なので1分 } ``` イベント名は自分で設定したものを、イベントキーについてはWebhooksのSettings画面から参照してみてください。 これでline通知が来ると思います。 ![キャプションを入力できます](https://camo.elchika.com/c6e96b331ceb086afcd097ffdf4f3ef1d1ff7365/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34623535663234372d343264612d346463342d383136312d3465313134383033653664362f62313431656566622d363130612d343837612d396137312d343562303033663562373435/) **おまけ** 応用としてwebhooksとスマートプラグを連携し、湿度によって加湿器などのオンオフを自動化することも可能です。 その場合、事前にIFTTTのアプレットをもう一つ作り、url作成部分に条件分岐を付け加えて条件によってイベント名を変えることで出来ます。 ```arduino: const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } String url =""; // IFTTTに温度と湿度を送る if(h<=40){ //湿度40%以下の場合 //urlを作成 url = "/trigger/加湿器オン用イベント名/with/key/イベントキー"+"?value1=" +String(t)+"&value2="+String(h); }else{ url = "/trigger/加湿器オフ用イベント名/with/key/イベントキー"+"?value1=" +String(t)+"&value2="+String(h); } // IFTTTにリクエストを送る Serial.print("Requesting URL: "); Serial.println(url); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { // ヘッダ部分の受取終了 break; } } } ``` **最後に** 前回のAmbientを使った温度と温度のグラフ作成と今回のIFTTTをつかったLineへの通知やスマートプラグとの連携を併せて使うことで、自分の部屋の温度と湿度を完璧に把握し、最適な温度・湿度を保ち快適な(?)部屋での生活を快適にしましょう(需要があるかわからないけど…)