5-1.人を検知してリモコン制御とメール送信 (IFTTT)

2019年6月25日

概要

2-4.人感センサや2-5,2-6.リモコン送受信は学習してきましたので、今回は新たにクラウドを利用してメール通知を行うことを学習していきます。
クラウドは無料で利用可能なIFTTTを利用します。IFTTTとは、異なるソーシャルメディアやプラットフォーム、サービスを連携させるWebサービスです。また、「If This Then That」の頭文字の略称となり、日本語にすると「もしこれをしたらあれをして」という感じで、「this(これ)」をトリガーに「that(あれ)」のアクションを行うというサービスになります。
IFTTTを利用した構成イメージを以下に示します。

クラウド(IFTTT)利用設定

IFTTTには以下からアクセスできます。IFTTTにはGoogleやAmazonだけでなく、TwitterやMicrosoftなど多くのサービスが利用可能となっています。また、利用も完全無料になっていますが、基本的に全て英語となります。

「IFTTT」 https://ifttt.com

IFTTTを利用したメール送信の利用方法について、まずIFTTTの設定から説明します。
(スマホアプリもありますが、PC版での利用方法を説明していきます。)

(1)IFTTTサイトにアクセスして「Sign Up」をクリックしています。

(2)Google/Facebookアカウントを利用してログインができます。また、それ以外のアカウントを利用も可能で、Or use your password to sign upの「Sign Up」をクリックして、メールアドレスとパスワードを入力してアカウントを作成しログインします。

(3)ログイン後、左上の「MyApplets」をクリックし、次画面右上の「New Applet」をクリックします。

(4)トリガーの「This」を選択し、検索窓に「web」と入力し「Webhooks」をクリックします。

(5)「Receive a web request」アイコンをクリックし、次画面のEvant Nameは任意の名前で良いのですが、今回は「iotMail」と入力し「Create trigger」をクリックします。

(6)アクションの「That」を選択し、検索窓に「email」と入力し「Email」をクリックします。

(7)「Send me an email」アイコンを選択し、既にSubjectなども全て入力されていますので、そのまま「Create action」をクリックします。
(必要に応じてSubjectやBody内容は変更してもらっても問題ありません)

(8)「Finish」をクリックして、Appletの作成が完了です。

以上でIFTTTアプレットの作成が完了です。
今作成したIFTTTアプレットのWebhooksで設定したURLにIoT端末からアクセスすることでメールを送信できます。
WebhooksのアクセスするURLは以下の方法で確認します。
「MyApplet」から「Service」タブを選択し、検索窓に「web」と入力し「Webhooks」をクリックします。

右上の「Documentation」をクリックし以下の画面を表示し、アクセスするURLを確認し、IoT端末のスケッチにプログラムしていきます。

上記の内容をスケッチに書き込み、HTTPアクセスを実現します。スケッチの記載方法は以下を参照ください。

電気回路と電子工作

人を感知してリモコン制御とメール通知を行う電子工作は今まで学習した人感センサとリモコン送信を行う回路を組み合わせた下図となります。


【ESP32-DevKitCの入出力端子はこちらを参照下さい】

スケッチ(制御ソフトウェア)

人を感知した時にリモコン制御とメール送信を行うスケッチを以下に示します。

スケッチは今までの人感センサに関するプログラムとリモコン送信に関するプログラムを合わせて、さらにメール送信に関するプログラムが追加されています。
今回、追加した部分を主に説明していきます。
今まで同様にネットワーク環境に応じて、SSIDやパスワード、IPアドレス、サブネット、DNSを変更して下さい。また、送信するリモコン信号も変更する必要があります。

最初に取得したIFTTTのWebhooksのKeyを⑤でIFTTTのトリガーに関する設定「##### IFTTT-KEY #####」の部分に変更して設定して下さい。IFTTT Event名はIFTTTのWebhooksとスケッチで合わせる必要があり今回「iotMail」と設定していますが、利用用途に応じて任意の名称をつけても問題ありません。この設定値はWebhooksのリクエストURLを作成するためのパラメータとして利用されます。
また、HTTPSで利用する証明書についてifttt_ca_certで設定しています。本変数は⑫setCACertで設定しています。設定する証明書の取得方法は下に記載した【証明書の取得方法】を参照して下さい。

loop関数内では1秒毎に人感センサの検出を行なっています。⑭で状態を検知していますが、motionCheckがtrueの場合のみ人感センサを検出しています。
人感センサが1秒毎に検知し何度もメールを送信してしまうため、変数motionCheckで状態が変化するまではセンサを検出しないようにしています。
人感センサが検出すると、irSend関数でリモコン制御を行い、メール送信に関しては㉛iftttMail関数で実施しています。
IFTTTで設定したAppletのWebhooksのリクエストURLにアクセスすることでメール送信を行います。そのため、㉜でリクエストURLと送信データを設定しています。
㉞にHTTPS接続を行い失敗時は㉟でシリアルモニタに表示します。成功時は㊱で「Connected to ifttt!」と表示し㊲で一行毎にデータ送信を行っています。
㊳HTTPS通信の接続確認を行い㊴で受信データのヘッダ部分の表示を行います。㊵ではデータ部分の表示を行っています。
通信が完了したら㊶でHTTPS終了処理を行い㊷でLEDを点灯、シリアルモニタに「ifttt end」を表示し動作を判別できるようにしています。
実行時に表示されるシリアルモニタは、人感センサが感知した時に「Detected!」と表示されIFTTTアクセスの内容が下図のように表示されれば動作が正常に完了しています。

証明書の取得方法

証明書は以下のコマンドを各端末で実行することで取得できます。

openssl s_client -showcerts -connect maker.ifttt.com:443

Mac,Linux端末はターミナルで上記コマンドを入力することで取得できますが、Windows端末ではopensslコマンドが使えるソフトを”https://slproweb.com/products/Win32OpenSSL.html”からインストールし利用する必要があります。
(Webブラウザから証明書をダウンロードできますのでそちらでも問題ありませんが、バージョンにより操作が異なるためコマンドでの取得方法を紹介しています。)