Raspberry Pi

bullseye ベースの Raspberry Pi 4 でMH-Z19Bを利用して二酸化炭素濃度を計測する

はじめに

最近のRaspberry Pi 4 でMH-Z19Bを利用して二酸化炭素濃度を計測する場合、これまでの方法では値を取得することができませんでした。この原因はOSにあります。Raspberry Pi OSのベースがbusterからbullseye に変更されたことが原因です。bullseye ベースのOSで利用する方法を紹介します。

制限としては、精度が下がります。5ppm刻みに値が採られてしまいます。あと遅いです。自分でコードを書けば補正できるっぽい。

これまでの様々なサイトで紹介されている方法で利用するにはOSをバージョンをbusterベースにする必要があります。Raspberry Pi OS (Legacy)をダウンロードして利用します。

MH-Z19B の配線

Raspberry Pi 4 とMH-Z19Bの配線は以下になります。PWM での取得になります。

Raspberry Pi 4 MH-Z19B
5V Vin
GND GND
GPIO 12 PWM

下記を参考にしています。

PWM support. · UedaTakeyuki/mh-z19 Wiki · GitHub
PWM support. · UedaTakeyuki/mh-z19 Wiki · GitHub

Read CO2 concentration from mh-z19 sensor on the Raspberry Pi & handle it. Detect Raspberry Pi model ...

github.com

シリアル信号ではないのでシリアルポート設定は必要ありません。

Python で値を取得

手順は以下の通りです。

GitHub - UedaTakeyuki/mh-z19: Read CO2 concentration from mh-z19 sensor on the Raspberry Pi & handle it. Detect Raspberry Pi model automatically and read the value from an appropriate serial device.
GitHub - UedaTakeyuki/mh-z19: Read CO2 concentration from mh-z19 sensor on the Raspberry Pi & handle it. Detect Raspberry Pi model automatically and read the value from an appropriate serial device.

Read CO2 concentration from mh-z19 sensor on the Raspberry Pi & handle it. Detect Raspberry Pi model ...

github.com

pip3 install mh-z19

以上で準備は完了です。

 

値を取得します。

python3 -m mh_z19 --pwm

JSONもどきで吐き出されます。シングルコーテーションのためjqにかけてもエラーがでます。面倒ですね。なので一応サインプルのスクリプトを置いておきます。

{'co2': 940.0}

 

サンプル(日時と値を取得してCSVに吐き出すだけのスクリプト)

事前にjqはインストールします。

apt install jq

bashスクリプト

while :
do
   co2=`python3 -m mh_z19 --pwm`
   co2vol=`echo $co2 | sed -e 's/'\''/\"/g' | jq .[]`
   csvdate=`date "+%Y/%m/%d,%H:%M:%S"`","$co2vol
   echo $csvdate >> co2.csv
   echo $csvdate
   sleep 5s
done

結果

# ./mhz19.sh
2023/01/17,01:41:43,960
2023/01/17,01:41:50,965
2023/01/17,01:41:57,960
2023/01/17,01:42:04,960
2023/01/17,01:42:11,955
2023/01/17,01:42:18,960

 

あとは適当にExcelなどでグラフ化してください。

まとめ

bullseye ベースのOSではこれまでの方法では取得できません。PWM での取得を行いましょう。

-Raspberry Pi
-