はじめに
部屋の空気の汚染具合を監視したくて、Raspberry Piにセンサーを付けて採取しました。
機器
- Raspberry Pi Zero WH (RaspiOS(Buster)「2021-12-02-raspios-buster-armhf-lite.zip」)
- KEYESTUDIO DC 5V CCS811 CO2 二酸化炭素 TVOC 大気質 センサー モジュール for Arduino
接続は、以下の記事を参考にしました。
『VCCはラズパイの3.3Vに、GNDはラズパイのGNDに、SDAは3ピンに、SCLは5ピンに接続するあたりは通常のI2C接続と同じですが、これに加えてRSTをVCCに、WAKEをGNDに接続する必要があります。』とあるので、その通りに接続しました。
ブレッドボードは持ってないので、直ケーブル接続です。他の一般サイトではVCCを5Vに接続しているところもあるようですが、3.3Vで使えてます。
設定
「raspi-config」でi2cを有効にしておきます。よくわからんけど、spiも有効にしました。
$ sudo raspi-config
/boot/config.txtの末尾に以下のパラメータを追加します。
$ sudo vi /boot/config.txt
:
dtparam=i2c_baudrate=10000
再起動します。
$ sudo reboot
i2c-toolsをインストールして、センサーが認識されているか確認します。
$ sudo apt install i2c-tools
$ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
i2cバスとして指定した「1」と、「5a」を覚えておきます。
usermodでpiユーザでi2cを利用できるようにします。
$ sudo ls -la /dev/i2c-1
crw-rw---- 1 root i2c 89, 1 Jan 1 18:23 /dev/i2c-1
$ sudo usermod -aG i2c pi
Node-REDで利用する
$ sudo apt install nodered
$ sudo systemctl enable nodered
$ sudo systemctl start nodered
久しぶりにZeroでNode-RED起動しましたが、やっぱ遅いですね...
起動できたら、「パレットの管理」→「ノードの追加」で「node-red-contrib-ccs811-airquality-sensor」を追加します。
ノードを配置して設定を開くと、おそらく何も設定しなくてもi2cBusとAddressは合ってると思います。キャリブレーションも自動になっているので、そのままで良いかと思います。
あとは、payloadに「getMeasurement」と文字列を設定して定期的に実行させれば良いです。
私は後続のノードで自宅内のElasticsearchにデータを投げ込んでいます。
センサーに通電させて、12時間後くらいから値が出始めました。センサーの仕様的には少なくとも24時間は放っておく必要があるようです。
あとは24時間毎にキャリブレーションが行われるそうなので、数日は放置しておいた方がそれっぽい値が採取できると思います。
Zero WH + CCS811の最終的な外観はこちら。SwitchBotカーテンの操作も兼ねさせています。
おわりに
翌日はそれっぽい値が出てたのですが、さらに次の日は値が高めに出てなかなか収束しないです。
1週間くらい様子見てみようかと思います。
[追記]1週間様子みたところ、極端に大きな値が減り、そこそこ利用できそうな安定した値になってきました。