まず BME280 と BMP280 というよく似たやつがあるので注意…。 BMP は気圧と気温しか測れない。

初期設定

リセット直後の BME280 は圧力・温度・湿度すべての測定がスキップかつスリープモードになっているので、まず測定開始するように設定する必要がある。いくつかモードがあるが、とりあえず NORMAL モードにして定期的に値を更新するようにしとけば良い。

なお用途に応じて最適と思われる設定がデータシートで示されているので、それに従えば良い。

FORCED モード (ワンショットモード) で測定する場合、9. Appendix B: Measurement time and current calculation を参照して tmeasure を求める必要がある。FORCED モードは MODE に書きこむと測定が始まり、終わると SLEEP モードになるという挙動をする。

Raspberry Piで動作確認する場合

ググるとほかにも実装が出てくるが、まずはリファレンス実装で試すのが筋。

https://github.com/BoschSensortec/BME280_driver

メーカーがリファレンス実装をつくってる。

$ git clone git@github.com:BoschSensortec/BME280_driver.git
$ cd BME280_driver
$ gcc -DBME280_FLOAT_ENABLE -I. -o foo examples/linux_userspace.c bme280.c
$ ./foo /dev/i2c-1 
Temperature, Pressure, Humidity
temp 31.10, p 100605.10, hum 48.97
temp 31.10, p 100605.08, hum 49.01
temp 31.11, p 100605.11, hum 48.97
temp 31.12, p 100605.34, hum 48.98
temp 31.13, p 100605.46, hum 49.02

Rubyでの実装

https://github.com/cho45/ruby-i2c-devices/blob/master/lib/i2c/device/bme280.rb

に書いた。calibration データの扱いに地味にハマってなかなかうまくいかなかった。

  1. トップ
  2. tech
  3. 気圧・温度・湿度 I2C センサー BME280