2018年2月7日 星期三

在ESP 8266上運行IFTTT觸發和操作


在ESP 8266上運行IFTTT觸發和操作

 自上次更新以來已經過去了一年多的時間。

介紹

IFTTT的製造商頻道是一個渠道,可以很容易地將自製設備連接到觸發器或操作。在這裡,我們將向您展示如何使用ESP 8266 WiFi芯片的Arduino核心,並實現與ESP 8266的Maker Channel觸發器和操作。

準備

ESP 8266

ESP8266的Arduino核心關於如何在Arduino IDE中使用WiFi芯片的信息,請參考“ ESP-WROOM-02開發板上myThings的測試IDCF通道 ”。在寫這篇文章時的最新版本是2.0.0,但是現在已經更新到2.1.0,進一步的增強和錯誤修正正在進行。

IFTTT

作為IFTTT方面的準備,訪問Maker頻道網頁並啟用此頻道。設置完成後,按鍵顯示在“您的密鑰是:”之後,因此請複制該字符串並將其保存在某處。

履行

在觸發的情況下

IFTTT方面

在IFTTT方面,創建一個觸發器作為Maker Channel和作為通知的操作。此時,ESP 8266也使用指定為觸發事件名稱的事件名稱(本例中為“ping”)。
IMG_ 0579.PNG

ESP 8266方面

要觸發IFTTT Maker頻道,請轉到以下網址。
https://maker.ifttt.com/trigger/{event}/with/key/{key}
如果有一個正文,我們將按照以下格式傳遞JSON格式的數據(這次我們只會判斷事件名稱而不使用正文)。
{  “value 1”   “***”  “value 2”   “***”  “value 3”   “***”  }
以下是大約每分鐘觸發事件名稱“ping”的示例。將config.h中的“*”替換為您實際訪問的Wi-Fi接入點和IFTTT生成的密鑰。我們使用HTTPS(HTTP over TLS)從ESP 8266連接,但是我們不檢查證書。
config.h中
// Wi-Fi接入點的SSID和密碼
const  char *  ssid  =  “********” ; 
const  char *  password  =  “********” ;

// IFTTT的密鑰
const  char *  key  =  “**********************” ;

IFTTT_Trigger
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

// 設定ファイル
#include "config.h"

const char* host = "maker.ifttt.com";
const char* event   = "ping";
const int httpsPort = 443;

WiFiClientSecure client;

void setup() {
  Serial.begin(115200);
  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());
}

void loop() {
  Serial.print("connecting to ");
  Serial.println(host);

  if (!client.connect(host, httpsPort)) {
    Serial.println("connection failed");
    return;
  }

  // URLを作成
  // maker.ifttt.com/trigger/{event}/with/key/{key}
  String url = "/trigger/";
  url += event;
  url += "/with/key/";
  url += key;

  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;
    }
  }

  String line = client.readStringUntil('\n');
  Serial.print("reply: ");
  Serial.println(line);
  Serial.println("closing connection");
  Serial.println();

  // 1分後に再度実行
  delay(60000);
}

在行動的情況下

在IFTTT的設備信道,動作適於發送web請求給web服務器的外部。為了解決這個問題,才能夠訪問全球的ESP8266到Web服務器,但也認為,可能有更多的環境,不能隨意安裝,可以從互聯網訪問服務器的方法。所以,在這裡我們將向你展示如何使用MQTT從ESP8266連接為一個更加現實的方式。
消息代理對於MQTT是必需的,但在這種情況下,需要使用REST訪問什麼。myThings的IDCF通道中使用的Meshblu也是對應於REST和MQTT的消息代理,但是當與REST一起使用Meshblu時,必須給定一個自定義頭的身份驗證信息。另一方面,由於在IFTTT側可以指定的報頭是有限的,所以不幸的是,Meshblu不能用作用IFTTT發送Web請求的目的地。
所以這次我們會用Beebotte。Beebotte是為物聯網專門設計的PaaS(平台即服務),準備了各種價格計劃,每天高達50,000條消息,最多可存儲5,000條數據,數據保存期3個月如果它是免費的條件,你可以操作它。另外,還可以使用Python,PHP,JavaScript等,可以使用REST和MQTT。
源自於https://qiita.com/mayfair/items/e761c788a9d8787bc610#esp8266%E5%81%B4%E3%81%AE%E8%A8%AD%E5%AE%9A

沒有留言:

張貼留言