今回はPythonを使って、ラズパイに接続してあるセンサーから取得したデータなどをグーグルスプレッドシートに自動で記載する方法について記載します。
グーグルスプレッドシートに記載することで、スマホなどからそのグーグルスプレッドシートにアクセスすることで、いつでもどこでもデータを確認できます。
目次
概要
今回はグーグルAPIを使って、Pythonにより様々な情報をグーグルスプレッドシートに自動記入していきます。これにより、
- スマートリモコンのプログラムに組み込むことで、エアコンがONかOFFか確認
- スマートロックのプログラムに組み込むことで、鍵の開閉状況の確認
- 自作玄関モニターのプログラムに組み込むことで、来客者が何時に来たかを確認
- ラズパイに取り付けたセンサーと組み合わせることで、定期的にセンサー情報を記載、そのデータを用いて機械学習
など、様々なことができるようになります。
環境
- 端末 ラズベリーパイ3
- OS rasbian(Linux)
- Python 3.5.3
Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品
手順
API設定
GoogleAPIのサイトでAPIの設定をします。
https://console.developers.google.com/cloud-resource-manager
まず、プロジェクトを作成します。
上記のURLをクリックすると以下のような画面が表示されるので赤丸のところをクリックします。
すると以下のような画面が表示されるので、適当にプロジェクト名を記入し作成をクリックします。
次に、使用するAPIを有効化します。
画面左上のナビゲーションをクリックし、「APIとサービス」→「ライブラリ」と進みます。
検索欄にSpreadと入力し、Google Sheets APIを選択して、[有効にする]をクリックします。
同様に、検索欄にdriveと入力し、Google Drive APIを選択して、[有効にする]をクリックします。
続いて、認証情報を作成します。
画面左上のナビゲーションをクリックし、「APIとサービス」→「認証情報」と進みます。
「認証情報を作成」→「サービスアカウントキー」と進みます。
役割を編集者にし、サービスアカウント名を適当に入力したら作成をクリックします。
スプレッドシートの設定
作成をクリックするとjsonファイルがダウンロードされるので、その中に記載されている “client_email” のメールアドレスをコピーします。
https://docs.google.com/spreadsheets/create
にアクセスしてGoogleSheetを作成します。
スプレッドシートの左上の名前を好きな名前に変更して、右上の共有をクリックすると以下のようにポップアップ画面が表示されるので、先ほどコピーしたメールアドレスを貼り付けて送信をクリックします。
Pythonのモジュールインストールとプログラム作成
次にグーグルスプレッドシートに記入するためのプログラム(gspred-sample.py)を作成します。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import gspread
from oauth2client.service_account import ServiceAccountCredentials
#変更してください
key_name = '**************.json'
sheet_name = 'グーグルスプレッドシート名'
#APIにログイン
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(key_name, scope)
gc = gspread.authorize(credentials)
#セル'A1'に'TEST'と入力
cell_number = 'A1'
input_value = 'TEST'
wks = gc.open(sheet_name).sheet1
wks.update_acell(cell_number, input_value)
上記のプログラムの ‘key_name’ と ‘sheet_name’ を書き変え、名前を
gspred-sample.py として保存し、先ほどダウンロードされた jsonファイルと共に、ラズパイの同じディレクトリ上にコピーしてください。
続いて以下のコマンドをラズパイ上で実行し、必要なモジュールをインストールします。
pip install gspread
pip install oauth2client
以上で実行する準備が整ったので、先ほど作成したプログラムを実行してみてください。
python gspred-sample.py
グーグルスプレッドシート上のA1セルにTESTと記入されたら成功です。
補足
python3系で実行する場合は、
pip3 install gspread
pip3 install oauth2client
としてモジュールをインストールし、
python3 gspred-sample.py
で実行してみてください。
はじめまして。
仕事でラズパイを使っている高橋です。
ラズパイで取得したIoTデータを
グーグルスプレッドシートに自動記録の記事を参考に
自分のラズパイでも記録できました。
ありがとうございます。
今現在、タクトスイッチを使い
押した時刻をスプレッドシートに記録しているのですが、
時刻の記録をA1、A2、A3・・・と
徐々に下の段に記録するにはどうすればいいでしょうか?
お手数をおかけしますが
教えていただければ幸いです。
コメントありがとうございます!
お役に立てて大変うれしく思います!
以下のコマンドを使用することで、スプレッドシートに既に入力されているデータの最終行の直下にデータが入力されます。
(例えば、A1~A5に既にデータを入力済みの場合に以下のコマンドを使用すると、A6にデータが入力されます。)
wks.append_row(cell_value)
(↑wksはシート名、cell_valueは入力するデータの値)
例として、
cell_value = "2020/04/09"
wks.append_row(cell_value)
というコードを実行すると、既に入力されているデータの最終行の直下に、
2020/04/09と入力されます。
こちらの記事にも書いてあるので、参考にしてみてください。
https://jorublog.site/electronic-work-smart-lock-2-gspred/
また分からないことがございましたらお気軽にご質問ください!
高橋です。
返信ありがとうございます!
早速試してみます。
また分からない点ありましたらコメントしますので
よろしくお願いします。