2015年9月16日水曜日

RaspberryPiでラズベリー栽培 環境センサBME280

部品が届いたのでさっそく温度測定。
購入したのは、秋月電子のBME280センサモジュール
http://akizukidenshi.com/catalog/g/gK-09421/
他にも2つほど購入しましたが、それはまた別の機会に。

注意 この記事はBME280を使うために試行錯誤した過程ですので、
結果だけ知りたいかたはこちらへ→https://pitslaboratory.blogspot.jp/2018/05/raspberrypii2cc.html

センサモジュールのジャンパ設定

I2Cで接続するので、J3にハンダを盛ります。
J1、J2はI2Cのプルアップ抵抗ですが、RaspberryPi基板がすでにプルアップされている(らしい)ので、オープンのままです。

接続

センサモジュール - RaspberryPi基板
VDD  - 3V3PWR
GND  - GND
NC(J3経由でVDD)
SDI(SDA) - I2C1SDA         
SDO - GND
SCK(SCL) - I2C1SCL
センサーモジュールの3番ピンは、J3を通ってVDDに接続されてるのでオープンにしておく。
SDOはI2CのデバイスIDで、GNDに接続すると0x76になりVDDに接続すると0x77になる。 今回は0x76で。      



RaspberryPi側の操作

まず、raspi-configでI2Cがイネーブルになっているか確かめます。
> sudo raspi-config
8 Advanced optionを選択
A7 I2C → Enableに変更
Would you like the I2C kernel module to be loaded by default? → Yes

I2C-toolsをインストールします
sudo apt-get install i2c-tools

I2Cデバイス接続テスト

/usr/sbin/i2cdetect -y 1
0x76のところが76になっていれば、ちゃんと接続されています。

BME280のレジスタに値をセットする

BME280をコントロールするためのレジスタは3か所
0xF5 ONFIG     t_sb[2:0], filter[2:0], 2'b00
0xF4 CTRL_MEAS     osrs_t[2:0], osrs_p[2:0], mode[1:0]
0xF2 CTRL_HUM       5'b00000, osrs_h[2:0]

まずosrs_h,osrs_t,osrs_pにオーバーサンプリングレートを設定。
3'b000をセットするとOFFになります。
3'b001で x1, 3'b010でx2, 以下x4, x8, x16
たとえば、温度と湿度だけをサンプリングレートx1で測定したい場合、
osrs_t = 3'b001, osrs_h = 3'b001, osrs_p = 3'b000
とします。

とりあえず、3つのセンサをx1で設定します。
/usr/sbin/i2cset -y 1 0x76 0xF2 0x01 b
/usr/sbin/i2cset -y 1 0x76 0xF4 0x24 b

測定する

modeレジスタに2'b01をセットすると、Forcedモード(命令を受けて1回だけ測定する)で実行されます。
/usr/sbin/i2cset -y 1 0x76 0xF4 0x25 b
これで温度、湿度、気圧の測定結果がレジスタに入ってる筈です。

/usr/sbin/i2cdump -y 1 0x76

白く囲った部分が、気圧、温度、湿度の値なのですが‥
試しに気温のMSBとLSBを抜き取ってみると、
0x82 0x56
これを10進に変換すると、
33366

33度?w
いやまさかそんな
ちなみに別の温度計は24℃となっておりました。
どうやら変換が必要らしい。めんどくせぇ(´・ω・`)

秋月の添付資料はあまりにも情報が少なすぎるので、BOSCHからマニュアルを取ってきたほうがいいです。
http://ae-bst.resource.bosch.com/media/products/dokumente/bme280/BST-BME280_DS001-10.pdf
というわけで、I2Cを通してBME280のレジスタを直接覗くことはできました。温度が正しく表示されないので、別の方法でやってみます。

サンプルコードを使う

参考にしたHP http://qiita.com/masato/items/027e5c824ae75ab417c1
スイッチサイエンスさんが作ったPythonスクリプトらしいのですが、使えるので・・・(ごめんなさいスイッチサイエンスさん!そのうち買い物します!買い物しました!)

python-smbusをインストールします。
sudo apt-get install python-smbus

どこかに適当なディレクトリを作って、
wget https://raw.githubusercontent.com/SWITCHSCIENCE/BME280/master/Python27/bme280_sample.py

sudo python bme280_sample.py

あっさりと温度、湿度、気圧が表示されました(`・ω・´)

正常動作していることが確認できたので、次回はCなどからBME280を読む方法を試してみたいと思います。

リンク:I2CをCで使う



0 件のコメント:

コメントを投稿