Raspi+BME280で温度・湿度・大気圧を計測しブラウザで見る
暑い夏がやってきました。わがシャックもPC群の廃棄熱で結構温度があがります。
換気扇は2か所設置し24時間稼働していますが、結構温度はあがっています。
以前、秋月電子で販売しているraspberyy piで使える温度センサーを使って無線室の温度を測定しましたが
現在は、未稼働です。
このときは、
ADT7410温度センサーモジュールを使用しグラフ化してブラウザで見れるようにしたのですが
結構苦労したのを記憶しています。
今回は、ネット上に情報があふれているBME280センサーを使ってブラウザで見れるようにすることにしました。
しかし、グラフ化までの情報は結構あるのですが、ブラウザで見れるようにした情報はあまりないようです。
手持ちで以前購入していた秋月電子のBME280があったのですが、スイッチサイエンスにも違うBME280があったので
こちらの方も購入して、シャックと寝室の2か所を測定することにしました。
1.部品の入手
(1)モジュールとジャンパワイヤ(メスーメス)
計測には、Raspiを使うのですがGPIOと接続するのにジャンパワイヤ(メスーメス)が必要です。
部品となる BME280モジュールは、秋月電子とスイッチサイエンスで購入しました。
値段が秋月電子が570円も安いのですが、ネット情報には自分の熱で誤差が出るみたいなことも書いていました。
ただ、そんなに精密な測定をするわけでもないし安いに越したことがないと判断すれば秋月電子のモジュールでも
十分ではないでしょうか。
同じ個所で測定したら個体差もあるかもしれませんが、スイッチサイエンス製のほうが、若干正確のような
気がしました?
@モジュールの種類
秋月電子 BME280 1080円
秋月電子 ジャンパワイヤ(メスーメス) 330円
スイッチサイエンス BME280 1650円
スイッチサイエンス ジャンパワイヤ(メスーメス) 501円
ARaspberry pi
温・湿度・大気圧の計測が目的ですのでRaspi Zero WHで十分です。
私は、スイッチサイエンスさんで購入しました。
Raspberry pi Zero WH 1848円
Adafruit Raspberry Pi Zero用ケース 682円
このケースは、透明で見た目もきれいでお勧めです。
2.OSのインストールと初期設定
使用するラズパイは、rapi Zwero WHを利用しましたが、初期設定とWifi設定までは、
有線LANとUSBがたくさん使えるRaspi3B+で行いました。
wifi設定とSSH接続ができるようになれば、あとは、Zero側で設定していきます。
今回使用したRaspbianのバージョンです。
Raspberry Pi OS (32-bit) with desktop
Image with desktop based on Debian Buster
Version:May 2020
Release date:2020-05-27
Kernel version:4.19
Size:1128 MB
Wifi設定は、下記2か所
sudo nano /etc/dhcpcd.conf
自分のネットワークワーク環境にあわせてIPアドレスを固定化します。
interface wlan0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
使用するWifiのSSIDと暗号化キーを設定
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="[SSID名]"
key_mgmt=WPA-PSK
psk="[暗号化キー]"
}
sudo raspi-configで、SSHとi2cが使えるようにします。
ここまで出来たらSDカードをRaspi Zeroに差し替えてSSHで以下作業していきます。
ここあたりまでの設定については、先人が紹介してくれているホームページをご覧ください。
今回参考にした下記ホームページです。大変参考になりました。
IT女子のラズベリーパイ入門奮闘記
Raspberry PiとBME280モジュールで自動で温度・湿度・気圧を測定してグラフ化する
今回は、こちらのからあげさんのホームページを参考にしてグラフ化までは行いました。
プログラム等の配布、心から感謝です。
3.モジュールをラズパイに接続
raspberry pi Zero WHのGPIOとBME280モジュールを接続します。
ラズパイの電源は、切ってから作業してください。
秋月電子とスイッチサイエンスで購入したモジュールでは、接続方法が違いますし
モジュールのはんだ付けとジャンパーなども必要になります。
先に紹介しているホームページをご覧ください。
秋月電子 J3をはんだづけしてジャンパします。
スイッチサイエンス 裏面ははんだ付けする必要はありません。なんとなくはんだ付けしたくなりますがけどね。
ラズパイのGPIOは、
ここを参考にしてください。
(1)接続
@秋月電子 BME280
VDD 1(+3V3)
GND 6(GND)
CSB
SDI 3(GPIO2/SDA1)
SDD 9(GND)
SCK 5(GPIO3/SCL1)
Aスイッチサイエンス BME280
SDO 9(GND)
SCK 5(GPIO3/SCL1)
SDI 3(GPIO2/SDA1)
CSB 17(+3V3)
GND 6(GND)
VCore 1(+3V3)
(2)動作テスト
ラズパイとモジュールの接続ができたらラズパイを起動します。
起動したら、SSHで接続します。
sudo raspi-config
5 Interfacing Options Configure connections to peripherals
P5 I2CをEnableする
今回インストールしたRaspbianは、 i2c-toolsおよびpython-smbusが既にインストールされているので
接続がうまくいっているか下記コマンドで確認します。
sudo 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 --
このような表示がでれば、接続はできています
4.温度・湿度・気圧を測定してグラフ化する
からあげさんのホームページ通り進めれば、特に問題なくグラフ化できます。
(1)pythonのサンプルプログラムで温度・湿度を取得します
cd
git clone https://github.com/SWITCHSCIENCE/BME280.git
cd BME280/Python27/
python bme280_sample.py
このコマンドを実行すると1回目は、下記のようなエラーが出ます。
pi@Pitemp:~/BME280/Python27 $ 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
上記エラーが出ますので、下記のようにして bme280_sample.pyを修正します。
sudo nano bme280_sample.py
3行目を修正
- from smbus2 import SMBus
+ from smbus import SMBus
smbus2を smbusに修正して再確認します。
pi@Pitemp:~/BME280/Python27 $ python bme280_sample.py
temp : 25.66 ℃
pressure : 1003.40 hPa
hum : 61.65 %
こういう表示が出れば測定ができています。\(^o^)/
(2)からあげさんが開発されたグラフ化ソフトなどをインストール
@開発ソフトのインストール
cd
git clone https://github.com/karaage0703/denpa-gardening
下記コマンドを実行すると~/depa-gardening/sensor_data/sensor_data.csvという
測定データが記録されたCSVファイルができます。
python ~/denpa-gardening/get_sensor_data.py >> ~/denpa-gardening/sensor_data/sensor_data.csv
これをcrontab -eで10分おきに取得するようにします。
最初起動するとエディターを何を使うか聞いてきます。慣れたnanoを使います。
$ crontab -e
no crontab for pi - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]:
Enter
*/10 * * * * python ./denpa-gardening/get_sensor_data.py >> ./denpa-gardening/sensor_data/sensor_data.csv
これは、viコマンドで操作して保存してください。
Aグラフ作成ソフトgnuplotをインストール
cd
sudo apt install gnuplot
下記コマンドで~/denpa-gardening/sensor_data下にグラフ化されたpngファイルができます。
~/denpa-gardening/make-graph.sh ~/denpa-gardening/sensor_data/sensor_data.csv
できているか確認
pi@Pitemp:~/denpa-gardening/sensor_data $ ls -l
合計 40
-rw-r--r-- 1 pi pi 4254 7月 4 22:20 sensor_data.csv
-rw-r--r-- 1 pi pi 6856 7月 4 22:22 sensor_data_humid.png
-rw-r--r-- 1 pi pi 7168 7月 4 22:22 sensor_data_pressure.png
-rw-r--r-- 1 pi pi 6959 7月 4 22:22 sensor_data_temp.png
-rw-r--r-- 1 pi pi 8049 7月 4 22:22 sensor_data_temp_humid.png
ちゃんとできているようですが、中身を見るには、ちょっとした工夫が必要になりますので
後程紹介します。今回は、とりあえずPNGファイルが出来ていることを確認します。
上記コマンドも一定時間にグラフ化するようにcrontab -eで設定します。
crontab -e
# m h dom mon dow command
*/09 * * * * python ~/denpa-gardening/get_sensor_data.py >> ~/denpa-gardening/sensor_data/sensor_data.csv
*/10 * * * * ~/denpa-gardening/make-graph.sh ~/denpa-gardening/sensor_data/sensor_data.csv
Bsamba導入(確認用なので導入しなくても問題ありません)
温度計測に必要ありませんがちゃんとグラフ化できているかなどをWindowsパソコンから確認できるように
入れてみました。
sudo apt install samba
共有フォルダーを作成
sudo mkdir /home/pi/share
samba設定
sudo nano /etc/samba/smb.conf
一番下に追加
[share]
comment = Share
path = /home/pi/denpa-gardening/sensor_data #にすると/home/piと同期するので便利
public = yes
read only = no
browsable = yes
force user = pi
とりあえず再起動
sudo reboot
PCからraspi Zeroの/home/shareを見ると
drwxr-xr-x 2 root root 4096 7月 4 11:43 share
root以外書き込めないのでpiでも書き込めるようにします。
sudo chown pi share
sudo chgrp pi share
drwxr-xr-x 2 pi pi 4096 7月 4 11:43 share
できたpngファイルをshareにコピーします。
これをWindowsマシンからアクセスしてグラフpngを確認します。
cp /home/pi/denpa-gardening/sensor_data/*.png /home/pi/share
sambaの導入は、ブラウザで見れるようにするのには直接関係ありませんので
作業は飛ばしても問題ありません。
Capachを導入
いよいよメインのブラウザで見れるようにapachを導入します。
外部には公開しませんのでセキュリティーは特に考慮していません。
sudo apt install apache2
ブラウザのアドレス欄にraspbery piのIPアドレスをいれると
appache2のDefault Pageが出れば成功です。
cd /var/www/html
ホームページ関係のファイルが置かれる場所です。
pi@Pitemp:/var/www/html $ ls -l
合計 12
-rw-r--r-- 1 root root 10701 7月 4 11:59 index.html
このindex.htmlに上記画面が出るように書かれています。
とりあえず、index.htmlの名前を変更
sudo mv index.html index2.html
/var/www/htmlディレクトリーにroot以外でも書き込めるようにします。
cd ~
sudo chmod a+w /var/www/html
次に、/home/pi/denpa-gardening/sensor_data下にできたpngファイルを
/var/www/htmlに定期的にコピーするようにシェルスプリクトを作成します。
nano copy.sh
#!/bin/sh
cp /home/pi/denpa-gardening/sensor_data/*.png /var/www/html
実行権をつけます。
sudo chmod a+x copy.sh
crontab -eで定期的に/var/www/htmlに各種PNGgファイルをコピーするようにします。
時間は、1分ずつづらして動作するようにしています。
crontab -e
# m h dom mon dow command
*/09 * * * * python ~/denpa-gardening/get_sensor_data.py >> ~/denpa-gardening/sensor_data/sensor_data.csv
*/10 * * * * ~/denpa-gardening/make-graph.sh ~/denpa-gardening/sensor_data/sensor_data.csv
*/11 * * * * /home/pi/copy.sh
Dホームページindex.htmlを作成します。
ホームページ作成用のソフトを使えば見栄えなど良いものができます。
その場合は、FTPサーバー(vsftpd)のインストールが必要になります。
今回は、グラフをPCやスマホで見るだけですのでホームページ作成用ソフトをもっていなくても作れるように
参考になるindex.htmlを公開しておきます。
エディターを使って、私のコールサインを自分のコールサインにとあとは測定場所名を変更すれば
とりあえずそれなりのホームページになると思います。
なお、私もHTML言語を理解しているわけではないのでホームページ作成ソフトで作ったindex.htmlを
利用できるようにしました。時間を表示するのは、私の持っているホームページ作成ソフトではできなかったので
ネットを探して入れ込んでみました。ホームページでリアルに動かすにはJAVAが必要だそうです。(^^;
index.zip
解凍してできたindex.htmlファイルを修正して/var/www/htmlにおいてください。
cd /var/www/html
wget http://xrf608.xreflector-jp.org/pue/index.zip
unzip index.zip
あとは、ブラウザからIPアドレスを入れればグラフが見れるはずです。
E2か所以上にセンサーを設置してホームページにボタンをつけて切り替えてみたい場合
下記ファイルをダウンロードして、自分のコールサインや置いた場所の名前を変更して
index.htmlとして/var/www/htmlにおいてください
index1.zip
cd /var/www/html
wget http://xrf608.xreflector-jp.org/pue/index1.zip
unzip index1.zip
ボタン追加のHTMLは、真ん中付近の下記の箇所です。
</script>
</@WMEmbeddedHTML> <br clear="all">
<br clear="all">
<b> </b><font size="4"><b>シャックの温度&湿度&気圧はこちら</b></font> <span class="WM_BUTTON"><a href="http://192.168.1.38"><img src="ro000.png" alt="" height="46" width="46" border="0"></a></span><br clear="all">
<br clear="all">
IPアドレスは、切り替えたいサーバのアドレスに書き換えてください。
<img src="ro000.png"というボタンアイコンが必要です。好きな写真を同じ名前にしておいてもらえばいいですが、
次のファイルをr0000.zipをダウンロードして解凍すればro000.pngになります。
/var/www/htmlにおいてもかまいません。
ro000.zip
cd /var/www/html
wget http://xrf608.xreflector-jp.org/pue/
unzip ro000.zip
前回にくらべればだいぶ簡単にブラウザで見れる環境を構築できました。
E比較してみました。
使ってみて感じたのは、秋月電子のBME280よりスイッチサイエンスのBME280の方が正確のような気がします。
あくまでも個人の感想です。(TV業界風 (^^;
秋月電子BME280
温度 2度くらい 湿度 5%くらい差があります。
スイッチサイエンスBME280
温度 ほぼ同じくらい 湿度 6%くらい差があります。
時計の温湿度と手前の温湿度計は、ほぼ同じ値を示しています。
どれが正確なのかわかりませんのでどっちもどっちかもしれませんが、温度がより近い方がうれしいですね。
(2020.07.05)