M5 Atom Lite → メール・LINE通知(IFTTT編)
やること
Atom Liteから Webhookで IFTTT へデータ送信
IFTTT上で IF Webhook THEN メール送信(またはLINE通知)を実装
参考
使うもの
0. IFTTTとは
IFTTTとはアプリやWEBサービスなどを連携させて自動化するツールです。
IFTTTは「If "This" Then "That"(もし "こう" ならば、"あれ"をする。)」の頭文字になっています。このThis(こう)の部分をトリガー、That(あれ)の部分をアクションと呼び、トリガーとアクションを組み合わせてIf文をつくるイメージでアプレットをつくっていきます。
https://gyazo.com/ee392079099e460bcb54e79305e05230
以下では、神奈川工科大学ホームエレクトロニクス開発学科、電気電子情報工学科の有志用にIFTTTのアカウント設定方法と、WEB連携の例を示しておきます。
1. IFTTTでWebhook→メール送信を設定する
1.1 IFTTTのアカウント登録
IFTTT サイトから右上の「Get started」を選択 https://scrapbox.io/files/646b791f0babb5001b886ebe.png
既存のアカウント(Googleなど)またはメールアドレスを用いてアカウントを登録
https://gyazo.com/ff6c26d8258f1c62c5f1d1d819ec9902
1.2 IFTTTでレシピを作成してみる
ここでは、チュートリアルとして、「もし "IFTTTにメールを送る” と、"自分のメールアドレスに内容を転送する"」というアプレットをつくって見ましょう。
1.2.1 アプレットの新規作成
「Create」からアプレットを新規作成する。
https://gyazo.com/8361546e3bf2f0f47810f2e48c2e54b3
1.2.2 トリガーの設定
「If This」の横にある「Add(追加)」からトリガーの選択へ。
https://gyazo.com/e6b800003d2fc04b11ad1d3e79ab0006
①検索ボックスに「mail」と打ち込み、②「Email」を探して選択する。
https://gyazo.com/7dbe832321431e05221904699ee5d63f
トリガーとして「Send IFTTT an email tagged」を選択する。これはIFTTT(trigger@aplet.ifttt.com)が登録されたメールアドレスから特定のタグがタイトルに含まれたメールを受け取ると、トリガーが発火します。本文と添付ファイルを扱うことができます(メールアドレスの登録方法は後で示します)。
https://gyazo.com/29b9943f4106886e3396cea25546e8cc
タグを設定します。(この例では「home」をタグにしました。メールを送るときはタイトルに「#home」を含めるようにします。)
https://gyazo.com/1cacc9fc879ff1228266dd16883e7192
1.2.3 アクションの設定
「Then That」の横にある「Add(追加)」からアクションの選択へ。
https://gyazo.com/153cdb554402348d82d6c64ca52adffc
「Recommended(おすすめ)」の中から「Email」を選択する。
https://gyazo.com/8a19a68fdf36fbb62c0e462b13d6c631
「Send me an email(自分にメールを送る)」を選択する。
https://gyazo.com/6534b5a60b07ca7b52f0650db7bd8e2a
ここではメールの件名(Subject)と本文の内容を設定できます。件名にはIFTTTに送信したメールの件名を、本文にはIFTTTに送信したメールの本文と添付ファイルへのリンクを記載する設定になっています。設定を確認したら「Create action」へ進む。
https://gyazo.com/0baea98a5893f34e9c14071e45c352ed
以上でトリガーとアクションを設定できました。「Continue」に進んで設定終了です。
https://gyazo.com/eed68ddafcc013dc8789d6a5ad0ec978
1.2.4 自分のメールアドレスを登録する
トリガーで使うメールアドレスを設定します。
画面右上の丸アイコンをクリックし、「My service」を選択します。
https://gyazo.com/a59db0b73bf92e30b5d770f2f8bdb802
「Email」を選択します。
https://gyazo.com/fc352d150888c5614d1da5f3e38135c7
「Settings」を選択します。
https://gyazo.com/5881a3ecfece677607e02ed0ef64fa68
メールアドレスを登録します。認証メールが届くので認証してください。
https://gyazo.com/f316f23a9149c5c686f3465cd62bdb77
1.2.5 アプレットを使ってみる
以上で設定は完了しました。それでは実際にアプレットを使ってみてください。
ここでは、「trigger@applet.ifttt.com」に設定したタグ(この例では「#home」)をタイトルに入れてメールを送ります。
https://gyazo.com/811cb476675c3e3141ec271c9738bf9c
しばらくして、登録したメールアドレスアドレスにメールが届けば問題なく動作しています。無料版でも1分かからないでメールが届きました。
https://gyazo.com/a4f6f365097551484a1b560e5f3d1632
1.3 M5 Atom側でWebhookを作成
以下では、マイコンとIFTTTの連携方法について説明します。ここではトリガーにWebhookを用います。Webhookとは、特定のイベントが発生した際に定められたURLに対してHTTPリクエストを送るしくみです。下記に「M5 Atomのボタンが押されたら3つの変数を送る」M5 Atom用のコードを載せておきます。
1.2で示したメール連携と、1.3で示すWebhook、マイコン、LINE連携を組み合わせれば、たいていのことはできます。
※書き込むときにはボードをM5 StickVに指定する?
code:AtomLiteMail.ino
const char* ssid = "KAIT-WIFI"; //WifiのSSID ※要書き換え
const char* password = "************"; //Wifiのpass ※要書き換え
String makerEvent = "test1"; // IFTTT上のイベント名 ※要書き換え
String makerKey = "************"; // IFTTT上Webhooksキー ※要書き換え
const char* server = "maker.ifttt.com"; // サーバURL
WiFiClient client;
bool checkWifiConnected() {
// attempt to connect to Wifi network:
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
// wait 1 second for re-trying
delay(1000);
}
Serial.print("Connected to ");
Serial.println(ssid);
return true;
}
void send(String value1, String value2, String value3) {
while (!checkWifiConnected()) {
Serial.print("Attempting to connect to WiFi");
WiFi.begin(ssid, password);
}
Serial.println("\nStarting connection to server...");
if (!client.connect(server, 80)) {
Serial.println("Connection failed!");
} else {
Serial.println("Connected to server!");
// Make a HTTP request:
String url = "/trigger/" + makerEvent + "/with/key/" + makerKey;
url += "?value1=" + value1 + "&value2=" + value2 + "&value3=" + value3;
client.println("GET " + url + " HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
Serial.print("Waiting for response "); //WiFiClientSecure uses a non blocking implementation
int count = 0;
while (!client.available()) {
delay(50); //
Serial.print(".");
}
// if there are incoming bytes available
// from the server, read them and print them:
while (client.available()) {
char c = client.read();
Serial.write(c);
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting from server.");
client.stop();
}
}
}
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(115200);
delay(100);
WiFi.begin(ssid, password);
while (!checkWifiConnected()) {
WiFi.begin(ssid, password);
}
}
void loop() {
M5.update();
if (M5.Btn.wasReleased()) {
send("Mail","test1","test2"); //送信する変数 Value1,Value2,Value3
}
delay(20);
}
https://gyazo.com/71c7de59f100448c29cdb7f29fbd171b