Grove.pyで二酸化炭素を測定できるSCD30を動かしてみる

Seeed K.K.の中井です。

Raspberry PiなどでGroveモジュールをお手軽に制御することができるPythonライブラリGrove.py。 最近になって二酸化炭素濃度を計測できるSCD30用のライブラリが追加されたそうなので早速動作確認してみました。

f:id:mnakai:20220405160802p:plain

使ったもの

  • Raspberry Pi 4 Model B

www.seeedstudio.com

  • Grove Base HAT for Raspberry Pi

www.seeedstudio.com

  • Grove - CO2 & Temperature & Humidity Sensor for Arduino (SCD30)

www.seeedstudio.com

  • micro SDカード

準備

Raspberry Piのソフトウェアは、公式から配布されているRaspberry Pi Imagerを使って用意しました。PCにmicro SDを接続した後にRaspberry Pi Imagerを起動して、OSをRaspberry Pi OS、ストレージにはmicro SDを選択し、最後に書き込むで完了です。

f:id:mnakai:20220404152124p:plain

デフォルト状態のRaspberry Pi OSには、Python3(やGit)が標準でインストールされているので特に追加でインストールするものはありませんでした。

Grove.py

PythonライブラリのGrove.pyはGitを使って取り込みました。

pi@raspberrypi:~$ git clone https://github.com/Seeed-Studio/grove.py
Cloning into 'grove.py'...
remote: Enumerating objects: 1472, done.
remote: Counting objects: 100% (211/211), done.
remote: Compressing objects: 100% (99/99), done.
remote: Total 1472 (delta 117), reused 190 (delta 108), pack-reused 1261
Receiving objects: 100% (1472/1472), 735.56 KiB | 5.49 MiB/s, done.
Resolving deltas: 100% (945/945), done.

続いてインストールしておきます。

pi@raspberrypi:~$ cd grove.py/
pi@raspberrypi:~/grove.py$ sudo pip3 install .

Grove Base HAT for Raspberry Pi

Raspberry Piの40-Pin GPIO Headerに接続されるGrove Base HATは、Digital, Analog, I2C, PWM, UARTに対応するGroveポートを追加することができます。

f:id:mnakai:20220405145016p:plain

今回使用するGrove SCD30はI2Cで通信するので、上記の3個のI2Cポートのいずれかに接続します。 I2Cポートのバスは共通で、Raspberry Pi 40-Pin GPIO Header、Grove Base HATと次のようにつながっているようです。

ピン番号 GPIO番号 機能
Pin.3 GPIO2 SDA
Pin.5 GPIO3 SCL

動作確認

Raspberry Piのセットアップが終わったのでいよいよ動作確認ができます。 Grove.pyに収録されているgrove_co2_scd30.pyを実行すればよいですね。

pi@raspberrypi:~$ cd grove.py/
pi@raspberrypi:~/grove.py$ python grove/grove_co2_scd30.py
Traceback (most recent call last):
  File "/home/pi/grove.py/grove/grove_co2_scd30.py", line 181, in <module>
    main()
  File "/home/pi/grove.py/grove/grove_co2_scd30.py", line 168, in main
    sensor = GroveCo2Scd30()
  File "/home/pi/grove.py/grove/grove_co2_scd30.py", line 54, in __init__
    self.bus = Bus(bus)
  File "/usr/local/lib/python3.9/dist-packages/grove/i2c.py", line 51, in __init__
    Bus.instance = smbus.SMBus(bus)
  File "/usr/local/lib/python3.9/dist-packages/smbus2/smbus2.py", line 280, in __init__
    self.open(bus)
  File "/usr/local/lib/python3.9/dist-packages/smbus2/smbus2.py", line 310, in open
    self.fd = os.open(filepath, os.O_RDWR)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'

エラーですね。。/dev/i2c-1がない。確かに/dev/以下に存在していません。

pi@raspberrypi:~$ ls /dev/i2c-*
/dev/i2c-20  /dev/i2c-21

調べてみるとRaspberry Pi OSのデフォルト状態では40-Pin HeaderのI2C信号(SDA:GPIO2、SCL:GPIO3)は無効状態となっているようです。 raspi-configでInterface Options > I2Cを選択してEnableにしてあげます。

pi@raspberrypi:~$ sudo raspi-config

f:id:mnakai:20220405153220p:plain

f:id:mnakai:20220405153254p:plain

I2Cを有効化すると/dev/i2c-1が作成されました。

pi@raspberrypi:~$ ls /dev/i2c*
/dev/i2c-1  /dev/i2c-20  /dev/i2c-21

これで問題ないはずなので再度Pythonを実行。

pi@raspberrypi:~/grove.py$ python grove/grove_co2_scd30.py
CO2 concentration is 746.7 ppm
Temperature in Celsius is 25.41 C
Relative Humidity is 39.97 %
CO2 concentration is 753.1 ppm
Temperature in Celsius is 25.43 C
Relative Humidity is 40.56 %

無事Grove SCD30から二酸化炭素濃度、気温、湿度を読み出すことができました。

まとめ

Raspberry Pi 4 Model BでGrove.pyを使ってGrove SCD30から測定データを読み出してみました。 Raspberry Piのインターフェースの有効化があるものの、非常に簡単にセットアップすることができました。 下記リンクにGrove.pyに対応するGroveモジュールの一覧がありますので是非お試しあれ。

github.com

変更履歴

日付 変更者 変更内容
2022/4/5 mnakai 作成