購入したのは、秋月電子の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 10x76のところが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 件のコメント:
コメントを投稿