広告

記事

2016年7月21日

【自由研究下調べ】BME280用AdafruitのPythonライブラリをテスト

BME280 センサーモジュール

 昨日記事で、スイッチサイエンスのBME280センサーモジュールのサンプルコードについてぽつりと書いたのですが、AdafruitのBME280モジュール用のプログラムコードを使って見ました。

温度・湿度・気圧計測センサーモジュール

 BME280センサーモジュールを使って、気温・湿度・気圧を測定する「気象ステーション」を作成しようとしています。

参考としたのは、「Raspberry Pi One Room Weather Station」という記事です。

この記事にウェザーステーション用のプログラムが掲載されているのですが、センサーモジュールはAdafruit社のBMP085センサーモジュールを利用してます。

ここにプログラムコードが掲載されています:

「One Room Weather Station」プログラムコードを計測部分だけ切り出す


import sys, time
from datetime import datetime, timedelta

import Adafruit_BME280 import *

# Create I2C bus & BMP085 Objects
sensor = BME280(mode=BME280_OSAMPLE_8)

# Inherit from Daemon class
class measure:
    # implement run method
    def run(self):
         # record event times
        lastTimeUpd = datetime.now()
        lastSensorReading = datetime.now()
        lastTweet = datetime.now()
        lastLog = datetime.now()

        #initialise temperature and pressure
        t = 0
        p = 0
        h = 0

        # main loop
        while True:
            # Calculate elapsed time since last events
            now = datetime.now()
            timeElapsed = now - lastTimeUpd
            sensorElapsed = now - lastSensorReading

            # Time to read temp & pressure
            if sensorElapsed > timedelta(seconds=5):
                t = sensor.readTemperature()
                p = (sensor.readPressure()/100)
                h = sensor.readHumidity()
                lastSensorReading = now

            print 'Temp      = {0:0.3f} deg C'.format(t)
            print 'Pressure  = {0:0.2f} hPa'.format(p)
            print 'Humidity  = {0:0.2f} %'.format(h)

            time.sleep(0.3)

if __name__ == "__main__":
    a = measure()
    a.run()

オリジナルコードはDaemon動作用となっていますから、シンプルなコマンドで動作するようにじゃんじゃん削除しました。

実行すると

$ python measure.py

Temp      = 35.788 deg C
Pressure  = 1010.40 hPa
Humidity  = 49.93 %
Temp      = 35.788 deg C
Pressure  = 1010.40 hPa
Humidity  = 49.93 %
Temp      = 35.788 deg C
Pressure  = 1010.40 hPa
Humidity  = 49.93 %

BMP085用のライブラリ読み込み、計測部分を置き換えします。

BMP085/BME280用のPythonライブラリを使っているところは、ほんの数行ですから簡単にわかると思います:

import Adafruit_BME280
...
sensor = BME280(mode=BME280_OSAMPLE_8)
...
      t = sensor.read_temperature()
      p = (sensor.read_pressure()/100)
      h = sensor.read_humidity()
...
      print 'Temp      = {0:0.3f} deg C'.format(t)
      print 'Pressure  = {0:0.2f} hPa'.format(p)
      print 'Humidity  = {0:0.2f} %'.format(h)

昨日のブログでは、「BME280のPythonライブラリもあると良いなと・・・」つぶやいていました。

Adafruit社のBME280 pythonライブラリ

そこで、グーグル先生に聞いて探してみたら・・・

Githubでコードが公開されていましたよ!

Github:Adafruit_Python_BME280

Adafruit_BME280.pyをi2cアドレスが違いがあったのでアドレスだけ0x76へ変更すると動きました。

メモ:BME280搭載センサーモジュールのアドレスについて
- スイッチサイエンス社のWebページの仕様欄に記載があります

  • I2Cアドレス
    • SDO LOW : 0x76
    • SDO HIGH: 0x77
$ python Adafruit_BME280_Example.py 
Timestamp = 171355.000
Temp      = 33.468 deg C
Pressure  = 1011.36 hPa
Humidity  = 55.14 %

サンプルコードはとても短く、小中学生でも理解できると思いますがどうでしょう?

from Adafruit_BME280 import *

sensor = BME280(mode=BME280_OSAMPLE_8)

degrees = sensor.read_temperature()
pascals = sensor.read_pressure()
hectopascals = pascals / 100
humidity = sensor.read_humidity()

print 'Timestamp = {0:0.3f}'.format(sensor.t_fine)
print 'Temp      = {0:0.3f} deg C'.format(degrees)
print 'Pressure  = {0:0.2f} hPa'.format(hectopascals)
print 'Humidity  = {0:0.2f} %'.format(humidity)

スイッチサイエンス社が公開している、BME280センサーモジュールのサンプルpythonスクリプトをclassへ書き換えるつもりだったのですけど・・・必要なくなっちゃいました。

目指せ!One Room Weather Station

 Adafruit社のBME280 pythonライブラリを使って、(スイッチサイエンス社で販売している)BME280センサーモジュールで温度・湿度・気圧を計測出来るようになりました。

LCDへの表示機能はあったほうが良いと思うのですが、部品代がかかります。

(小中学生の夏休みの自由研究からは、LCD表示機能は削除したほうがいいかもしれません)

また、ツィートなどの機能も削って、単純に計測とSqlite3データベースへの保存するプログラムにして

「夏休みの自由研究:気象観測」

というレポートの内容ではどうでしょう。

グラフ作成のプログラムは、One Room Weather Stationにあるプログラムを同様に利用します。

研究予算について

研究予算について
ここで、中学生の自由研究予算として適切か考えますね。
Raspberry Pi + BME280センサーモジュールで6000円程度

それに、USB電源、microSDカード、ジャンパワイヤー、ブレッドボードなどが必要でこれらを合わせると1万円くらい。

かなりの研究予算が必要:1万円程度

中学生の夏休みの自由研究で、研究予算1万円はちょっと高すぎる気がします。

Raspberry Piの販売価格は4000円もします、教育用器材として考えて高いと思います。 個人的にはRasperry Piを1000円〜2000円程度で販売してくれることを期待したいです。

もっと安く出来る方法が無いか考え直しが必要かな。

動かしたら、データを収集して分析です!

 「自由研究」でして工作では無いんですね、研究ですので計測したデータを分析しなくてはなりません。

データを分析するためには、グラフなどのように変化の様子がわかりやすいように加工します。

グラフ作成とデータの確認:

  1. 計測が出来るようになったら、1〜2時間連続して温度・湿度・気圧データを計測します。
  2. 計測したデータは、データベースへ保存しておきます。
  3. プログラムを使ってデータからグラフを作成します。

データが保存されることと、グラフに出来ることが確認できたら1〜2日間動作させて変化の様子を見ます。

短日テスト:

  1. 1〜2日間連続動作
  2. グラフ作成
  3. 不具合があれば調べて改善

ここで問題なければ、1周間程動作させてみます。

もし問題があれば、修正・変更・改善後にもう一度1〜2日間動作させて確認してから1周間の動作テストしましょう。

1周間連続動作テスト:

  1. 1週間分のデータが保存されていることを確認
  2. グラフを出力して変化の様子を確認します

問題がなければ、ここから連続稼働させます。

毎週計測データをグラフにして日々の変化の様子や1週間毎の変化を比較したりしてみましょう。

ゲリラ雷雨や台風などの現象が起こった場合に、データやグラフでどのような変化が見られたかなど何か発見があるかもしれません。

0 件のコメント:

コメントを投稿