BMP280温度センサー・その3
簡易目次
BMP280温度センサーのデータシートをダウンロードします。
メジャーな商品なので、「BMP280」と検索するとすぐに見つかります。ただメジャーすぎて色んなショッピングサイトがヒットしてしまいますが、こういう海外製品の公式ドキュメントを探したければ検索結果のうち全て英語で書いてあるページの最初にヒットするのが公式っぽいですね(経験則ですが)
BMP280のBOSCHの公式ページはPressure Sensor BMP280 | Bosch Sensortecここになります。スクロールしていくと、
こんな感じでデータシートのダウンロードができます。 自分がダウンロードしたのは2015/10作成のVersion1.15でした。
結構前の物なんですねぇ。後で触れますが、データシートの誤記が結構あります。もうバージョンアップはしないんでしょうか? さて、ドキュメントを読み進めましょう。まずは、RaspberryPiとつなぐのに何Vの電圧線をつなげればよいかです。一応Amazonの商品ページには「PowerSupply 1.8V-3.6V」と表記がありました。しかしこの商品ページ、BMP280の紹介なのに「湿度も測れるよ」とか書いてあってイマイチ信頼できません。なのでデータシートを確認します。
Page7に以下のような表記を見つけました。
なので、RaspberryPiの3.3Vの出力を使う事にします。
あと、BMP280はI2Cのアドレスとして0x76と0x77が使えるようです。切り替え方に関してはPage28で以下のようにありました。
SDOピンをグラウンドにつなげると0x76、VCCにつなげると0x77になるとの事でした。SDOピンは開放するとアドレスが未定義になるから開放しないでねともありました。
さてここまでドキュメントを読めば十分でしょう。Raspberry PiとBMP280を接続してみます。
RaspberryPi | BMP280 |
---|---|
pin#1 | VCC |
pin#6 | GND |
pin#3 | SDA |
pin#5 | SCL |
pin#9 | SDO |
と言う具合に結線していきます。
接続は以上になります。こんな簡単でよいのか?
続いて機器の接続を確認してみましょう。
Raspberry Pi の電源を入れ、SSHで接続します。sudoをいちいち打つのが面倒なので、自分はrootで作業します。
まずはI2Cのデバイスドライバーを確認してみましょう。
i2cdetect -l |
と入力してみます。すると
i2c-1 i2c bcm2835 (i2c@7e804000) I2C adapter |
と応答が返ってきます。
i2c-1が使えるようです。
ちなみに
ls-l /dev/i2c-1 |
とすると
crw-rw---- 1 root i2c 89, 1 Jan 3 00:36 /dev/i2c-1 |
とでるので、ドライバーがちゃんと読み込まれていることが分かります。この「/dev/i2c-1」はC言語でプログラムを組む際のデバイス名となるので、重要です。
次に接続されているデバイスを確認します。
i2cdetect -y 1 |
こんな感じで0x76番が認識されていることを確認できます。おお!簡単!
最後に内部データの読み取りを行ってみましょう。i2cの内部データにアクセスするコマンドとして「i2cget」と言うコマンドがあります。
BMP280のドキュメントを見ると、BMP280のメモリマップは以下のようになっています。
温度とか圧力とかは何も設定していないので、取れない可能性があるため、一番下にあるキャリブレーションデータを取得してみましょう。キャリブレーションデータの詳細は後に述べますが、0x88~0xA1までがキャリブレーションデータのようです。 試しに0x88のデータを取得してみます。
i2cget -y 1 0x76 0x88 |
これはi2c-1の0x76のデバイスの0x88のレジストリーデータを取得してねと言う意味になります。
自分のBMP280からは
0x47 |
という値が取れました。
どうやら通信も正常に行えているようです。
今まであきらめていたハードウェア接続がこんな簡単に出来るなんて、夢にも思いませんでした。ここからは自分の専門分野「ソフトウェア」になります。
ハードウェアは詳しくないので、説明が素人っぽくて申し訳なかったですが、ここからは本領発揮です。ただ、ちょっとマニアックなのと、長くなります。
コメント
コメントを投稿