目的
CO2 濃度を Windows 上に表示する。
環境
- Windows 11
- MH-Z19C
- Raspberry Pi Zero WH (以下の環境と同居)
概要
- CO2 センサー MH-Z19C を使って CO2 濃度を計測する。
- データの取得は Raspi zero で一定時間ごとに行い、取得したデータは Google スプレッドシートに記録する。
- Google スプレッドシートのデータをグラフ化し、デスクトップアプリのような形で表示する。
開発
Raspberry Pi Zero WH の シリアル通信(UART)を有効にする
# sudo raspi-config ->「3 Interface Options」を選択 ->「P5 Serial Port」を選択 ->「Would you lik alogin shell to be accessible over serial?」には "No" ->「Would you like the serial port hardware to be enabled?」には "Yes" -> 再起動
Python 関連のインストール
# python3 -m venv myenv # source myenv/bin/activate # pip3 install mh_z19 # pip3 install gspread # pip3 install oauth2client
MH-Z19C の配線
Raspberry Pi Zero WH と MH-Z19C を配線する。( VCC, GND, TX, RX を配線)
CO2 濃度が取得可能か確認
# python3 -m mh_z19 {"co2": 482}
要管理者権限。シリアル通信が有効でないとここでエラーになるので注意。
キャリブレーション
念のため、外気が良く通る場所にしばらく放置してからキャリブレーション。
# python -m mh_z19 --zero_point_calibration
Python
import sys import datetime import logging # MH-Z19のCO2センサーを使用 import mh_z19 # GoogleSpreadSheetに書き込むためのインポート import requests import gspread from oauth2client.service_account import ServiceAccountCredentials logging.basicConfig(level=logging.ERROR) # スプレッドシート key_name = '{ jsonファイルを指定 }' book_name = '{ Spreadsheet のファイル名 }' sheet_name = '{ Spredsheet のシート名2 }' # GoogleAPIを通してスプレッドシートに接続 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) # シートを取得 worksheet = gc.open(book_name).worksheet(sheet_name) def writeSpreadsheet(timestamp, co2): # 書き込み # 2行目は表示書式、数式などを埋め込むためあえて3行目に追加する worksheet.insert_row([timestamp, co2], 3) def main(): global timestamp timestamp = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:00") CO2_conce = mh_z19.read_all()["co2"] writeSpreadsheet(timestamp, CO2_conce) if __name__ == "__main__": main()
cron
0,15,30,45 * * * * /root/develop/co2/run.sh
実際の記録
参考
最後に
作ったものを寝室に仕掛けて計測してみたところ、最大でも 1000ppm 程度のため問題なさそうなのが確認できた。換気の弱い真冬や家族が一緒に寝るとまた変わってくるだろう。