LINE, メールなどとの連携

IFTTTは様々なサービスを起点として、他のサービスを動作させるための仕組み。
https://ifttt.com/home

IFTTTでこんなことができる!

  • Arduinoのセンサーで値を読み取ったら、LINEやメールで通知
  • Googleアシスタントに話しかけると、ArduinoでLED点灯
  • 地震をArduinoで読み取ったら、Twitterに投稿

Anacondaのインストール

IFTTTを使うには、Arduinoからインターネットにデータを送る必要がある。
ArduinoにイーサネットシールドやWifiモジュールを取り付けるのも手だが、
今回はArduinoとPCをUSBで接続し、PCでPythonを実行してPythonからインターネットにアクセスする。
WindowsでPythonを使うために、Anacondaというツールで環境を構築する。
https://www.javadrive.jp/python/install/index5.html

IFTTTの設定

以下を参照。
以下はLINEにデータを送る場合だが、メールやTwitterでも少し手順を変えるだけで実現できる。
https://chasuke.com/python_ifttt/

Pythonスプリクトの作成

import requests

eventid = "line_event"
key = "" # IFTTTキー
payload = {"value1": "Internet", "value2": "Of", "value3": "Things" }
url = "https://maker.ifttt.com/trigger/" + eventid + "/with/key/" + key
response = requests.post(url, data=payload)

これを実行すると、LINEに通知される。(数秒のタイムラグがある)

Arduinoとの連携

Arduinoとシリアル通信によって連携する。以下を参照。
ArduinoとPythonの連携

応用例: Arduinoで読み取った値をLINEに送る

Arduinoの可変抵抗の電圧を60秒ごとにPythonに送る。
Arduino側のプログラム

int analogInputPin = 5;
/** 初期設定の関数 一度だけ実行される */
void setup() {
  Serial.begin(9600);
}
/** 定期的に実行される関数 頻度はdelay関数で調整 */
void loop(){
  int val = analogRead(analogInputPin);
  Serial.println(val); // PCに結果を送信
  delay(60000);
}

Pythonでは、送られてきたデータをもとにPOSTリクエストを送る。

import requests
import serial
import time

ser = serial.Serial('COM3', 9600) # ここのポート番号を変更
ser.readline()
while True:
  val_arduino = ser.readline()
  val_decoded = int(repr(val_arduino.decode())[1:-5])
  print(val_decoded)

  eventid = "line_event"
  key = "" # IFTTTキー
  payload = {"value1": val_decoded, "value2": "", "value3": "" }
  url = "https://maker.ifttt.com/trigger/" + eventid + "/with/key/" + key
  response = requests.post(url, data=payload)
ser.close()