はじめに
FirebaseにRaspberry Piからデータを突っ込む方法を記載します。
環境
- macOS Big Sur 11.5
- Raspberry Pi Zero WH(Raspberry Pi OS)
- Firestore
- macOS(Python):3.8.5
- RaspBerryPi(Python):3.7.5
Firebase環境の構築等は今回は説明を省略します。Firebaseの状態は以下の通りです。
手順
- macでFirebaseにデータを追加する
- RaspBerryPiでFirebaseにデータを追加する
1. macでFirebaseにデータを追加する
1-1. ドキュメントのフィールド値を決める
定期的に温度をFirebaseに上げる仕組みとするため、具体的に以下のようにFirebaseの値を決める
- Collection: Environment
- Document: 自動
- Field: temperatura,time
1-2. Firebaseへアクセスする環境を整える
-
@yusukeito58 さんの[Cloud FirestoreのデータをPythonで取得する]
(https://qiita.com/yusukeito58/items/c77feaa25fbbe37e9953)を参考に環境を整える - 以下のコードで更新を行えることを確認する
import time
import datetime
import os
import csv
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
from firebase_admin import storage
cred = credentials.Certificate("Firebase秘密鍵")
app = firebase_admin.initialize_app(cred)
db = firestore.client()
today = datetime.datetime.fromtimestamp(time.time())
date = today.strftime('%Y%m%d%H%M%S')
data = {
u'time':date,
u'temparature':35.5 #この値はデバイスから取得するよう変更が必要
}
db.collection(u'environment').add(data)
2. RaspBerryPiでFirebaseにデータを追加する
2-1. [macでFirebaseにデータを追加する](# 1. macでFirebaseにデータを追加する)にデータを追加するで作成したreportTemperatureをraspberry piにアップロードする
今回は、「reportTemperature.py」と「Firebase秘密鍵」の2種類
scp -P 22 reportTemperature.py pi@raspberrypi.local:/home/pi
scp -P 22 Firebase秘密鍵 pi@raspberrypi.local:/home/pi
2-2. Raspberry Pi でも1-2の初期設定を行う
2-3. Raspberry Pi をテザリングまたはWirelessLANで繋ぐ
テザリングまたはWirelessLANの設定は、@hishi さんの[Raspberry Pi Zero(W, WH)のセットアップ]
(https://qiita.com/hishi/items/8bdfd9d72fa8fe2e7573)を参照
2-4. 動作確認を行う
まとめ
先人の情報を使用して、ほとんど困らずに温度を更新する仕組みができた。Firebaseのデータベース定義について、定石がわからないが、今回のデータではドキュメント名を自動でふり、そのフィールドに時間と温度を持たせることでコレクションとして扱うことにした。