M5StackからLINEでデータを送信

自動水やり・環境計測装置~センサ動作修正+Line連携テスト編~ でLINEの送信を行いましたが、解説不足だったので補足します。

こちらのサイトを参考にしています。

 

◆IFTTTの設定

 手順

IFTTTにアクセス。SignInする。

・My Appletsをクリック→New Appletをクリック。

・[+]this をクリック。

・Choose a serviceの画面で「webhook」で検索し、出てきたWebhooksをクリック。

・Receive a web request をクリックし、Event Name に好きな名前を付けCreate triggerをクリック。

 私は「Plus_Watering」にしました。

・Recipient を「1:1でLINE Notifyから~」に設定。(ライングループに通知が欲しい場合はそのライングループに設定)

・Message にセンサーに適した表示になるように入力してCreate Actionをクリック。

(例)
{{EventName}}<br>
{{OccurredAt}}<br>
温度:{{Value1}}<br>
湿度:{{Value2}}<br>
土壌/実行:{{Value3}}

・My Applets に作成したWebhooksが表示されているのでクリックし、更にWebhooksをクリック。Webhooksの画面になるので、右上のDocumentationをクリック。

・keyが表示されるのでメモする。

 ちなみに、このページで

https://maker.ifttt.com/trigger/□/with/key/~~~

の□内にEventName、

{ "value1" : "  ", "value2" : "  ", "value3" : "  " }

の中に適当な値を入れて[Test it]をクリックすると、Lineへの送信テストが可能。

 また、

  https://maker.ifttt.com/trigger/{event}/with/key/{key}?value1={value1}&value2={value2 }&value3={value3} 

の{event}内にEventName、{key}に先ほどのメモしたkeyを入力し、{value1~3}に適当な値を入力してブラウザなどでアクセスすることでもテスト可能。

 

◆プログラム

・ArduinoIDEを使用しました。

・プログラムはこちらに置いてあります。

重要なのは赤字の箇所です。

      1. Wifiに接続
      2. サーバーに接続
      3. line送信のためのURLを作成、サーバーに送信
      4. value1,value2,value3の値(今回はsend()の引数である“test1″,”test2″,”test3”)がlineで送られる
#include <M5Stack.h>
#include "config.h"
#include <WiFi.h>
#include <WiFiClient.h>

//Line
const char* server = "maker.ifttt.com"; // Server URL 
WiFiClient client;
const int outputLed = 18; //エラーの場合はIO18がHIGHになる LEDとかつけるとわかりやすい


void errorBlink() { 
for (int i = 0; i < 10; i++) {
digitalWrite(outputLed, HIGH);
delay(300);
digitalWrite(outputLed, LOW);
delay(300);
}
}

void wifiBegin() { //wifiに接続を試みます
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
}

bool checkWifiConnected() { //wifiに繋がっているか確認
int count = 0;
while (WiFi.status() != WL_CONNECTED) { //繋がるまで
Serial.print(".");
//1秒待ってリトライ
delay(1000);
count++;
if (count > 15) { //15s待ってもダメならエラー
Serial.println("(wifiConnect) failed!");
errorBlink();
return false;
}
}
Serial.print("Connected to");
Serial.println(ssid);
return true;
}

void send(String value1, String value2, String value3) { //Line送信
while (!checkWifiConnected()) { //wifiに繋がっていることが分かるまで接続を試みる
wifiBegin();
}

Serial.println("\nStarting connection to server..."); 
if (!client.connect(server, 80)) { //サーバーに接続
Serial.println("Connection failed!");
} else {
Serial.println("Connected to server!");
// line送信のためのURLを作成、サーバーに送信
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 "); 

int count = 0;
while (!client.available()) {
delay(50); //
Serial.print(".");

count++;
if (count > 20 * 20) { // about 20s
Serial.println("(send) failed!");
errorBlink();
return;
}
}
// サーバーから利用できる返信がある場合、それを読んでprintする
while (client.available()) {
char c = client.read();
Serial.write(c);
}

// 切断
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting from server.");
client.stop();
}
}
}


//========================================================================
void setup() {
M5.begin();
Serial.begin(115200);
delay(100);
wifiBegin(); //wifi
while (!checkWifiConnected()) {
wifiBegin();
}
}


void loop() { //30秒ごとにlineを送信する

send("test1","test2","test3");

delay(30000);

}

 

これでIoTっぽいことが色々できますね。

ものづくりが捗ります(笑)

1件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です