LoginSignup
4

More than 3 years have passed since last update.

ESP8266とDHT11センサーとIFTTTを使ってLineに温度と温度を通知する

Last updated at Posted at 2020-02-13

はじめに

前回(ESP8266とDHT11とAmbientを使って部屋の温度と湿度をグラフ化)に引き続き、ESP8266とDHT11を使った工作です。
今回は「IFTTT」という異なるプラットホームを連携してくれる便利なwebサービスを使って、温度と湿度をLineに通知させます。

※http通信を使用してるので注意

準備

事前にIFTTTのアカウントを作成し,アプレットの作成とWebhooksチャンネルの設定を行います。
Webhooksの使い方についてはこちらのサイト「IFTTTの『Webhooks』の使い方を例題で簡単説明【初心者向け解説】」が大変わかりやすかったので、こちらを参照してみてください。

アプレットはWebhooksとLineを指定して作ります。
こんな感じ イベント名は「test」にして作りました。
Screenshot from 2020-02-13 09-03-01.png

コード

#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通知が来ると思います
Screenshot_20200213-101334.jpg

おまけ

応用としてwebhooksとスマートプラグを連携し、湿度によって加湿器などのオンオフを自動化することも可能です。
その場合、事前にIFTTTのアプレットをもう一つ作り、url作成部分に条件分岐を付け加えて条件によってイベント名を変えることで出来ます。

  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への通知やスマートプラグとの連携を併せて使うことで、自分の部屋の温度と湿度を完璧に把握し、最適な温度・湿度を保ち快適な(?)部屋での生活を快適にしましょう(需要があるかわからないけど…)

追記

elchikaに記事を投稿しました。
(https://elchika.com/article/6b3a8be4-0393-4461-a4b7-6d9dc594f0f9/)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4