概要
温湿度気圧計BME680をRaspberry Pi 4で使用します。 ラズパイにあるデバイスツリー機能を使用します。適切に設定すると、温湿度気圧の値をテキストファイルとして取り出すことができます。
環境
- Raspberry Pi 4 Model B Rev 1.5
BME680の設定
電子部品自体は、秋月電子がモジュールとして使いやすいようにしてくれているキットを使用しています。
商品詳細ページの「マニュアル」より引用(ae-bme680.pdf)
- J2(画像赤枠右)にはんだ付けしジャンプ(短絡)させるかどうかでI2C接続のアドレス設定を0x77か0x78に変えることができます。
- ラズパイ側にプルアップ抵抗がついているため、J1(画像赤枠左)をジャンプ(短絡)する必要はありません。
- これに関しては若干自身がありません。。。最初勝手がわからずJ1をジャンプさせて接続していたのですが、特に通信エラーにはならず動作しました。
接続方法
下記にラズパイとBME680の接続例を示します。あらかじめこのように接続しておきます。
ラズパイ(PIN) | BME680 |
---|---|
GPIO1(3V3 power)(Pin1) | VIN |
GPIO3(Pin5) | SCL |
GPIO2(Pin3) | SDA |
Ground(Pin9) | GND |
ラズパイ側の設定
自動的にマッピングする機能を使用します。/boot/overlays/README
に詳細説明があります。
I2Cの有効化
「Raspberry Pi Software Configuration Tool」を起動して設定を変更します。
sudo raspi-config
- 3 Interface Options > I4 I2C
- 「Would you like the ARM I2C interface to be enabled?」と聞かれるので
<Yes>
を選択
設定
下記設定を/boot/firmware/config.txt
に追記します(最終行で良い)。J2をジャンプさせなかった場合(=0x77)は下記のようにします。
dtoverlay=i2c-sensor,bme680,addr=0x77
J2をジャンプさせた場合(=0x78)は下記のようにします(デフォルト設定で問題なし)。
dtoverlay=i2c-sensor,bme680
上記設定を済ませ、ラズパイを再起動します。
sudo reboot
BME680の値を取得
BME680から温湿度気圧を取得します。ディレクトリの場所が、I2Cのアドレスによって異なるので注意します。
# addr=0x77 の場合
cd /sys/bus/i2c/devices/1-0077/iio:device0
# addr=0x78 (デフォルト)の場合
# cd /sys/bus/i2c/devices/1-0078/iio:device0
cat in_humidityrelative_input
# 相対湿度[%]
# 出力例 51.497000000
cat in_pressure_input
# 気圧[hPa]
# 出力例 1015.370000000
cat in_resistance_input
# 出力例 150765
# 抵抗値らしい、よくわかってない。他データと組み合わせて空気の清浄度を測ることができる?
cat in_temp_inputgggee
# 気温 [ミリ℃]
# 出力例 27820
# 単位はミリ℃で格納されているようなので、1000で割る(27820 -> 27.820℃)
精度と校正
実際に数日測定してみて、精度を確認しました。
手元にSwitch-botの温湿度計があり、BME680の隣において数値を比較しました。微妙に数値が異なっていました。BME680のほうが、湿度は+5%、温度は+1℃程度高く表示されているようです。気圧は気象庁のデータと照らし合わせてみたところ、ざっくりあってそう。今度はグラフにして可視化してみる予定です。