
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 ピンアサイン
秋月電子さんの AE-BME680 をピンアサインを以下のように接続しました。
Raspberry Pi Zero 側でプルアップ、プルダウンされているようなので J1 ジャンプ(短絡)は、かけていません。
I2C で通信しますが単独で使用するので I2C アドレスも初期(オープン)のままにします。
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
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 公式のデータシートに重要なことが記載されています。
私は、無知、無学、無教養なのでデータシートの中身が理解できません。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