Help us understand the problem. What is going on with this article?

40: Raspberry Pi3 で BME280 温度、湿度、気圧計センサー

More than 1 year has passed since last update.

はじめに

こちらは
Arduino と Raspberry Pi の違い
の個別記事で、BME280 で 温度、湿度と気圧を取得する。

目的

Projectが動作する環境を把握するため、温度湿度を取得したい。気圧はおそらく不要であるが、取得できるのでしてみた。

考え方

Raspberry Pi3はI2C接続ができる。I2C接続ができるセンサーのBME280を持ってくる。
I2C は、BUSなのでそれぞれのセンサーはAddressを持っている。それを見つけて、そこにアクセスする。
データシートを見て、データを取得する。データ取得にはいろいろと細かい作法があるが、 Libraryがあるのでそれを利用する。

接続

- I2C (SCL, SDA)
- VCC 3.3V
- GND

Hardware

Address 0x76 が表示されている。SCL, SDA の接続を逆にしていたら、Address は表示されない。

$ 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 --   

software

I2Cは有効にしておく。

I2C package installation

$ sudo apt-get install i2c-tools

検出

sudo i2cdetect -y 1

data読み出し

$ i2cdump -y 1 0x76
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 7f 70 89 6f a4 7f 9d 06 34 6f 98 68 32 00 b3 93    ?p?o????4o?h2.??
90: 2e d6 d0 0b 0e 1b e9 ff f9 ff ac 26 0a d8 bd 10    .??????.?.?&????
a0: 00 4b b3 00 00 00 00 00 00 00 00 00 33 00 00 c0    .K?.........3..?
b0: 00 54 00 00 00 00 60 02 00 01 ff ff 1f 60 03 00    .T....`?.?..?`?.
c0: 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    `...............
e0: 00 6d 01 00 13 07 00 1e 50 41 ff ff ff ff ff ff    .m?.??.?PA......
f0: ff 00 00 00 00 00 00 80 00 00 80 00 00 80 00 80    .......?..?..?.?

library

Switch Science のものは、MIT Licenseで配布されている。
(https://github.com/SWITCHSCIENCE/samplecodes/tree/master/BME280)

$ wget https://github.com/SWITCHSCIENCE/samplecodes/tree/master/BME280/Python27/bme280_sample.py

実行してみる。

$ python bme280_sample.py 
Traceback (most recent call last):
  File "bme280_sample.py", line 3, in <module>
    from smbus2 import SMBus
ImportError: No module named smbus2

実行すると、smbus2が必要となるので、別途インストールする。

$ sudo pip install smbus2

動作テスト

$ python bme280_sample.py 
temp : 21.29  ℃
pressure : 1010.82 hPa
hum :  58.51 %

連続表示

今度は、連続で1秒おきにデータを表示するように変更する。while True:でloopにして、time.sleep(1)を追加しただけである。

bme280_sample.pyの最後の方
if __name__ == '__main__':
        try:
            while True:
                readData()
                time.sleep(1)
        except KeyboardInterrupt:
                pass

差分はこれだけ。

$ diff bme280_sample.py BME280.py 143a144
>             while True:
144a146
>                 time.sleep(1)

実行のログ

$ python BME280.py 
temp : 21.39  ℃
pressure : 1010.92 hPa
hum :  58.64 %
temp : 21.38  ℃
pressure : 1010.91 hPa
hum :  58.64 %
temp : 21.39  ℃
pressure : 1010.90 hPa
hum :  58.65 %
temp : 21.38  ℃
pressure : 1010.91 hPa
hum :  58.65 %

このあと、繰り返し

KZ2
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away