I2C 接続の温度・湿度・気圧センサ モジュール BME280 を RaspberryPi に接続して実験してみました。このセンサ一つで気温・湿度・気圧を測定できるので、環境測定ステーションを作ったり、湿度や気圧の変化から天気予報プログラムを作ったりできるかもしれません。
センサの核心部分は Bosch 製 BME280 というチップで、SparkFun やスイッチサイエンス、Amazon などで取扱いがあります。私の場合、Amazon で購入して 1 個 550 円と格安の中国発送でしたが、SparkFun の商品写真と一見して同じ基板のモノが届きました*1。
このセンサ一つで、気温・湿度・気圧を測定でき、I2C または SPI で接続できます。今回、RaspberryPi とは I2C で接続します。
結線が済んだら、コマンドラインから幾つかコマンドを叩いて動作確認を行います。
### バスに接続されたスレーブを一覧して、センサのアドレスを調べます $ 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 位までくらいだと思いますが、日常生活の環境測定には十分です。
ADR
):デフォルトで、アドレス 1 側がショート、アドレス 0 側がオープン=0x77。アドレス 1 側のパターンをカットして、アドレス 0 側をハンダなどでショートさせてやれば 0x76 に変更できる。I2C PU
):デフォルトで、SDA と SCL が 4.7k で 3.3V にプルアップされている。RaspberryPi で使用する場合、RaspberryPi 側で既にプルアップされているので、本来はジャンパをカットして使用すべきだが、そのままでもとりあえず使えてはいる。通信エラーが頻発するなどの際には疑ってみること。CS
):デフォルトでプルアップされており、I2C が選択されている。パターンをカットして、CS 端子を GND に落とせば SPI 通信モードになる。