2015年12月29日火曜日

Raspberry Pi 2 + BOSCH BME280で気圧温湿度を記録してみました

夏頃に念願のRaspberry Piを購入しました。


Raspberry Pi 2を買ってみましたの記事で書いた奴です。
あれからどうしてるか?というと、イントラネットで使うシステムを色々作りこんで使っていました。

Raspberry Piの本来の用途は教育用コンピュータで、イギリスのラズベリーパイ財団という所が設計開発しています。


本体は基盤むき出しの1ボードマイコンになっていて、パソコンで見慣れたコネクタ類の他に3つほど見慣れないモノが基板上にあります。
基板上の白い2つの端子がディスプレイ端子とカメラ端子になっていて、対応液晶画面(タッチパネル付含む)やカメラをフィルムケーブルで接続すると使えます。

今回は残りのもう1つ、40ピンヘッダのGPIO端子を使った事をやりたいと思います。

このGPIO端子は色々な事が出来るのですが、今回はその中の1つであるI2Cを使ってBOSCH BME280を接続。そして、そのセンサーから気圧・温度・湿度を読み込んで記録したいと思います。

色々販売されている中から選んだモジュール基盤はコレ。



これを選んだ理由は

  • I2Cに特化しているため余計なピンがなくコンパクト
  • 5V対応で万が一過電圧になっても壊れにくい
  • 基盤に固定するための穴がある

製品名にはArduino用となっていますがRaspberry Piでも問題なく使えます。


Amazonから発注したところ発送元は中国で、書留の国際郵便で10日ほどで届きました。
写真の通り、モジュール基盤1枚とヘッダーピン4本が付いています。
これだけだとRaspberry Piに接続できないので、マルツ秋葉原2号店にて必要なモノも買ってきました。


ジャンパワイヤ メス-メス 20cm と ライトアングルピンヘッダ 20ピン

ジャンパワイヤは、Raspberry PiとBME280モジュールのピンヘッダをつなぐためのケーブルです。
ライトアングルピンヘッダは、L字に曲がったピンヘッダ。付属のピンヘッダだと基盤に対して垂直に挿さないとならなく使い勝手が悪かったのと、これ自体は数十円程度とあまり高いモノではなかったためこちらを使う事にしました。


ライトアングルピンヘッダをモジュール基板にハンダ付けするとこんな感じになります。
太い白線間が1cm(破線で5mm)。ピンヘッダは2.54mmピッチ。
いかに小さいかがわかるかと思います。


Raspberry Piとモジュール基盤をジャンパワイヤでつなぎます。
Raspberry Pi側のGPIOは1 3.3V、3 SDA、5 SCL、6 GNDの4本を使います。
これをモジュール基板側のVIN(3.3V)、GND、SCL、SDAの4本と対になるよう間違えないようにつなぎます。
カマボコ板に養生テープで止めているのは、モジュール基板が軽すぎてジャンパワイヤに振り回され取り回ししずらかったので仮止めしました。

ハードウェアの準備はコレで終わり。
次はソフトウェアの準備です。
Raspberry PiのOSはRASPBIAN JESSIE(Ver.4.1)を使っています。今回はコレを前提に書きます。
まず、I2Cを有効にします。やり方はコマンドラインから
$ sudo raspi-config
と打ち、メニュー画面から「8 Advanced Options」→「A7 I2C」→「はい」→「はい」と選び有効にします。
そして下記コマンドで再起動します。
$ sudo reboot
次にi2c-toolsをインストールします。
$ sudo apt-get install i2c-tools
インストールが終わったら、BME280がちゃんと接続されているか確認するためコマンドを打ちます。
$ i2cdetect -y 1


こんな感じで76と表示されていればOKです。
I2CにはアドレスというのがありBOSCH BME280は0x76か0x77が選択できます。
DIYmall BME280は0x76になるように設計されているためコレで正解です。
なお、このアドレスは後で使うツールの設定に必要なので覚えておいてください。

次にセンサーから数字を読み取るプログラムをインストールします。
今回はスイッチサイエンス様がGitHubで公開されてるPythonのモノを使います。
GitHubからプログラムをダウンロードします。
$ wget https://raw.githubusercontent.com/SWITCHSCIENCE/BME280/master/Python27/bme280_sample.py
そしたら、実行!
$ python bme280_sample.py

こんな感じで表示されれば成功です。

ところで、このままだと見たい時に毎回このコマンドを叩かないとなりません。
そこで、うちではこんな感じで見られるようにしています。


cronで1時間毎にデータベースに記録し、同時にgnuplotでグラフを作成。
それをWeb APIで取得出来るようにし、Java Scriptで表示させています。

BOSCH BME280で取得した数字をこのように見るだけでも良いのですが、さらに踏み込んでこれをトリガーに色々な活用方法が考えられます。
俗に言うIoTという奴です。

購入してから半年でやっとそれらしい事を始めたのですが、11月にはRaspberry Pi Zeroが$5という破格の値段で発売されました。
日本ではまだ発売されておらず、また1ヶ月経った現在でも本国のイギリスでは品薄が続き入手困難のようです。
日本で買える日はいつになることやら・・・欲しい!