Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、BME280センサーで気温、湿度、気圧を測定する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定や記録ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。
更新日 : 2023年12月1日概要
BME280センサーに対応した拡張基板を用いることで、Raspberry Piで気温、湿度、気圧を測定することが可能になります。一方で、ハードウェアがあっても、センサーを制御するソフトウェアがなければ測定を行うことはできません。
そこで、Indoor Corgi製のRaspberry Pi拡張基板に搭載されているセンサーを一括して制御できるソフトウェア「cgsensor」を開発しました。
コマンドラインツールを使えば1行もコードを書かずに測定や記録ができるほか、Pythonパッケージでご自身のプログラムから簡単にセンサーを制御できます。本記事では気温、湿度、気圧センサー BME280を制御する方法について解説します。
拡張基板
cgsensorでは最大2チャンネルのBME280の測定に対応しています。I2Cアドレス0x76のものを「BME280」、0x77のものを「BME280#2」と表記します。
各拡張基板の対応は以下の表のとおりです。ケーブルで接続するタイプは、Rasbperry Piの発熱の影響を受けずに測定できます。
拡張基板 | BME280 (0x76) | BME280#2 (0x77) |
---|---|---|
RPZ-PIRS | 別売り ケーブルで接続 | 非対応 |
RPZ-IR-Sensor (端子実装済 外付センサーセット) | 付属 ケーブルで接続 | 付属 基板に実装 |
RPZ-IR-Sensor (端子未実装) | 別売り ケーブルで接続 | 付属 基板に実装 |
RPi TPH Monitor | 付属 ケーブルで接続 | 別売り ケーブルで接続 |
RPZ-CO2-Sensor | 別売り ケーブルで接続 | 非対応 |
I2C有効化
センサーとはI2Cで通信しますので、以下の記事を参考にI2Cを有効化して下さい。
インストール
センサー制御ソフトウェア「cgsensor」をインストールするには、以下のコマンドを実行します。ターミナルを開き、$に続くコマンドを実行して下さい。最新版へのアップグレードも同じコマンドで可能です。
ソースコードやサンプル、ライセンスはGitHubページに公開しています。
$ sudo python3 -m pip install -U cgsensor --break-system-packages
エラーが出る場合は最後のオプションを指定せずにお試しください。
$ sudo python3 -m pip install -U cgsensor
インストールが完了すると、cgsensorコマンドが使用可能になります。以下のように-hオプションを指定すると、使い方が画面に表示されます。
$ cgsensor -h
測定
bme280コマンドで、I2Cアドレス0x76のBME280で測定を行い、その結果を表示します。
$ cgsensor bme280
BME280 測定
温度[°C]: 29.4
湿度[%]: 57.7
気圧[hPa]: 1023.4
-aオプションを指定するとI2Cアドレス0x77のBME280#2で測定を行い、その結果を表示します。
$ cgsensor bme280 -a
BME280#2 測定
温度[°C]: 36.6
湿度[%]: 34.6
気圧[hPa]: 1024.1
全センサーの一括測定、記録
cgsensorには対応する全センサーを一括で測定したり、連続で測定、結果をファイルに保存するといった、便利な機能が備わっています。cgsensor all … コマンドを利用します。
1回のみの測定
オプションを指定しない場合は、対応するセンサーを検出して測定し、結果を表示します。
$ cgsensor all
BME280
温度[°C]: 29.3
湿度[%]: 59.1
気圧[hPa]: 1022.1
BME280#2
温度[°C]: 34.0
湿度[%]: 41.1
気圧[hPa]: 1022.8
TSL2572
明るさ[lux]: 149.3
SCD41
CO2濃度[ppm]: 472
連続測定
-cオプションに続けて秒数を指定すると、指定した秒数おきに測定を連続して行い、時刻と測定結果を画面に表示します。値の変化を画面上でモニターしたい場合に便利です。Ctrl+Cで終了します。
$ cgsensor all -c 10
時刻, BME280 温度[°C], BME280 湿度[%], BME280 気圧[hPa]
2021/10/12 23:21:54, 29.1, 58.4, 1023.5
2021/10/12 23:22:04, 29.1, 58.5, 1023.5
2021/10/12 23:22:14, 29.0, 58.6, 1023.5
2021/10/12 23:22:24, 29.0, 58.8, 1023.5
...
ファイルに保存
-fオプションに続けてファイル名を指定すると、時刻と測定結果をcsv形式で保存します。結果の保存や解析に便利です。
ファイルが既に存在する場合は、最後の行に追記していきます。追記する場合は、センサーの増減が無いようにして下さい。増減があると列がずれる場合があります。
以下のコマンドで、1回測定を行って結果を「sensor_log.csv」に保存します。
$ cgsensor all -f sensor_log.csv
-cオプションを併用すると、一定間隔で測定を行い、かつ結果を「sensor_log.csv」に保存していきます。
$ cgsensor all -c 60 -f sensor_log.csv
きっちりと決まった時刻に測定したい場合はcronなどの定期実行ソフトウェアと連携させて下さい。以下を/etc/crontabに追記すると、毎時0分、10分、20分、30分、40分、50分に測定を行い、結果を/home/pi/sensor_log.csvに保存します。
*/10 * * * * pi cgsensor all -f sensor_log.csv
設定ファイルの編集方法が分からない場合は、以下の記事を参考にして下さい。
Pythonパッケージの利用
これまでコマンドラインツールでセンサーを制御する方法について解説しました。一方、ご自身のPythonプログラムからセンサーを使いたい場合は、cgsensorパッケージを利用することで簡単に制御することができます。
1度だけ測定して結果を表示するサンプルコードを用意しています。
インポート
使用前の準備として、cgsensorパッケージをインポートしておきます。
import cgsensor # インポート
BME280クラス
BME280の機能はBME280クラスにまとめられています。まずは以下のようにインスタンスを作成します。
bme280 = cgsensor.BME280(i2c_addr=0x76) # BME280制御クラスのインスタンス, i2c_addrは0x76/0x77から選択
測定
BME280クラスの各種メソッドや変数にアクセスしてセンサーを制御できます。
ここではforcedで1回測定します。このメソッドは、
- 測定実行
- ADCレジスター読み出し
- コンペンセーションレジスター読み出し
- 実際の気温、湿度、気圧を計算
という一連の測定の処理を全て行ってくれます。
forcedが正常に完了すると、temperature、humidity、pressure変数にそれぞれ結果が入るので、それを画面に表示しています。
bme280.forced() # Forcedモードで測定を行い, 結果をtemperature, pressure, humidityに入れる
print('気温 {}°C'.format(bme280.temperature)) # 気温を取得して表示
print('湿度 {}%'.format(bme280.humidity)) # 湿度を取得して表示
print('気圧 {}hPa'.format(bme280.pressure)) # 気圧を取得して表示
例外
センサーが接続されていない場合も含め、センサーとの通信に失敗するとIOError例外が発生します。必要に応じて処理して下さい。
その他の機能
その他のメソッド等を利用すると、より細かい制御も可能です。ソースコードのコメントおよび、BME280データシートも合わせてご確認下さい。
注意事項
本ページの内容は、BME280に関する資料をIndoor Corgiが解釈した結果、および実際に動作させた結果をもとに記載しております。センサーに関する情報の正確性を保証するものではありません。
センサーについての情報はBosch社の資料をご確認下さい。
まとめ
センサー制御ソフトウェア「cgsensor」を利用して、BME280センサーで気温、湿度、気圧を測定する方法の解説は以上です。Pythonプログラムや他のソフトウェアと連携することで、センサーを使った様々なシステムを簡単に実装することができます。
また、「RPZ-PowerMGR」拡張基板と組み合わせると、指定した時刻だけ起動して測定することもできます。モバイルバッテリーを使って、電源の確保できない環境でのセンシングも可能になるので、検討してみてはいかがでしょうか。
SCD41 CO2センサーとラズパイで二酸化炭素濃度を測定する
Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、SCD41 CO2センサーで二酸化炭素濃度を測定したり、センサーの校正や設定を変更する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定や記録ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。
ラズパイで赤外線制御 (家電、エアコン、照明、テレビなどを制御するホームIoT)
Pythonとpigpioを使ってRaspberry Piで赤外線の送受信を行う方法について解説しています。サンプルプログラムを用意しているので、簡単に受信、登録、送信動作をさせることができるほか、データ解析も可能です。赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。
RPZ-RC-Servo (Raspberry Pi用 サーボモータードライバー)
RCサーボモーターを制御できるRaspberry Pi(ラズパイ)用拡張基板です。モーターの角度(位置)を指示すれば、自動で目標までモーターを動かしてくれます。ものを動かしたり回転させるシステムが実現できます。Raspberry Piへ電力を供給する機能もあり、単一電源でシステムを構成できます。