ラズパイと温湿度、気圧センサー(BME280)で測定結果をコンソールに表示するプログラム
Contents
BME280
Raspberry Pi 3 B+に温湿度気圧センサー(BME280)を接続して温湿度、気圧を測定してみた時の備忘録。
購入した時は以下のような状態なのではんだ付けをする必要があった。
はんだ付けの画像は超下手くそなので割愛させて欲しい。
もう少し練習をしないと人に見せられる状態にはならない。。。
コネクタ
コネクタは写真の上から、
- Vcc:3.3~5.0V
- GND:GND
- SCL:I2C SCL
- SDA:I2C SDA
にそれぞれRaspberry Piのピンに接続する。
スペック
スペックは以下の通り。
インタフェース | I2C(最大3.4MHz) |
電源電圧 | 3.3~5V(DC) |
測定範囲 |
|
最小単位 |
|
測定誤差 |
BME280は以前に試したDHT11やDHT22と比較して温湿度の他に気圧も測定する事ができる 測定誤差はDHT22と比較すると湿度はBME280の方が精度が良いが温度は下回っている 詳しくは上記のリンク先のスペックで比較してみて欲しい |
I2Cアドレス |
|
購入したセット
BME280は単体では無く下記の0.96インチのディスプレイモジュール、Wi-Fiモジュールまで含まれたセット品を購入した。
Wi-Fiとディスプレイモジュールが一緒になったセット商品は品切れになっていた。
Raspberry Piなので正直Wi-Fiモジュールは不要だったのだがセットで安かったので思わず購入してしまった。
いずれディスプレイモジュールやWi-Fiモジュールは試してみたいと思うが今回は温湿度気圧センサーのみを試してみる。
回路図
事前準備
I2Cを有効にする
Raspberry Piのメニューから設定、Raspberry Piの設定、インターフェイスタブでI2Cを有効にする。
I2C(Inter-Integrated Circuit)はシリアル通信のひとつでマスタ(今回はRaspberry Pi)に対して複数のスレーブ(今回はBME280)を接続する事ができる。
またマスターからスレーブへクロック信号を送るSCLに対してデータ入出力用のSDAの2本の信号線でデータ通信を行う。
またセットで購入した小型ディスプレイモジュールをスレーブとして接続して温湿度、気圧の結果をディスプレイに表示を行っている(別記事)。
モジュールインストール
PythonからI2Cを制御するのに必要なモジュールを以下のコマンドでインストールする。
sudo apt-get update
sudo apt install -y python-smbus
sudo pip install smbus2
Raspberry PiからI2CをPythonで制御するモジュールはpython-smbusが多い様だがBME280ではsmbus2を使用していた。
smbus2はpython-smbusパッケージと同じ構文だがゼロから設計されており、機能拡張を目指して作成されているあった。
詳細についてはこちらを参照して欲しい。
尚、上記コマンドでsmbus2が正常にインストールされれば、
Successfully installed smbus2-0.3.0
のメッセージが表示される(バージョン番号は変わる可能性あり)
接続アドレスの確認
Raspberry PiのLXTerminalから以下のコマンドで接続アドレスを確認する。
sudo i2cdetect -y 1
表示結果より0x76である事が分かる。
サンプルプログラム
プログラムの入手
githubに公開しているSWITCH SCIENCEのサンプルプログラム(bme280_sample.py)をRaspberry Piにコピーして実行する。
プログラムソースはここでは掲載しないので上記のリンク先を見て欲しい。
確認と修正
適当なディレクトリにコピーしたbme280_sample.pyをThonny Python IDEで開いて実行するのだが実行前に何点か確認&修正事項がある。
プログラム7行目の i2c_address = 0x76 が前述の接続アドレスと一致している事を確認する。
続いてこのサンプルプログラムはPython2.7ベースなのでPython3では95行目、103行目、117行目のprint文の構文がPython3ではシンタックスエラーになってしまうので修正する。
修正前:print "pressure : %7.2f hPa" % (pressure/100)
修正後:print ("pressure : {:7.2f} hPa".format(pressure/100))
補足説明
以下、サンプルプログラムのざっくりとした補足説明。
調整パラメーター
21~59行目のget_calib_param関数では調整パラメーターを取得している。
調整パラメーターは製造中にデバイスの不揮発性メモリーに書き込まれている値で温湿度、気圧の取得値を補正するためのパラメーター値が格納されている。
データの取得
61~71行目のreadData関数にてF7h~FEhのアドレスから温度、圧力、湿度のデータをまとめて取得している。
温湿度、気圧の計算
73~95行目のcompensate_P関数で気圧、97~103行目のcompensate_T関数で温度、105~117行目のcompensate_Hで湿度をget_calib_param関数で取得した補正値とreadData関数で取得した値から計算している。
初期処理
120~135行目のsetup関数は初期処理。
メイン処理
142~144行目がメインの処理。
readData関数を呼び出している。
実行結果
F5で実行するとtemp(温度)、pressure(気圧)、hum(湿度)が出力される。
以上で今回の記事は終了とする。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
このサイトを参考にBME 280を動かそうとしていますが、動きません。エラー等して、モジュールsmbus2が not found になってしまいます。
Linuxターミナルで、インストールしたはずなのに。返答いただければ幸いです
堀内信哉さん
コメントありがとうございます。
sudo pip install smbus2
のインストール終了時のメッセージは何が表示されましたか?
正常にインストールされれば、
Successfully installed smbus2-0.3.0
等と表示されるはずです(インストールバージョン番号は変わる可能性あり)
またpip show smbus2でインストールしたモジュールを確認できます。
こちらの表示結果はどうですか?
AMAZONで温湿度気圧センサー私も買いました。使い方参考になりました。
コメントありがとうございます。
お役に立てたようで何よりです。?