この Howto では、Armadillo-IoTゲートウェイ G4 に I2C 接続の CO2 センサー を接続し、CO2 濃度・温度・相対湿度を取得する方法をご紹介します。
Armadillo-IoTゲートウェイ G4をベースにした内容になっていますが、Armadillo-X2でも動作確認しています。 Armadillo-X2はArmadillo-IoTゲートウェイ G4の機能を一部減らして小型にした製品で、基本的には同じソフトウェアで動作します。 また、拡張インターフェース(CON11)の仕様も同じですので、CON11用に作った拡張ボードは両方の製品で動作します。
使用する CO2 センサー
この HowTo で使用した I2C 接続の CO2 センサーモジュールを以下に示します。
接続方法
Armadillo-IoT ゲートウェイ G4 で I2C バスを使用する方法
を参照ください。
この CO2 センサーは 3.3V もしくは 5V で動作するデバイスなので、レベル変換回路が必要です。
Armadillo-X2の場合は、CON16から3.3Vを供給することが可能です。
この後のサンプルプログラムでは I2C4 (/dev/i2c-3) にセンサーを接続しています。
サンプルプログラム
約 2 秒周期でセンサーの値を取得して表示する、 C 言語のサンプルプログラムを用意しました
(こちら)。
サンプルプログラムの動かし方を以下に示します。
コンテナの起動
Debian の場合
[armadillo ~]# podman run -it --rm --device=/dev/i2c-3 docker.io/debian /bin/bash
(省略)
Alpine の場合
[armadillo ~]# podman run -it --rm --device=/dev/i2c-3 docker.io/alpine /bin/sh
(省略)
必要なパッケージのインストール
Debian の場合
[container /]# apt update && apt upgrade -y && apt install -y gcc wget i2c-tools
(省略)
done.
Alpine の場合
[container /]# apk update && apk upgrade && apk add gcc wget i2c-tools musl-dev linux-headers
(省略)
OK: 126 MiB in 31 packages
デバイスとの接続確認
SCD30のデバイスアドレスは 0x61
なので、61
が表示されます。
[container /]# i2cdetect -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- 61 -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
サンプルプログラムのダウンロード・解凍
[container /]# cd
[container ~]# wget https://armadillo.atmark-techno.com/system/files/blog/howto_g4_i2c_co2.tar.gz
(省略)
2022-04-07 02:13:52 (30.2 MB/s) - 'howto_g4_i2c_co2.tar.gz' saved [2256/2256]
[container ~]# tar zxvf howto_g4_i2c_co2.tar.gz
howto_g4_i2c_co2/
howto_g4_i2c_co2/i2c_scd30.c
howto_g4_i2c_co2/i2c_scd30.h
howto_g4_i2c_co2/test.c
[container ~]# cd howto_g4_i2c_co2/
サンプルプログラムのコンパイル・実行
[container ~/howto_g4_i2c_co2]# gcc test.c i2c_scd30.c -o test
[container ~/howto_g4_i2c_co2]# ./test
CO2: 400 [ppm] Temp: 26.0 [deg] Humidity: 18 [%RH]
CO2: 426 [ppm] Temp: 26.0 [deg] Humidity: 18 [%RH]
CO2: 692 [ppm] Temp: 26.1 [deg] Humidity: 60 [%RH]
CO2: 1066 [ppm] Temp: 26.1 [deg] Humidity: 73 [%RH]
CO2: 8457 [ppm] Temp: 26.1 [deg] Humidity: 71 [%RH]
CO2: 17906 [ppm] Temp: 26.1 [deg] Humidity: 65 [%RH]
CO2: 20974 [ppm] Temp: 26.1 [deg] Humidity: 53 [%RH]
CO2: 20697 [ppm] Temp: 26.1 [deg] Humidity: 49 [%RH]
CO2: 20317 [ppm] Temp: 26.1 [deg] Humidity: 47 [%RH]
CO2: 18246 [ppm] Temp: 26.1 [deg] Humidity: 44 [%RH]
CO2: 17194 [ppm] Temp: 26.1 [deg] Humidity: 43 [%RH]
CO2: 14949 [ppm] Temp: 26.1 [deg] Humidity: 41 [%RH]
CO2: 12249 [ppm] Temp: 26.1 [deg] Humidity: 43 [%RH]
CO2: 9149 [ppm] Temp: 26.1 [deg] Humidity: 34 [%RH]
CO2: 7884 [ppm] Temp: 26.1 [deg] Humidity: 31 [%RH]
CO2: 6709 [ppm] Temp: 26.1 [deg] Humidity: 31 [%RH]
CO2: 5022 [ppm] Temp: 26.1 [deg] Humidity: 28 [%RH]
CO2: 4504 [ppm] Temp: 26.1 [deg] Humidity: 26 [%RH]
CO2: 3205 [ppm] Temp: 26.0 [deg] Humidity: 26 [%RH]
CO2: 2895 [ppm] Temp: 26.1 [deg] Humidity: 26 [%RH]
CO2: 2339 [ppm] Temp: 26.1 [deg] Humidity: 25 [%RH]
(無限ループ)
サンプルプログラムについて
サンプルプログラムは test.c
に main 関数があります。
test.c
と同様に i2c_scd30.h
をインクルードすることで、CO2 センサーを使用したプログラムを作成できます。
センサーのデータシートも参考にしてください。