Arduino勉強会

2015/11/01からのアクセス回数 5728

IFTTTについて

Makerが提供するIFTTT(イフトと発音するらしい)サービスを使うと ESP-WROOM-02モジュールからのデータを簡単にサーバに送り、 様々な処理を施すことができます。

詳しくは、スイッチサイエンスさんの IFTTTにMaker Channelができました を参照してください。

MakerのIFTTTに登録するとユーザIDにシークレットKEYが割り当てられます。 このKEYとイベントでIFTTTに情報を送ります。

iPhoneアプリIF by IFTTT

iPhoneでMakerのIFTTTで作ったイベントを受け取るには、iPhoneアプリIF by IFTTTをインストールします。 詳しくは以下を参照してください。

Maker Channel画面

登録が終わり、http://ifttt.com/makerに行くと以下の様な画面になります。 Reconnect Channelを押すとKeyが再割り当てされますので、注意しましょう。

th_Maker_Channel.png

トリガーイベントの作成

新しくイベントを作るには、Receive a web requestをクリックし、 Receive a web requestの「Create a new Recipe」ボタンを押すとレシピの作成画面に移動します。

CreateRecipe1.png

「this」をクリックし、Search ChannelsでMakerと入力し、 Makerのアイコンを選択します。

CreateRecipe2.png

Choose a Trigger画面が表示され、Receive a web requestをクリックします。

以下の様なComplete Trigger Fields画面になりますので、ここでEvent Name を入力します。ここではLM35と入力しました。

CreateRecipe4.png

以下の画面でthatを選択します。

CreateRecipe5.png

Choose Action Channelが表示されるので、iPhoneと入力し、iPhoneのIF Notificationを選択します。

CreateRecipe6.png

Choose an Action画面がでるので、Send a notificationをクリックします。

Complete Action Fields画面がでるので、Notificationに出すメッセージを入力します。 以下の様にキーワードを{{ }}で括って入力し、Create Actionボタンを押します。

#pre{{
温度センサLM35からイベント{{EventName}}と値{{Value1}}を受け取りました。 }}

CreateRecipe8.png

以下の最終確認でますので、Create Recipeボタンをクリックします。

CreateRecipe9.png

レシピの確認

MakerのIFTTTで作ったイベントは、普通のHTTPプロトコルで送ることができるので、 ブラウザーからイベントのテストができます。

先ほど作ったLM35レシピを確認してみましょう。

ここではシークレットキーをSECRET_KEYで説明しますので、適宜置き替えてください。

  • イベント名: LM35
  • KEY: SECRET_KEY

ブラウザーから以下の様に入力します。

http://maker.ifttt.com/trigger/LM35/with/key/SECRET_KEY?value1=21.0

iPhoneに以下の様なNotificationが表示されます。

LM35_Notification.png

IFTTTの受け付けるHTTP GET要求

MakerのIFTTTサーバは、Arduino勉強会/0N-WiFiモジュールその1で試したようなGET要求だけではエラーになることが分かりました。

調べたところ、以下の様にHTTPヘッダにHostとAcceptを追加すると上手くいきました。 *1

