BME680を使って気温・湿度・気圧・ガスを検出してみるよ!Raspberry Pi Zero WH

Raspberry Pi zero WH

Raspberry Pi Zero WH から BME680(Bosch Sensortec)センサーモジュールを使用して気温、湿度、気圧、ガス抵抗を検出してみる。

はじめに

記事内容につきましては、Sayabo の独自仕様や不備、不具合等が含まれる場合がございます。動作保証するものでは、ございませんので、ご参考にされる場合、自己責任にてお願いします。

BME680 の公式仕様については、「BME680」を参照願います。

準備するもの

Raspberry Pi Zero WH 本体の他に必要となるものを準備します。

  • BME680 センサーモジュール
  • ジャンパー線

今回は、秋月電子さんから購入しました BME680 センサーモジュールのピンアサインが VIN、SCL、SDA、GND の4つタイプのモジュールを使用しています。

他にも以下の PIMORONI さんのタイプが販売されています。同じ BME680 センサーでもピンアサインが VCC、GND、SDA / SDI、SCL / SCK、SDO、および CS の6つタイプも販売されています。

BME680

Amazon で探す

楽天市場 で探す

ピンアサインなどが異なる場合がありますので各メーカーや販売元の取扱説明書を遵守してください。

BME680 ピンアサイン

秋月電子さんの AE-BME680 をピンアサインを以下のように接続しました。

Raspberry Pi Zero 側でプルアップ、プルダウンされているようなので J1 ジャンプ(短絡)は、かけていません。

I2C で通信しますが単独で使用するので I2C アドレスも初期(オープン)のままにします。

AE-BME680 ピンアサイン
AE-BME680 Raspberry Pi Zero
名前 機能 pin 名前
VIN 電源入力 1 3.3V DC
SCL シリアルクロック 5 GPIO9 SCL1(I2C)
SDA シリアルデータ 3 GPIO8 SDA1(I2C)
GND グランド 9 Ground

Raspberry Pi Zero の I2C 設定

raspi-config から 「3 Interface Options」->「P5 I2C」->「Enable」に設定します。

$ sudo raspi-config

raspi-config

Raspberry Pi Zero には、i2c-tools が初期インストールされていますがもし、無ければインストールする。

$ sudo apt install i2c-tools

i2cdetect の簡易的な使い方

# デバイスの確認
$ i2cdetect -l

i2c-1   i2c        bcm2835 (i2c@7e804000)    I2C adapter

# 機能の確認
$ i2cdetect -F 1

Functionalities implemented by /dev/i2c-1:
I2C                              yes
SMBus Quick Command              yes
SMBus Send Byte                  yes
SMBus Receive Byte               yes
SMBus Write Byte                 yes
SMBus Read Byte                  yes
SMBus Write Word                 yes
SMBus Read Word                  yes
SMBus Process Call               yes
SMBus Block Write                yes
SMBus Block Read                 no
SMBus Block Process Call         no
SMBus PEC                        yes
I2C Block Write                  yes
I2C Block Read                   yes

# アドレスの確認
$ 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: -- -- -- -- -- -- -- 77

簡単な BME680 センサーの使い方

BOSCH 公式のデータシートに重要なことが記載されています。

BME68x-Sensor-API

私は、無知、無学、無教養なのでデータシートの中身が理解できません。w

私、わかってないので本来、このような高度なセンサーを使うべきでは、ないかもしれませんが好奇心が先走り試したかったんです。

これからちょっとずつ理解していこうと思います。しらんけど(;・∀・)

データシートの中に「3.2.1 Quick Start」の章があるのですがこれもよくわかりません。

なので手っ取り早くデータを取得できそうなライブラリを探していたところ「PIMORONI」さんのドキュメントやライブラリがわかりやすそうなので使用してみました。

ドキュメント:Getting Started with BME680 Breakout

Python ライブラリ:bme680-python

$ python -m pip install bme680

ただし pip でインストールするとサンプルが取得されません。

Git の examples から個別にサンプルを取得します。

この中の「read-all.py」がとりま気温、気圧、湿度、ガス抵抗を取得してくれます。

$ python read-all.py

read-all.py - Displays temperature, pressure, humidity, and gas.

Press Ctrl+C to exit!

Calibration data:
par_gh1: -1
par_gh2: -10686
par_gh3: 18
par_h1: 710
par_h2: 1023
par_h3: 0
par_h4: 45
par_h5: 20
par_h6: 120
par_h7: -100
par_p1: 35372
par_p10: 30
par_p2: -10479
par_p3: 88
par_p4: 4398
par_p5: 96
par_p6: 30
par_p7: 25
par_p8: -536
par_p9: -3462
par_t1: 26335
par_t2: 26060
par_t3: 3
range_sw_err: 0
res_heat_range: 1
res_heat_val: 42
t_fine: 129312

Initial reading:
gas_index: 0
gas_resistance: 12946860.58570794
heat_stable: False
humidity: 50.298
meas_index: 0
pressure: 1011.9
status: 32
temperature: 25.26

Polling:
25.26 C,1011.90 hPa,50.31 %RH
25.27 C,1011.88 hPa,50.29 %RH,32569.977011869014 Ohms
25.31 C,1011.89 hPa,50.25 %RH,56425.162901832104 Ohms
25.34 C,1011.90 hPa,50.21 %RH,76815.62884472068 Ohms
25.38 C,1011.90 hPa,50.16 %RH,94710.31894724087 Ohms
25.41 C,1011.91 hPa,50.08 %RH,108908.17198237052 Ohms
25.45 C,1011.88 hPa,50.00 %RH,122621.29057641071 Ohms
25.48 C,1011.89 hPa,49.93 %RH,134107.7860511746 Ohms
25.51 C,1011.89 hPa,49.87 %RH,143777.3245261871 Ohms
25.54 C,1011.89 hPa,49.80 %RH,153388.77918161746 Ohms
25.56 C,1011.87 hPa,49.73 %RH,161213.20558720772 Ohms
25.59 C,1011.88 hPa,49.66 %RH,169363.4942910373 Ohms
25.62 C,1011.87 hPa,49.60 %RH,176130.89070490055 Ohms
25.64 C,1011.86 hPa,49.53 %RH,181868.03717203502 Ohms
25.67 C,1011.87 hPa,49.48 %RH,185797.96435759965 Ohms
~

ファイルへ書き出す場合

python read-all.py > bme680-data.txt

先ほど「とりま」と述べましたが出力されたデータを見ていただくとわかるのですが「ガス抵抗」が時間の経過と共に上がっていくんですね

理屈は、よくわからないのですがセンサーを暖めて?検出しているようです。なので暖まるまで時間差が生じるようです。

サンプルの中に「indoor-air-quality.py」プログラムがあります。

こちらは、プログラム実行から最初の5分間のガス抵抗を測定して最適なガス抵抗値とし IAQ(室内空気質)を測るというような内容です。

PIMORONI さんは、ハードもソフトも充実してますね!

とのことで瞬間的に正しい測定というよりか測定しっぱなしにして値を読み取るのが BME680 の使い方のようです。

いや~しかし、私には難しい(笑

今回は、ここまでです。

Was this helpful?

0 / 0

コメントを残す 0

Your email address will not be published.