JR6PUE HOME PAGE

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> &nbsp;<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)