Howto

I2C 接続の CO2 センサーを使用する方法 (Armadillo-IoT ゲートウェイ G4/X2)

この 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 センサーを使用したプログラムを作成できます。
センサーのデータシートも参考にしてください。