はじめに
こちらは
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)を追加しただけである。
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 %
このあと、繰り返し