RaspberryPi + GrovePi + MH-16Z でCO2濃度センサをつくる
無性に眠いときありますよね
自分の場合、経験的に無性に眠くなる原因として多いのは、低気圧と換気不足(二酸化炭素濃度上昇)な気がします
前にGroveのCO2センサ買ってたんですが使い方を忘れてたので、再度セットアップしてここにメモ
センサハードウェア
MH-16Z
データシート: https://www.seeedstudio.com/Grove-Carbon-Dioxide-Sensor-MH-Z16.html
プログラム
昔作りっぱなしだったコレ がありましたが、動作環境、使い方を忘れていた
https://github.com/kefi550/mhz16-go
GrovePiを取り付ける
今回使ったのは Raspberry Pi 3B+
GrovePiをラズパイ本体に取り付けて、
今回のセンサMH-16Zは RPISER ポートに挿しました
RaspberryPiの設定
OSはRaspbianを入れます(後述しますがUbuntuではうまくいかなかった)
(余談として、OS入れたあとの諸々の初期設定をやる記事も興味があればご覧ください https://blog.kefiwild.com/posts/ansible_initial_ip_password_change/ )
/dev/serial0
を使うようです (要出典)
OS入れた直後くらいの最初はこんな状態です
$ ls -l /dev | grep serial
lrwxrwxrwx 1 root root 7 Aug 12 18:07 serial1 -> ttyAMA0
serialを有効化するための作業をします。raspi-configを使いました
sudo raspi-config
Interface Options
を選択
Serial Port
を選択
Would you like a login shell to be accessible over serial?
には No
ログイン時のシリアルコンソールを使うか?
Would you like the serial port hardware to be enabled?
を Yes
シリアルポートを有効化するか?
この後rebootすると、以下のようになります
$ ls -l /dev | grep serial
lrwxrwxrwx 1 root root 5 Aug 12 18:07 serial0 -> ttyS0
lrwxrwxrwx 1 root root 7 Aug 12 18:07 serial1 -> ttyAMA0
/dev/serial0 が現れました
Ubuntuを使うとうまく動かなかった
Ubuntu 22.04 の場合、 /dev/serial0 がなにかと干渉していたりするのか、うまく動きませんでした
↑のraspi-config の手順だけではたぶん不足してるんでしょうかね
センサプログラムを動かす
https://github.com/kefi550/mhz16-go を使います
センサとのシリアル通信には上記の通り /dev/serial0
を使います
$ sudo apt install golang-go
$ git clone https://github.com/kefi550/mhz16-go
$ cd mhz16-go
$ go build
$ sudo ./co2 /dev/serial0
1187
それっぽく取得できました
2023/08/16 追記
↑までの手順ではttyS0を使いますが、結構不安定でした。
以下を /boot/config.txt に追記することで、 /dev/serial0 -> /dev/ttyAMA0 となり、安定しました
(仕組みはわかってません)
dtoverlay=miniuart-bt
core_freq=250
おわりに
- 昔作ったCO2センシングプログラムの使い方など忘れてましたが、結果的には意外とシンプルに使えました
- 最近ラズパイにはとりあえずUbuntuをいれるというムーブだったんですが、serial使う場合はRaspbianが無難そうですね