#本記事の内容
- ラズパイで測定した二酸化炭素濃度データをGoogleスプレッドシートに記録し、任意のデバイスからデータを閲覧できるようにする。
5年前に買うだけで満足してしまい、一度も利用していなかったRaspberry pi2を引っ張り出してきたのは、こんな感じのIoTシステムを作ってみたかったから。
CO2センサーをラズパイに搭載し、スマホ等からのデザリングでインターネットに接続する。(スマホのデザリングでなくとも有線LAN接続やなんらかのWi-Fiでも良い)
測定したデータをネット経由でGoogleスプレッドシートにアップロードするので、ネットに繋がっているスマホ等のブラウザからデータを確認できる。
さらにラズパイの電源をモバイルバッテリー化することで、どこへでも持ち運んでCO2濃度の測定とデータの確認ができる。
感染症対策を謳っていても、、あまり換気されてないところある気がしていまして、、
これを活用し、今いる場所の"密"具合いを間接的に測って知り、少しでもコロナの自衛に繋がればいいなあと思っています。
#実施環境
- Windows 10
- TeraTarm Version 4.9.4
- Raspberry Pi 2 Model B
- PLANEX 無線LAN子機 GW-USNANO2A ※Raspberry Pi 2はWi-Fi通信モジュールがないため、無線LAN子機をUSBに接続しWi-Fi通信を行う。
- MH-Z19B ※二酸化炭素濃度測定用センサー
- GPIOピンケーブル メス-メス ※MH-Z19BとGPIOピンを接続するのに使用
- Androidスマホ (OPPO A73)
- モバイルバッテリー (Anker PowerCore II 10000)
#手順の流れ
- ラズパイでのGoogleスプレッドシート連携の準備
- Pythonプログラムの作成とラズパイへの転送
- Pythonプログラムの自動起動設定
- プログラムの動作確認
1. ラズパイでのGoogleスプレッドシート連携の準備
Googleスプレッドシートとの連携に必要な物の準備を行う。
1.1 Googleスプレッドシート連携用のライブラリーのインストール
gspreadをインストールする。
sudo pip install gspread
インストールできたことを確認する。
pi@raspberrypi:~ $ sudo python -m pip list | grep gspread
gspread 4.0.1
pi@raspberrypi:~ $
インストールを確認できた。
1.2 Python用のGoogle API Clientライブラリーのインストール
google-api-python-clientをインストールする。
sudo pip install google-api-python-client
インストールできたことを確認する。
pi@raspberrypi:~ $ sudo python -m pip list | grep google-api-python-client
google-api-python-client 2.21.0
pi@raspberrypi:~ $
インストールを確認できた。
1.3 Google API用認証ファイルをラズパイに転送
TeratarmにてラズパイにSSH接続し、ファイル > SSH SCP
とメニューを辿る。
Fromにアップロードする対象のファイルを指定し、Toにアップロード後格納するディレクトリを指定する。ここでは、/home/piとする。"Send"をクリックする。
ラズパイに転送できたことを確認する。
pi@raspberrypi:~ $ ls -l /home/pi/*.json
-rw-r--r-- 1 pi pi 2358 Sep 15 06:50 /home/pi/XXXXXXXXXXXXXXXXXX.json
pi@raspberrypi:~ $
転送したことを確認できた。
2. Pythonプログラムの作成とラズパイへの転送
開発ツールは何でも良いです。私はVScodeを利用しています。
以下が私が動かしたサンプルプログラムを載せます。
# Googleスプレッドシート用のライブラリー
import gspread as gs
# Google認証用のライブラリー
from google.oauth2 import service_account
# 二酸化炭素濃度測定用のライブラリー
import mh_z19
from datetime import datetime as dt
# Google認証用のキー
GOOGLE_KEY_NAME = '/home/pi/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.json'
# 操作するGoogleスプレッドSheetのID
GOOGLE_SPREAD_SHEET_ID = 'YYYYYYYYYYYYYYYYYYYYYYYYYYY'
try:
if __name__ == '__main__':
scope = ['https://www.googleapis.com/auth/spreadsheets'] #フルアクセス権限
credentials = service_account.Credentials.from_service_account_file(filename=GOOGLE_KEY_NAME, scopes=scope)
# Googleスプレッドにおける
gc = gs.authorize(credentials)
# dataシートをオープン
workSheet = gc.open_by_key(GOOGLE_SPREAD_SHEET_ID).worksheet('data')
# dataシートのデータを取得する
records = workSheet.get_all_values()
# 現在時刻を取得
tdatetime = dt.now()
tstr = tdatetime.strftime('%Y-%m-%d %H:%M:%S')
# 二酸化炭素濃度測定
out = mh_z19.read()
# 二酸化炭素濃度測定時刻の書き込み
workSheet.update_cell(len(records) + 1,1,tstr)
# 二酸化炭素濃度の書き込み
workSheet.update_cell(len(records) + 1,2,out['co2'])
except KeyboardInterrupt:
pass
尚、Googleスプレッドシートと連携するための設定や認証キーの作成は、以前の記事
ラズパイ連携に向けたGoogleSheetsAPIにおけるサービスアカウントの作成でまとめています。
「1.3 Google API用認証ファイルをラズパイに転送」の手順と同様に「co2sensor-google.py」を/home/piにアップロードする。
3. Pythonプログラムの自動起動設定
自動起動の設定を行うためにcrontabに設定を行う。
その前にcrontabのエディターの設定を変更する。
viライクなエディタが好きなので以下のコマンドで"2"を入力しvimに変更する。
sudo select-editor
pi@raspberrypi:~ $ sudo select-editor
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]: 2
pi@raspberrypi:~ $
次にcrontabで設定を行う。
sudo crontab -e
1分ごとに起動する設定にしたかったので、以下の設定を末尾に加える。
*/1 * * * * sudo python /home/pi/co2sensor-google.py > /home/pi/co2_error.log 2>&1
※エラー時の解析をできるようにするため、念のためログも出力するように設定しておいた。
crontabが設定できたことを確認する。
pi@raspberrypi:~ $ sudo crontab -l
~途中省略~
# m h dom mon dow command
*/1 * * * * sudo python /home/pi/co2sensor-google.py > /home/pi/co2_error.log 2>&1
pi@raspberrypi:~ $
ちゃんと設定できていた。
4. プログラムの動作確認
Pythonプログラムとは別に、あらかじめGoogleスプレッドシートにグラフを設定しておいたので、データが書き込まれると自動でグラフに反映されるようにできた。これで都度手を加えずに自動でグラフが作成される。
ラズベリーパイを再起動し、スマホのデザリングに接続し、しばらくの間試運転してみた。(試運転は、モバイルバッテリーではなく、通常通りコンセントから電源を取った。)
試運転の結果のグラフはこちら。
ある程度上手く取れてそう。数値は若干低い気もするが目的の用途に使えそうな感触を得た。
ラズパイが測定したデータを書き込むシートはこちら。
※グラフの時のデータを残しておけば良かったのですが、残し忘れたので、こちらは全然違うときに測定したデータのキャプチャーです。
こちらのデータを別の「graph」シートのグラフが参照しているので、「data」シートにデータが追加されると自動でグラフに値が反映されます。
CO2センサーを活用したシステム化がうまくいっている気がする。
今週末は、実際にモバイルバッテリーで稼働させてみよう!!!
手順は以上。
参考文献
本記事の作成に当たり、以下の情報を参考にさせて頂きました。