まず 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 データの扱いに地味にハマってなかなかうまくいかなかった。