M5stack × Line

M5stackが手に入ったので早速使ってみました。 Arduinoと違ってWiFiに接続できることができる。それを活かしてLineに通知が行くような仕組みを作った。 その方法としてIFTTT(イフト)というサービスを使った。これは異なるソーシャルメディアを連携させることが出来るサービスです。 今回はLineと接続したがTwitterやInstagram、YouTubeとも接続できる。

コードはこちら

  1. #include <M5Stack.h>
  2. #include <WiFi.h>
  3. #include <WiFiClient.h>
  4.  
  5. const char* ssid = "WiFiのSSID";
  6. const char* password = "WiFiのパスワード";
  7.  
  8. String makerEvent = "push_line"; // Maker Webhooks
  9. String makerKey = "IFTTTと接続したときに表示されるパスワード"; // Maker Webhooks
  10.  
  11. const char* server = "maker.ifttt.com"; // Server URL
  12. WiFiClient client;
  13.  
  14. bool checkWifiConnected() {
  15.   // attempt to connect to Wifi network:
  16.   while (WiFi.status() != WL_CONNECTED) {
  17.     Serial.print(".");
  18.     // wait 1 second for re-trying
  19.     delay(1000);
  20.   }
  21.  
  22.   Serial.print("Connected to ");
  23.   Serial.println(ssid);
  24.   return true;
  25. }
  26.  
  27. void send(String value1, String value2, String value3) {
  28.   while (!checkWifiConnected()) {
  29.     Serial.print("Attempting to connect to WiFi");
  30.     WiFi.begin(ssid, password);
  31.   }
  32.  
  33.   Serial.println("\nStarting connection to server...");
  34.   if (!client.connect(server, 80)) {
  35.     Serial.println("Connection failed!");
  36.   } else {
  37.     Serial.println("Connected to server!");
  38.     // Make a HTTP request:
  39.     String url = "/trigger/" + makerEvent + "/with/key/" + makerKey;
  40.     url += "?value1=" + value1 + "&value2=" + value2 + "&value3=" + value3;
  41.     client.println("GET " + url + " HTTP/1.1");
  42.     client.print("Host: ");
  43.     client.println(server);
  44.     client.println("Connection: close");
  45.     client.println();
  46.     Serial.print("Waiting for response "); //WiFiClientSecure uses a non blocking implementation
  47.  
  48.     int count = 0;
  49.     while (!client.available()) {
  50.       delay(50); //
  51.       Serial.print(".");
  52.     }
  53.     // if there are incoming bytes available
  54.     // from the server, read them and print them:
  55.     while (client.available()) {
  56.       char c = client.read();
  57.       Serial.write(c);
  58.     }
  59.  
  60.     // if the server's disconnected, stop the client:
  61.     if (!client.connected()) {
  62.       Serial.println();
  63.       Serial.println("disconnecting from server.");
  64.       client.stop();
  65.     }
  66.   }
  67. }
  68.  
  69. void setup() {
  70.   //Initialize serial and wait for port to open:
  71.   Serial.begin(115200);
  72.   delay(100);
  73.  
  74.    WiFi.begin(ssid, password);
  75.   while (!checkWifiConnected()) {
  76.     WiFi.begin(ssid, password);
  77.   }
  78. }
  79.  
  80. void loop() {
  81.   M5.update();
  82.   if (M5.BtnA.wasReleased()) {
  83.    send("LINE","test1","test2"); //任意の文字列3つ
  84.    M5.Lcd.println("send");
  85.   }
  86.   delay(20);
  87. }

M5stackのボタンを押すと下のような通知が行きます。

これでボタンを押すことでLineに通知が行くようになった。 今後、水耕栽培と連携させる案としては指定した範囲外の水温になった場合に水を取り換える通知を送る、気温を知らせるなどを考えた。

参考にしたサイト