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

# はじめに
こちらは
[Arduino と Raspberry Pi の違い](https://qiita.com/KZ2/items/5e0e79f84e4dd26bd373)
の個別記事で、BME280 で　温度、湿度と気圧を取得する。

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

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

# 接続
```config

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

# Hardware

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

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

```bash
$ sudo apt-get install i2c-tools
```

## 検出
```bash
sudo i2cdetect -y 1
```

## data読み出し

```bash
$ 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)

```bash

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

実行してみる。

```bash

$ 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が必要となるので、別途インストールする。

```bash
$ sudo pip install smbus2
```

## 動作テスト

```bash
$ python bme280_sample.py 
temp : 21.29  ℃
pressure : 1010.82 hPa
hum :  58.51 ％
```

## 連続表示

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

```python:bme280_sample.pyの最後の方

if __name__ == '__main__':
        try:
            while True:
                readData()
                time.sleep(1)
        except KeyboardInterrupt:
                pass
```

差分はこれだけ。

```bash

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

実行のログ

```bash
$ 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 ％

```
このあと、繰り返し