LoginSignup
5
3

More than 3 years have passed since last update.

【Raspberry Pi】人感センサーが感知したらtimestampをFirebase Realtime Databaseに格納する

Last updated at Posted at 2020-08-14

はじめに

この記事は全4章からなる記事の第3章です。

  1. IoTを駆使してお年寄りの家を見守る「だけじゃない」システムを作った【SORACOM Summer Challenge 2020】
  2. LTE-M Buttonが押されたらLINE BotへPushメッセージを送る【SORACOM】
  3. 【Raspberry Pi】人感センサーが感知したらtimestampをFirebase Realtime Databaseに格納する :arrow_backward: 今ココ
  4. 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 FirestoreRealtime Databaseがありますが、今回はRealtime Databaseなので注意してください。
ルールを以下のように変更します。
※ テスト用ですので実際に運用する場合は適切なルール設定をしてください

また、「プロジェクトの概要」の右側にある歯車からプロジェクトを設定 > サービスアカウント > Firebase Admin SDKに移動し、Pythonを選択してコピー、また新しい秘密鍵の生成をクリックして、ダウンロードした秘密鍵をラズパイに保存します。

人感センサーとDatabaseの連携

以下がコードです

firebase.py
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に格納するまででした。
次はそのデータを別のラズパイから取得します。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3