#はじめに
この記事は全4章からなる記事の第3章です。
- IoTを駆使してお年寄りの家を見守る「だけじゃない」システムを作った【SORACOM Summer Challenge 2020】
- LTE-M Buttonが押されたらLINE BotへPushメッセージを送る【SORACOM】
- 【Raspberry Pi】人感センサーが感知したらtimestampをFirebase Realtime Databaseに格納する 今ココ
- SORACOMと家電とLINE Botを連携させる【Python / Flask / Raspberry Pi】 全ソース公開
きっかけ
人感センサーが反応した時刻や1時間以内に反応した回数をLINE Botに通知したい。ローカルでSQLを動かしてもいいが、人感センサーを取り付けたラズパイとLINE Botのサーバとして使っているラズパイが別々なのでクラウドデータベースに格納したほうが楽なのではないかと思い、定番のFirebaseを使用。
ラズパイと人感センサーを繋ぐ
使ったもの
- Raspberry Pi 3 Model A+(これより上位のものならOK)
- 人感センサーモジュール
- ジャンパーワイヤー(メス-メス)
人感センサーはこちらのメーカのものを使いました。
接続
【Raspberry Pi】自作人感センサーの使い方と活用法をそのまま使わせてもらいました。
GPIOの接続間違いには気を付けてください(私は12番ピンとGroundを間違えて動かないというミスをしでかしました)。
#Firebase
[python] Firebase Realtime Databaseのはじめ方を参考しさせていただきました。
パッケージのインストール
以下のコマンドでラズパイにfirebase-adminをインストールします
$ pip install firebase-admin
Databaseの作成とルールの変更
FirebaseのコンソールからDatabaseを作成します。Cloud Firestore
とRealtime Database
がありますが、今回は**Realtime Database
**なので注意してください。
ルールを以下のように変更します。
※ テスト用ですので実際に運用する場合は適切なルール設定をしてください
また、「プロジェクトの概要」の右側にある歯車からプロジェクトを設定 > サービスアカウント > Firebase Admin SDK
に移動し、Python
を選択してコピー、また新しい秘密鍵の生成
をクリックして、ダウンロードした秘密鍵をラズパイに保存します。
###人感センサーとDatabaseの連携
以下がコードです
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
from datetime import datetime
import time
import RPi.GPIO as GPIO
cred = credentials.Certificate("<ダウンロードした秘密鍵>.json")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://<databaseURL>.firebaseio.com/'
})
ref = db.reference('data')
INTERVAL = 3
SLEEPTIME = 20
GPIO_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)
while True:
if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
print(datetime.now().strftime('%Y/%m/%d %H:%M:%S'))
new_data_ref = ref.push()
new_data_ref.set({
'timestamp': {'.sv': 'timestamp'}
})
time.sleep(SLEEPTIME)
else:
print(GPIO.input(GPIO_PIN))
time.sleep(INTERVAL)
感知したらDatabaseにtimestampとともにPushします。Pushすることで一意のIDが生成されます。どうやらそのIDも時系列みたいです。
timestampの登録について
こちらのIssueでもありますが、Pythonのfirebase-adminモジュールからタイムスタンプを登録するには一癖あるみたいなので、上記の'timestamp': {'.sv': 'timestamp'}
のところが参考になれば幸いです。
デモンストレーション
このように、検知するとRealtime Databaseに書き込まれます。
UNIX時間の1597307961996
は2020/08/13 17:39:21なので完璧ですね。
#まとめ
以上、人感センサーの反応時刻をFirebase Realtime Databaseに格納するまででした。
次はそのデータを別のラズパイから取得します。