0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Bosch BME280をRasPiにつなぐときの設定

Posted at

はじめに

おじさんは以前にBME280をESP32やらRasPiにつないでクラウドにデータをupload していました。今回、新たにセンサーを購入し、クラウドも刷新して作ろうと思ったのですが、humidity が0と読めず、悩みに悩みました。結果、購入したものがBMP280でhumidity を出力しない、似て非なるものだった、という落ちでした。(悲しい)

購入したのははるか昔なのだが、「安いので5個まとめ買い」をしてました。多分amazon で BME280と書かれていたのではと疑っています。(←自分で確認してみるか。。。)

せっかくなので、いろいろ見直した時の内容をメモしておきます。

Raspberry Piの I2Cの設定

配線の確認

I2Cで使うので、こんな感じ。

image.png

I2Cの設定確認

raspi-config でI2Cを有効にし、i2ctools をインストールします。

$ lsmod | grep i2c
i2c_bcm2835            16384  1
i2c_dev                16384  2
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
$ cat  /etc/modules | grep i2c
i2c-dev
$ cat /boot/config.txt | grep i2c
dtparam=i2c_arm=on

I2Cのbaudrate が dmesg で見れるらしいのだが、おじさんはできなかった。

I2Cのbaudrate を変えられるようなので変えてみた。この[記事]
(https://www.qoosky.io/techs/2316d68b2e)を参考に。
dtparam=i2c_baudrate=50000
を最終行に追加しました。50kということかな。

配線

当初は下記の記事を読み、pull-up 抵抗が必要かもと思いました。RasPi様は
内蔵している聞いていたので何もしていません。

おじさんはオシロ使えないので。

BME280と BMP280の区別

humidity が読めないのでわかる、というのは後付けの知識。
IDのregister を読むと明白です。以下は仕様書。
image.png

0x0Dを読んでみる。

from smbus2 import SMBus
bus_number  = 1
bus = SMBus(bus_number)
i2c_address = 0x76
bus.write_byte_data(i2c_address, 0xE0, 0xB6)
print("chip ID: ", hex(bus.read_byte_data(i2c_address, 0xD0)) )

哀しいことに私のところでの実行結果は

chip ID:  0x58

だった。

初期化の処理

初期化で実行するのは

  • 測定サイクルとオーバーサンプリングの設定
  • configuration parameter の読み込みです

測定サイクルとOversampling の設定

  • ODR (output data rate)は測定時間と待機時間から計算できる。例えば
    normal mode なら 1000[ms] / ( 11.5 + 62.5) [ms] = 13.51 [Hz]

その他の特性値

  • IIR filter の時定数、消費電流は ODRから計算できる。

config パラメータの読み込み

0x88から0xE7まで読みます。ここら辺はたくさんの実装例が転がっているので省略。

ソースコード

python でこんなのもあった。

まとめ

BME280 (Bosch)だと思ってhumidityを読もうとしたが、実はBMP280で読めなかった。確認するにはレジスタ値で chip ID を確認すればよい。

(2021/07/25)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?