Raspberry PiにBME280と MH-Z19Cを繋げてデータを取得できたので、cronで定期的にGoogleスプレッドシートに投げる方法のメモ
(尚、センサー類の部分は省略)
Google 公式ドキュメントは以下の辺りを参照した
Google Cloudのアカウントを作成してプロジェクトを事前に作っておき、以下手順を実行
1:Google CloudAPIの有効化
【 Cloud Console API ライブラリ 】からプロジェクトを選択して、APIページで有効にするをクリックして有効化
2:サービスアカウントの作成とJSONキー取得
Google Cloud Platform内から【 APIとサービス 】> 【 認証情報 】を開く
画面右下の【 サービスアカウントを管理 】を開く
画面上部の【 +サービスアカウントを作成 】からアカウントを作成する
【 サービスアカウント名 】を入力、2項目の【 サービスアカウントID 】は自動入力されるので、そのまま作成する
作成したサービスアカウントを選び、移動した先で【 キー 】タブを開き【 鍵を追加 】のプルダウンメニューから【 新しい鍵を作成 】を選び、JSON形式の鍵を作成する
操作しているPCにJSON形式の鍵が保存されるので、Raspberry PiにはSCPコマンドなどで送信しておく
3:必要なAPIライブラリ有効化
Google Cloud Platform内から【 APIとサービス 】> 【 ライブラリ 】を開く
検索窓から【 Google Derive API 】と【 Google Sheet API 】の2つを有効化する
4:Googleスプレッドシート側での共有設定
データを保存したいスプレッドシートを作成し、画面右上の【 共有 】を開き、上記で作成したサービスアカウントを追加する
サービスアカウントの表記は以下の通り
【 <サービスアカウント名>@<サービスアカウントID>.iam.gserviceaccount.com 】
5:Raspberry PiへGoogleスプレッドシートと認証用のライブラリインストール
$ sudo pip install gspread$ sudo pip install oauth2cliengt
後はPythonでコードを書くだけ
import gspreadimport jsonimport datetimefrom oauth2client.service_account import ServiceAccountCredentials#Google スプレッドシートAPI認証scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']credentials = ServiceAccountCredentials.from_json_keyfile_name('<保存したJSONキーのパス>', scope)gc = gspread.authorize(credentials)SPREADSHEET_KEY = '<対象スプレッドシートキー>'worksheet = gc.open_by_key(SPREADSHEET_KEY).worksheet('<シート名>')#日時取得today = datetime.datetime.now()#Googleスプレッドシートへデータ転送record = [ today.strftime('%Y/%m/%d %H:%M'), <B列の値>,<C列の値>,<D列の値>,<E列の値>]worksheet.append_row(record)
<スプレッドシートキー>は該当スプレッドシートのURLに含まれている値を入力する
https://docs.google.com/spreadsheets/d/<スプレッドシートキー>/edit#gid=0
シート名は日本語でも問題なく認識した
今回のコードではA列に日時を入れている、B〜E列には温度、湿度、気圧、CO2濃度の値をそれぞれ入れて、最終行に追記する形にしている
思いの他簡単に送信できたので、後はデータポータルでの可視化やGoogle Apps Scriptを用いた自動通知などと絡めれば十分使えると思う
端末が増えた場合は、デバイスID的な列を追加するか、スプレッドシートのシート自体を分けてしまえば管理もしやすそうな気がする
次はGCPへのデータ送信もやりたいが、Google IoT Coreからpub/Sub経由でFunctionを使うと課金されるので、試しに使うならBigQueryに直接投げる方法になるかな