2018-02-08

Raspberry Pi + 温湿度・気圧センサで室内環境監視をしてみる (その1)

Raspberry Pi を有効に活用するために、温湿度・気圧センサを買って遊んだ記録。

Web ブラウザで Raspberry Pi にアクセスすれば、状況を見られるようにするのが最終形態。



今回、温湿度・気圧センサとして BME280 搭載のセンサ「AE-BME280」を買ってみました。
電子工作をする皆様にはおなじみの、秋葉原の秋月電子通商で購入。

ネットでもコチラから購入可能。

同じものは手に入らないが、Amazon でも BME280 を採用しているセンサは手に入る。




今回秋月で購入したセンサはピンソケットを自力ではんだ付けする必要あり。
電子工作するなら必須だと個人的には思うので、購入をオススメしておきます!笑











サクサクっとはんだ付け。

マニュアルを読むと I2C 接続するためには、ジャンパ J3 を繋ぐ必要があるようなので、こちらもサクッと繋ぐ。
# はんだ付けしなくても、1 ピン (VDD) と 3 ピン (CSB / DNC) を繋げば (3 ピンに電源を繋げば) いいとのこと。繋いだ後に知った。 (ソース)



続いて Raspberry Pi と繋ぐ。
Raspberry Pi の電源は落とした状態 (電源アダプタを抜いた状態) で作業すること。

「3.3V」と「GND」は Raspberry Pi の GPIO ピン上に複数あるので、下図とは違う場所でももちろん OK。

で、準備は完了!



Raspberry Pi の電源を入れて、ターミナルで下記コマンドを入力し、i2c-tools を導入。
$ sudo apt-get update
$ sudo apt-get install i2c-tools

続けて、Raspberry Pi の設定を変更するために、下記コマンドを入力し、CLI インタフェース上で [5 Interfacing Options] - [P5 I2C] - <はい> と順に選択していきます。
$ sudo raspi-config

完了したら再起動します。
$ sudo reboot

起動してきたら、下記コマンドを入力して BME280 が正常に認識しているか確認します。今回 5 番ピンを GND に繋いでいるので、0x76 が表示されれば OK。
$ 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 --

続けて動作するか確認します。データっぽいのが取れていれば OK。
$ 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: 95 70 89 23 3e 40 81 06 de 6d 1c 67 32 00 fa 8f    ?p?#>@???m?g2.??
90: 02 d6 d0 0b 37 1d e9 ff f9 ff ac 26 0a d8 bd 10    ????7??.?.?&????
a0: 00 4b 69 00 00 00 00 00 00 00 00 00 33 00 00 c0    .Ki.........3..?
b0: 00 54 00 00 00 00 60 02 00 01 ff bf 1f 71 03 00    .T....`?.?.??q?.
c0: 00 00 27 ff 00 00 00 00 01 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 6c 01 00 13 0a 00 1e 8e 41 ff ff ff bf ff bf    .l?.??.??A...?.?
f0: ff 00 01 00 27 a0 00 4d c0 00 7c 3f 00 67 85 80    ..?.'?.M?.|?.g??

ただこれでは、全くなんの情報かわからなくて使い物にならないので、先人の方の知恵をお借りして作成した、シェバンの追加と出力部を JSON 化した Python スクリプトを使っていきます。


場所は適当ですが、今回は下記の場所においた前提で話を進めていきます。
/usr/local/bin/bme280.py

まず、実行権限を付与します。
sudo chmod +x /usr/local/bin/bme280.py

実行してみます。
/usr/local/bin/bme280.py

きっとこんな感じで表示されるはず。unixtime と datetime が日時、temperature、humidity、pressure がそれぞれ温度 [℃]、湿度 [%]、気圧 [hPa]。
{'unixtime': 1518100076, 'pressure': 993.524911189242, 'datetime': '2018-02-08T23:27:56.977726', 'temperature': 18.131616437766933, 'humidity': 36.12764677733577}



今回の目標としては、ブラウザでグラフとして時系列各情報を見られるようにしたいので、定期的に情報を取得するようにします。

使うコマンドは Linux ではおなじみの Cron。下記の編集コマンドを叩きます。
$ crontab -e

そして、下記文を追記します。意味としては 10 分おきに /usr/local/bin/bme280.py を実行するというもの。
*/10 * * * * /usr/local/bin/bme280.py /home/pi/bme280.json 144000
/usr/local/bin/bme280.py のあとの 2 引数は取得情報の書き込み先 (/home/pi/bme280.json) と情報保持件数の上限 (144000 件 = 10分おきに取得するので、100日分) を指定しています。
これら引数はお好みに合わせて指定してください。情報保持件数の上限を引数として渡さないときには、ストレージの空きがある限り書き込み続けますので、ご注意を。

しばらく放っておくと、勝手にいい感じに情報が取得できます。
$ cat /home/pi/bme280.json



とりあえずその1はこの辺で終了。
次は Node.js with Express & D3.js を使って Web ブラウザでグラフ表示できるようにしていきます!
お楽しみに♪

その2 へ!





0 件のコメント :

コメントを投稿