Edited at

通知が飛ぶIoTボタンを作ってみた

More than 1 year has passed since last update.


背景

わずか300円でIoTボタンを作る方法のビッグウェーブに乗るしかない。

ということで、ダイソーに行って買ってきました。


ざっくりとしたフロー


  1. Raspberry Piに接続されたボタンが押される

  2. Pythonのスクリプトが発火

  3. ちゃんと押されたか不安なので、音を流す

  4. 押された日時をデータベースに記録

  5. LINE NotifyのAPIにリクエストを送る

  6. 手元のスマホに通知がくる


準備するもの(必要なライブラリ等)


LINE NotifyのAPIにリクエストを送るためにrequestsを導入

pip install requests


LINE Notifyのトークンを取得

コマンドラインから LINE にメッセージを送れる LINE Notify


LINE Notifyのトークンを環境変数に設定

export LINE_NOTIFY_TOKEN="YOUR_TOKEN"


Raspberry piで音声ファイル(mp3)を再生するためにpygameを導入

入ってなかったら入れる。

sudo apt install python-pygame


3.5mmのオーディオジャックから音を出す設定

オーディオ設定 Raspberry Pi 公式ドキュメントを日本語訳


ソースコード

githubにおいてあります

import sqlite3

import os
import requests
import pygame.mixer
import time
from datetime import datetime as dt

# now
now = dt.now()
nowdatetime = now.strftime('%Y-%m-%d %H:%M:%S')

# sound
# It is necessary to change the frequency according to the frequency of the audio file.
pygame.mixer.init(frequency = 48000)
# Path to sound file.
pygame.mixer.music.load(os.path.abspath(os.path.dirname(__file__))+"/hoge.mp3")
# Count of play the sound file..
pygame.mixer.music.play(1)
# Time to play.
time.sleep(3)
pygame.mixer.music.stop()

# db
con = sqlite3.connect(os.path.abspath(os.path.dirname(__file__))+"/report.db")
c = con.cursor()
c.execute("insert into report values (?)",(nowdatetime,))
con.commit()
con.close()

# LINE Notify
endpoint = 'https://notify-api.line.me/api/notify'
token = os.getenv('LINE_NOTIFY_TOKEN')
headers = {"Authorization" : "Bearer "+ token}

message = nowdatetime
payload = {"message" : message}
r = requests.post(endpoint ,headers = headers ,params=payload)


動いている様子

ちょうどいいスピーカーがなかったので、ギターアンプにRaspberry Piを接続

UNADJUSTEDNONRAW_thumb_13d8.jpg

どっちが本体か分からない……









音声ファイルはニコニ・コモンズからお借りしました。

ATOS (JR東日本) - ニコニ・コモンズ