2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【コロナ対策】ラズパイとCO2センサーで二酸化炭素濃度測定ポータブルIoTシステムを作ってみた

Last updated at Posted at 2021-09-17

#本記事の内容

  • ラズパイで測定した二酸化炭素濃度データをGoogleスプレッドシートに記録し、任意のデバイスからデータを閲覧できるようにする。

5年前に買うだけで満足してしまい、一度も利用していなかったRaspberry pi2を引っ張り出してきたのは、こんな感じのIoTシステムを作ってみたかったから。
構成図2.png

IMG20210923141704_BURST001.jpg

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)

#手順の流れ

  1. ラズパイでのGoogleスプレッドシート連携の準備
  2. Pythonプログラムの作成とラズパイへの転送
  3. Pythonプログラムの自動起動設定
  4. プログラムの動作確認

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とメニューを辿る。
01.png

Fromにアップロードする対象のファイルを指定し、Toにアップロード後格納するディレクトリを指定する。ここでは、/home/piとする。"Send"をクリックする。
02.png

ラズパイに転送できたことを確認する。

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を利用しています。
以下が私が動かしたサンプルプログラムを載せます。

co2sensor-google.py
# 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スプレッドシートにグラフを設定しておいたので、データが書き込まれると自動でグラフに反映されるようにできた。これで都度手を加えずに自動でグラフが作成される。
ラズベリーパイを再起動し、スマホのデザリングに接続し、しばらくの間試運転してみた。(試運転は、モバイルバッテリーではなく、通常通りコンセントから電源を取った。)

試運転の結果のグラフはこちら。
E_aS1laUYAQIcm-.png
ある程度上手く取れてそう。数値は若干低い気もするが目的の用途に使えそうな感触を得た。

ラズパイが測定したデータを書き込むシートはこちら。
結果3.png
※グラフの時のデータを残しておけば良かったのですが、残し忘れたので、こちらは全然違うときに測定したデータのキャプチャーです。

こちらのデータを別の「graph」シートのグラフが参照しているので、「data」シートにデータが追加されると自動でグラフに値が反映されます。

CO2センサーを活用したシステム化がうまくいっている気がする。
今週末は、実際にモバイルバッテリーで稼働させてみよう!!!

手順は以上。

参考文献

本記事の作成に当たり、以下の情報を参考にさせて頂きました。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?