まなびサイエンス

気温・湿度・気圧センサ モジュールを使う

カバーイメージ

 I2C 接続の温度・湿度・気圧センサ モジュール BME280 を RaspberryPi に接続して実験してみました。このセンサ一つで気温・湿度・気圧を測定できるので、環境測定ステーションを作ったり、湿度や気圧の変化から天気予報プログラムを作ったりできるかもしれません。

結線

 センサの核心部分は Bosch 製 BME280 というチップで、SparkFunスイッチサイエンスAmazon などで取扱いがあります。私の場合、Amazon で購入して 1 個 550 円と格安の中国発送でしたが、SparkFun の商品写真と一見して同じ基板のモノが届きました*1
 このセンサ一つで、気温・湿度・気圧を測定でき、I2C または SPI で接続できます。今回、RaspberryPi とは I2C で接続します。

  • センサ: 3.3V ⇔ RasPi: 3V3 … BME280 の最大定格電圧は 4.25V ですので、5V を印加すると壊れます。
  • センサ: SCL ⇔ RasPi: GPIO3(SCL)
  • センサ: SDA ⇔ RasPi: GPIO2(SDA)
  • センサ: GND ⇔ RasPi: GND
No content

動作確認とデータ読み出し

 結線が済んだら、コマンドラインから幾つかコマンドを叩いて動作確認を行います。

### バスに接続されたスレーブを一覧して、センサのアドレスを調べます
$ i2cdetect -y 1 ⇒ センサのアドレスは 0x77
...

 コマンドを直接叩いて、幾つかデータを読んでも良いのですが、仕様書のデータ書式を見るとデータの変換が結構面倒くさそうな感じです。そこで、とりあえず公開されている Python スクリプトを使ってセンサの出力値を表示してみます。
 センサ ボードのアドレスのデフォルト値は 0x77 ですが、ダウンロードしたスクリプトのアドレスが 0x76 となっているので実行前に忘れずに修正しておきます。

$ wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bme280.py
$ vi bme280.py ⇒ センサのアドレスを修正
$ python bme280.py
Chip ID : 96
Version : 0
Temperature : 25.69 C
Pressure : 994.860273742 hPa
Humidity :62.921917407 %

 このスクリプトを少し修正して、1 日分のセンサ出力値を収集し、グラフにしてみました(Fig.1 )。赤が気温、緑が湿度、青が気圧です。小数点以下までかなり細かい数値が出力されていますが、事実上、意味があるのは小数点第 1 位までくらいだと思いますが、日常生活の環境測定には十分です。


Fig.1

メモ

  • 基盤上のアドレス選択ジャンパ(ADR):デフォルトで、アドレス 1 側がショート、アドレス 0 側がオープン=0x77。アドレス 1 側のパターンをカットして、アドレス 0 側をハンダなどでショートさせてやれば 0x76 に変更できる。
  • 基盤への加工を嫌う場合、SDO 端子を GND に落としても良い。SDO 端子は 4.7k の抵抗でプルアップされているので、この時、プルアップ抵抗を通じて 0.7mA 程度の電流が無駄になる。
  • 基盤上の I2C 用プルアップ設定ジャンパ(I2C PU):デフォルトで、SDASCL が 4.7k で 3.3V にプルアップされている。RaspberryPi で使用する場合、RaspberryPi 側で既にプルアップされているので、本来はジャンパをカットして使用すべきだが、そのままでもとりあえず使えてはいる。通信エラーが頻発するなどの際には疑ってみること。
  • 基板上の チップ選択ジャンパ(CS):デフォルトでプルアップされており、I2C が選択されている。パターンをカットして、CS 端子を GND に落とせば SPI 通信モードになる。
  • 標準大気圧(1 気圧)とは、海面上で 1013.25hPa。大気圧は、標高 10m の上昇に対して、概ね 1hPa 下がる。実験中、天気が良いのに気圧が 990hPa あたりを出力していてビックリしたが、丹波高原にある自宅の標高を加味すると、概ね気圧配置図と同じくらいの気圧が測定できているようだった。

リンク

  1. *1 SparkFun の商品写真と回路パターンが同じで、基板が青色のもの

カテゴリー

過去ログ