ラズパイで二酸化炭素濃度を測定(4)ーCSVファイルに記録を残す | virt_flyのブログ

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

↑スマホでCO2センサーをつけたRAspberryPi Zeroを操作し、CO2濃度を記録したCSVファイルを表示させる

定時記録の実行

前回のブログでは、CO2センサーのMH-Z19Bの動作確認まで実施することができました。

思えば、親指大のセンサーケースの中で、赤外線を照射されてガス分子が振動し、CO2分子の固有振動数に共振する波長4.26μmの赤外線が分子振動によって吸収される、その度合いからCO2ガス濃度をコマンド一つで知ることができるというのですから、すごいというか少し感動してしまいます。

 

しかし、面倒なことにいちいちコマンドラインからsudo python3 -m mh_z19と入力して実行しないと、CO2濃度が測定、もといMH-Z19Bは約5病間隔で赤く発光するところから自動でCO2濃度が測定されているように思われますので、値が表示されないというべきところでしょう。またそれ以上に、せっかくのCO2濃度も測りっぱなしでメモをとらないと記録が残らないというのは、いかにも残念なです。

 

そこで、定時に記録がされるように、参考サイト「Raspberry Piにセンサーを付けてCO2濃度を測定してみる」(打つか投げるか https://blog.ko31.com/202004/raspberry-pi-measure-co2/)にならって実行してみました。

 
1)データを出力
 

●jqのインストール

前述のコマンドの実行でアウトプットされたCO2濃度は、json(JavaScript Object Notation)形式のデータとなっていて、これをいじれるようにjjqをインストールするそうです。

 $ sudo apt-get install jq

 

●シェルスクリプトの作成

参考サイトのスクリプトをまんま借用。ただし、ファイル名は何のスクリプトかわかるようにco2.shに改めました。

 #!/bin/sh

 date=`date '+%Y-%m-%d %H:%M:%S'`
 
 result=`sudo python3 -m mh_z19 | jq '.co2'`
 if [ $? -gt 0 ]; then
     echo "${date},0"
     exit 1;
 fi
 
 echo "${date},${result}"

 

※作成したファイルのパーミッションに注意

 

作成したシェルスクリプトを実行すると、日時とCO2濃度がカンマ区切りで出力されます。

 例)
 pi@raspberrypi:~$ ./co2.sh      ←これを実行
 2021-01-17 00:17:04,706     ←日時とCO2濃度を出力

 

2)定時実行にはcron

 

●cronに登録

今回Raspberry Piでセンサーを使うのが初めてで、あちこちサイトを参考のために覗いていたら、cronという言葉にしばしばでくわしました。cronとは、UNIX系OSの常駐プログラムの一種で、設定したスケジュールで目的のプログラムを定時実行させるという便利なもので、常識的なあまりか各サイトとも詳しい説明がなかったようです。

 

先のスクリプトが1分おきに実行されるように、cronに登録することになるのですが、念の為にcronのステータスを確認したところ、エラーが発生。そんなディレクトリ、ファイルは存在しないと。

 

あれこれネットで調べて愕然としました。コマンドが違っている!

例えばcronのステータス。

 $ /etc/rc.d/init.d/crond status
 $ sudo /etc/init.d/cron status

エラーした前者と後者とでは、よく見ると全然違っています。

 

 

登録は、以下を実行

 $ crontab -e

 

すると、初回はエディター聞いてきましたのでとりあえずNANOを選択、次を書き込みました

 * * * * * /home/username/co2.sh >>co2.csv

 

メモ)

前半の5つの*がスケジュールを設定する部分で「分 時 日 月 曜日」に相当。詳しくはふれませんが数字が入ります。デフォルトの5つの*が並んだ* * * * * では、毎分(1分毎に)コマンドが実行されます。コマンド指定部分は後半。

 

cronの表示方法は、crontab -l
cronの削除方法は、crontab -r  注意!登録したすべてが消えてしまいます
 

●cronのログを有効化しておく必要

件の登録では、計測結果をcsvファイル(logファイルでも良い)に1分毎に出力するように書き込みましたが、実際に出力させるにはあらかじめcronのログを有効化しておく必要がありました。

 

次のようにNANOを起動し、rsyslog.confファイルを開き

 $ sudo nano /etc/rsyslog.conf

 

以下のコメントアウトを外します。

  cron.*        /var/log/cron.log

 

●計測出力の実行

次を実行することで、計測値がcsvファイルに出力されます。Raspberry Piを起動するたび自動実行されます。

 $ sudo /etc/init.d/cron start

 

なお、停止は、sudo /etc/init.d/cron stop

 

  再起動は、sudo /etc/init.d/cron restart

 
出力されたデータは、ホームディレクトリーに生成されたco2.csvファイルを開いて見るか、下記の通り入力して確認でききます。ちなみに、数字はさかのぼって15回分のデータをここでは表示することを示します。
 $ tail -15 co2.csv   ←数字は15回分を表示の意味

 

↑カンマ区切りでターミナルに出力、あるいはCSVファイルで確認

 

 

<参考>

「Raspberry Piにセンサーを付けてCO2濃度を測定してみる」(打つか投げるか https://blog.ko31.com/202004/raspberry-pi-measure-co2/

「クーロン(cron)をさわってみるお」(https://qiita.com/katsukii/items/d5f90a6e4592d1414f99) cronの使い方が初心者にはがわかりやすかった。

「ラズベリーパイでCronを使って定期処理を行う方法、ハマりポイントやCronが動かない場合の対処方法など 」(Keep it up! https://k99-tech.com/blog/archives/1141) これを見てエラーの原因に気付く