ESP-WROOM-02에서 얻은 센서의 값을 IFTTT에 전달

지난번 , ESP-WROOM-02에서 Web Server를 실행했습니다.
이번에는 Web Client와 동작시켜 ESP-WROOM-02에 접속한 광센서의 값을 IFTTT의 메이커 채널에 건네주는 것으로 결국 Twitter에 tweet한다. 라는 것을 해보고 싶습니다.

IFTTT Maker Channel



IFTTT란?



IFTTT (이프트)이란 「레시피」라고 불리는 개인 작성 혹은 공개적으로 공유하고 있는 프로파일을 사용해 수많은 Web 서비스(Facebook, Evernote, Weather, Dropbox등)끼리 연계할 수 있는 Web 서비스이다.
'if this then that'이라는 간단한 개념을 기반으로 '레시피'를 만들고 공유할 수 있습니다.
Wikipedia

Maker Channel이란?



올해 6월에 IFTTT에 새로운 Maker Cahnnel이 생겼습니다. Raspberry Pi와 Arduino를 쉽게 연결할 수있는 채널입니다.
지금까지, 넷상의 서비스만의 제휴였던 것이, 실제의 물건도 제휴할 수 있게 되었습니다.

자세한 내용은 아래의 Switch Science 블로그 기사를 참조하십시오.
IFTTT나 Maker Channel의 분위기를 알 수 있을까 생각합니다.
IFTTT에 메이커 채널이 생겼습니다.

Recipe 만들기



우선, 연계 설정(Recipe)을 작성합니다.
이번은 테스트이므로, Trigger로서 Maker Channel을, Action으로서는 아무것도 좋지만 Twitter를 선택합니다.



이벤트 이름의 "ESP-WROOM-02"를 기억하십시오.
또, Action측에는 Value1-Value3까지 3개의 값을 건네줄 수 있습니다만, 이번 Twitter에는 Value1만을 건네기로 합니다.

trigger에 값을 전달하는 방법



값을 전달하는 방법은 Maker Channle의 "How to Trigger Events"또는 "Secret Key"를 클릭하면 상세하게 표시됩니다. 자세한 것은, 아래가 참고가 됩니다.
IFTTT의 설명에서는 POST의 예가 기재되어 있습니다만, 아래의 기사에 의하면 GET도 사용할 수 있는 것 같습니다.
IFTTT에 메이커 채널이 생겼습니다.

이번에 아래와 같이 URL을 준비하고 GET에서 값을 전달하고 싶습니다.
event에는 이전에 확인한 event명을, secret-key에는 Maker Channel로 표시되는 Secret Key를, 그리고 val1에서 val3에는 센서로 취득한 값을 지정해 건네줍니다.
GET http://maker.ifttt.com/trigger/{event}/with/key/{secret-key}?value1={val1}&value2={val2}&value3={val3} HTTP/1.1"


ESP-WROOM-02로 광 센서의 값을 취득



일반적인 Arduino는 아날로그 값을 읽는 데 analogRead()를 사용하지만 ESP8266에서는 구현되지 않았으며 대신 system_adc_read()를 사용하는 것 같습니다.

h tp : 작은 m/아즈사 9/있어 MS/26 그림 74 그림 4 그림 0d5773 등 9C41

웹 클라이언트



Arduino IDE에서 [파일] - [스케치 예제] - [ESP8266Wifi] - [WebClient]를 읽은 것을 사용했습니다.
ssid와 password는 사용하는 WiFi 환경의 설정을, secretkey에는 IFTTT Maker Channel로 할당된 Secret Key를 등록해 주세요.
광센서로 값을 system_adc_read()로 취득해 val1로 합니다. 그런 다음 위에서 확인한 Channel Maker에서 지정한 URL을 만들고 GET에서 val1을 전달합니다.
/*
 *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
 *
 *  You need to get streamId and privateKey at data.sparkfun.com and paste them
 *  below. Or just customize this script to talk to other HTTP servers.
 *
 */

#include <ESP8266WiFi.h>
extern "C" {
#include "user_interface.h"
}

const char* ssid     = "*****";
const char* password = "*****";

const char* host = "maker.ifttt.com";
const char* event = "ESP-WROOM-02";
const char* secretkey = "*****";
int val1 = 0;
int val2 = 0;
int val3 = 0;

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

int value = 0;

void loop() {
  delay(5000);
  val1 = system_adc_read();
  Serial.println("=======ANALOG:" + String(val1));
  ++value;

  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 URI for the request
  String url = "/trigger/";
  url += event;
  url += "/with/key/";
  url += secretkey;
  url += "?value1=";
  url += String(val1);
  url += "&value2=";
  url += String(val2);
  url += "&value3=";
  url += String(val3);

  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");
  delay(10);

  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
}


회로



중간에 있는 LED 같은 것이 광 센서입니다.
1V로 분압하여 ESP-WROOM-02의 TOUT에 연결합니다.



동작 확인



아래 그림과 같이 5초마다 광센서로 취득한 값이 Twitter에 투고되는 것을 확인할 수 있었습니다.
값의 변화의 정도에 의해, 방에 불이 켜졌다·소등한 것을 판정해, 그 결과를 Trigger에 던지도록(듯이) 하면 실용적으로 되어 온다고 생각합니다.
또, Action도 Twitter 이외에 mail나 chat등도 있으므로, 자신의 목적에 있던 것을 찾아 보는 것은 어떻습니까.



요약



드디어 신경이 쓰인 IFTTT Maker Channel을 시험해 볼 수 있었습니다.
URL을 지정하는 것만으로 Data를 건네주는 것은 쉽고 좋습니다. https를 사용할 수도 있으므로 비즈니스 용도에서도 사용할 수 있을 것 같습니다.
다음은 myThings를 사용해보고 싶습니다.

좋은 웹페이지 즐겨찾기