$ telnet 54.235.148.87 80
GET /trigger/test/with/key/SECRET_KEY HTTP/1.1
Host: maker.ifttt.com
Accept: */*

ArduinoからLM35イベントを送る

スイッチサイエンスからESP-WROOM-02ピッチ変換済みモジュール《シンプル版》 が届いたので、 これを使って温度センサLM35から取得した温度をIFTTTイベントとして送ってみます。

ESP_LM35_brd.png

ピッチ変換モジュールのハンダ付け

ESP-WROOM-02をピッチ変換モジュールにハンダ付けします。 裏面のジャンパーは、SJ1とSJ2をハンダでショートします。

esp_1line5a.png

ブレッドボードの組み立て

ブレッドボードにESP-WROOM-02とArduino Pro Mini(3.3V)とLM35を以下の様に配置します。 抵抗は10KΩを使いました。

brd.png

スケッチ

Arduino勉強会/0O-WiFiモジュールその2で作ったEspClientのatCipSendを 以下の様に修正し、シリアルもSoftwareシリアルでESP-WROOM-02で接続することに しました。この結果シリアルモニタの出力は文字化けしますが、この方が開発が簡単になります。

int  EspClient::atCipSend(char *uri, char *host) {
  sprintf(buf, "GET %s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\n%s", uri, host, CRLF2);
  int len = strlen(buf);
  char tmp[32];
  sprintf(tmp, "AT+CIPSEND=%d%s", len, CRLF);
  // uriを送る
  atCommand(tmp, 1000);
  esp.print(buf);
  // 応答を待つ
  waitForResponse();
}

LM35の温度を送るテスト用スケッチは、以下の通りです。

#include "EspClient.h"
#include <SoftwareSerial.h>

#define ST_SSID       "take-iPhone5s"
#define ST_PASSWD     "jpb67k42hgq5z"

#define SERVER_ADDR   "54.235.148.87"  // maker.ifttt.comのIPアドレス
#define SERVER_PORT   80

#define EVENT         "LM35"
#define SECRET_KEY    "ここにSECRET_KEYを入れてください"

int sw_pin = 10;
int sTx_pin = 12;
int sRx_pin = 11;
int lm35_pin = A0;
int lm35_value;

char  buf[128];
EspClient  esp(sRx_pin, sTx_pin);

void setup() {
  pinMode(sw_pin, INPUT);
  esp.begin(9600);
  esp.println("ESP8266IF3tTest");
  esp.atCwMode(STATION_MODE);
  esp.atCwJap(ST_SSID, ST_PASSWD);
}

void loop() {
  if (digitalRead(sw_pin) == LOW) {
    esp.println("SW pressed");
    // チャタリング防止
    delay(500);
    lm35_value = analogRead(lm35_pin);  // LM35から値を読み取る
    int temp10 = (int)((lm35_value*3.3)/1023.0*1000);  // 温度を0.1度までの整数に変換
    sprintf(buf, "temp=%d.%df", temp10/10, temp10%10);
    esp.println(buf);    
    esp.atCipStart(SERVER_ADDR, SERVER_PORT);
    sprintf(buf, "/trigger/%s/with/key/%s?value1=%d.%d", EVENT, SECRET_KEY, temp10/10, temp10%10);
    esp.atCipSend(buf, "maker.ifttt.com");      
  }
}

動作確認

起動後に、ボタンを押してイベントをIFTTTサーバに送ります。 シリアルモニタは以下の様に文字化けしますが、イベントはきちんと送られています。

ESP8266IF3tTest
AT+CWMODE=1

OK
AT+CWJAP="take-iPhone5s","jpb67k42hgq5z"

WIFI DISCONNECT
WIFDo wait onece
WIFI GOT IP

OK
SW pressed
temp=25.4f
AT+CIPSTART="TCP","54.235.148.87",80CONNECT

OK
AT+CIPSEND=112

busy p...

OK
> GE@½ÑÉ¥½cªz½[½¹©Q]©Íå¥aY©-Ùµ±ý±
±ÕÅëªr¢BBEõ(rjõkÑéj
ɹKÑÑѹ½µ5
ÁÑéRzRjÔÔ¨HHTÖ,¤¦L&H¬_]Y®Cá
SEND OK

IFTTT_Result.png

スケッチのダウンロード

スケッチを以下からダウンロードできます。

温度を記録する

つぎにGoogleのスプレッドシートに温度とイベントが発生時刻を記録してみましょう。

IFTTTの定義

以下の様にActionでspreadsheetに行を追加するRecordLM35イベントを作成します。

th_RecordLM35_Action.png

ブラウザーでテスト

以下のURLをブラウザー入力します。

http://maker.ifttt.com/trigger/RecordLM35/with/key/<<ここにSECRET_KEYを入れる>>?value1=18.0

Googleドライブにアクセスすると、IFTTT/Maker/RecordLM35のディレクトリが作られ、

IFTTT_MakerRecordLM35スプレッドシートに以下のような記録が作成されます。

IFTTT_MakerRecordLM35.png

コメント

選択肢 投票
おもしろかった 1  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。


(Input image string)


*1 以下はtestイベントで確認

添付ファイル: fileth_RecordLM35_Action.png 1085件 [詳細] fileIFTTT_MakerRecordLM35.png 1033件 [詳細] fileesp_1line5a.png 1032件 [詳細] fileth_Maker_Channel.png 969件 [詳細] fileLM35_Notification.png 1067件 [詳細] fileIFTTT_Result.png 1058件 [詳細] fileEspIFTClient.zip 831件 [詳細] fileESP_LM35_brd.png 1000件 [詳細] fileCreateRecipe9.png 1059件 [詳細] fileCreateRecipe8.png 1047件 [詳細] fileCreateRecipe7.png 527件 [詳細] fileCreateRecipe6.png 1043件 [詳細] fileCreateRecipe5.png 944件 [詳細] fileCreateRecipe4.png 1048件 [詳細] fileCreateRecipe3.png 511件 [詳細] fileCreateRecipe2.png 1017件 [詳細] fileCreateRecipe1.png 981件 [詳細] filebrd.png 1084件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-28 (日) 18:56:52 (2980d)
SmartDoc