2017年11月20日 更新

RaspberryPiで物理ボタン押したらメール送信

どうも、クラゲです。 今回はIFTTT(イフト)を使って、簡単にメール送信したいと思います。 ラズパイに接続されたボタンを押すとメールが即座に送信されます。

ボタンではなく何かのセンサーにしたり、センシングしたデータを定期的にメール送信するなど、様々な応用も可能です。

【 大まかな流れ 】

  • IFTTTの登録
  • IFTTTのメール設定
  • プログラム実行でメール送信
  • 物理ボタンが押されたらメール送信
  • メールの送信内容フォーマット変更

IFTTTの登録

IFTTT(イフト)とは、スマホのアプリやインターネット上のサービスを連携させて、自動化するサービスです。 IFTTT は If This Then Thatのそれぞれの頭文字を意味します。例えば、「もし、明日の天気が、雨ならば、ツイッターでつぶやく」などのサービスをプログラムを書くことなく簡単に自動化できます。 このサービスとラズパイを組み合わせることにより、ボタン1発でメール送信するサービスが簡単に作成できます。 では、早速 IFTTT で Sign up しましょう!

以下のURLへアクセスします https://ifttt.com/login

中央下の小さな"Sign up"ボタンをクリック

メールアドレスとパスワードを入力して"Sign up"をクリックします

こんな感じで右上にメールアドレスが表示されると思います。 これで登録完了です。簡単!

IFTTTのメール設定

RaspberryPiからいきなりIFTTTの"Mail"送信アクションには繋がりません。アクションを起こすにはトリガーが必要です つまり、RaspberryPi送信 -> IFTTTトリガー -> IFTTTアクション の順です。 なお、RaspberryPiと接続できるIFTTTのトリガーは"Webhooks"というサービスのみです。ちなみに、2017年5月以前までは"Maker Channel"というサービス名でした。 詳細には RaspberryPI送信 -> IFTTTにてWebhooks受信 -> IFTTTからMail送信 という流れになります。

トリガーのkeyを入手

Serchボタンを押して、検索バーで "webhook" と入力します。 そうすると"Webhooks"というサービスが現れると思います。 "Webhooks"をクリックします

Connectをクリックします

Documentationをクリックすると新たなタブが開きます

このときに表示されている太字がKeyです。後でPythonのプログラムで使います。

トリガーのEvent Nameを設定

先ほどのタブに戻って、この度は "My Applets" をクリックします。

右上の "New Applet" をクリックします

"this"をクリックします

検索バーに"web"と入力すると"Webhooks"が現れます これをクリック

"Receive a web request"をクリック

Event Nameは自由に決めて構いません。 入力したら"Create trigger"ボタンをクリック 今回イベント名は"email"にしました。後でPythonプログラムで使います。

アクションを設定

今度は"that"をクリックします

検索バーで "email" と入力します。 そうするとEmailというサービスが現れると思います Emailをクリックします

"Send me an email"をクリックします

ここでは題名やメール本文のフォーマットを編集することができます。 後でも変更可能なので、とりあえずそのまま"Create action"をクリック

"Finish"をクリックして完成です。 これで、Webhooksがemailという名前のイベントを受け取ったときに、自分のメールアドレスにメールを送信するというサービスが出来ました。その際、変数value1に文字列を割り当てることにより、その文字列がメール本文に書かれます。

プログラム実行でメール送信

IFTTTのWebhooksにイベントを通知するPythonプログラムを書きます。 Requestsモジュールを使ってとても簡単に記述できます。 例えば "mail.py"というファイル名でnanoエディタを使って新規作成します。

nano mail.py

keyの * の部分はWebhooksサービスで得たkeyに書き換えてください。。 なお、Event Nameを "email" 以外にしている場合は、eventに代入している文字列も変更してください。 メール本文に書く文章として string に文字列を代入しています。ここは各自お好みで変えてください。

#!/usr/bin/python
# coding:utf-8
import requests

#IFTTT設定と送信する文字列
event  = "email"
key    = "*******************************************"
string = "RaspberryPiからこんにちは!"

try:
    print("Try...")

    #IFTTT経由でメール送信
    payload = {"value1" : string }
    url = "https://maker.ifttt.com/trigger/" + event +"/with/key/" + key
    requests.post(url, json = payload)

    print("Done!")

except:
    print("Error")

nanoを保存(Ctrl + O, Enter)して終了(Ctrl + X)してpythonを実行します。

python mail.py

数秒くらいでメールが届くと思います。

メールの題名とか本文のフォーマットを変えたい人はこのページの最後の項を参照してください。

物理ボタンが押されたらメール送信

先ほどのままだとコマンド打ち込みが必要ですが、物理的なボタンを押したらメール送信されるようにします。 簡単な回路とGPIO制御が必要となりますが、詳細解説はこちらの記事を参照してください。 ここでは作り方だけ紹介します。

部品

  • ブレッドボード x 1個
  • タクトスイッチ x 1個
  • オスーメスジャンパー x 2本

回路

左下から3番目のGroundと6番目のピン(18pin)にジャンパー線を繋ぎます。 タクトスイッチは向きがあるので注意してください。

プログラム

Pythonで作成しています。 先ほどと同じ手順でkey変更など行ってください。

#!/usr/bin/python
# coding:utf-8
import time
import requests

#IFTTT設定と送信する文字列
event  = "email"
key    = "*******************************************"
string = "ボタン押されました!!"

#GPIOの初期設定
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)

#GPIO18pin:入力モード、pull up設定
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)

while True:
    print("スイッチを押すとメール送信します")

    #立下りエッジを検出するまで待つ
    GPIO.wait_for_edge(18, GPIO.FALLING)

    try:
        print("Try...")

        #IFTTT経由でメール送信
        payload = {"value1" : string }
        url = "https://maker.ifttt.com/trigger/" + event +"/with/key/" + key
        requests.post(url, json = payload)

        print("Done!")

    except:
        print("Error")

    #チャタリング対策
    time.sleep(0.3)

これで実行すると、ボタンを押す度にメール送信されるようになりました。 無限ループなので、終了するときは Ctrl + Z で中断してください。

メールの送信内容フォーマット変更

現状のままだと、メールの題名が以下の文章で

The event named "email" occurred on the Maker Webhooks service

メール本文が以下のような内容になっています。

What: email When: November 20, 2017 at 09:42PM Extra Data: ボタン押されました!!, , ,

これはIFTTTのWebページで簡単に変更できます。

"My Applet"をクリックします

作成したサービスをクリック

右上の歯車アイコンをっクリック

ここの内容を変更することでフォーマットを変更できます。

シンプルに変更してみました

結果はこんな感じ。すっきりしました! PythonのPayLoad変数にJSON形式で変数を増やせば、題名にも変数を使うことが可能です。 色々試してみてください!

以上、RaspberryPiで物理ボタン押したらメール送信でした!