Raspberry Pi Zero WH を使用した MH-Z19C のCO2濃度取得

目的

CO2 濃度を Windows 上に表示する。

環境

概要

  • 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 程度のため問題なさそうなのが確認できた。換気の弱い真冬や家族が一緒に寝るとまた変わってくるだろう。