実践-温度・湿度・大気圧の情報収集システム

投稿日: 作成者: ussy

前回の実習で構築した標記システムを修正して使いやすいものを目指します。
気象センサーの演習のブログ

前回作ったプログラムで排出されるデータ

  1. ファイルのデータを加工しにくい
    →エクセルで利用できるように変更する
  2. 気象データの小数点以下の桁が多すぎて見にくい
  3. タイムスタンプが見にくい(現在+8時間といった標記になっている)

それぞれ改善していきたいと思います。

  1. カンマ区切りデータを出力できるようにする。
    1. プログラムを下記のように修正
       kisyo_data = open(‘kisyo_data.txt’,’a’)
              kisyo_data.write(“,”)
              kisyo_data.write(str(temp))
              kisyo_data.write(“,”)
              kisyo_data.write(str(humi))
              kisyo_data.write(“,”)
              kisyo_data.write(str(press))
              kisyo_data.write(“\n”)
              kisyo_data.close()
    2. 結果
      カンマ区切りで出力された
    3. 追加
      出力ファイルをCSVファイルに変更
      ※そのままエクセルで開けるようにする

      kisyo_data = open(‘kisyo_data.txt’,’a’) →

      kisyo_data = open(‘kisyo_data.csv‘,’a’)
  2. 気象データの小数点桁数を減らす
    1. round関数を使って小数点を制限する
      round(値,桁数)

      今回2桁のみ取得したいので

      temp = round(temp,2)

      となる。

    2. 結果
  3. タイムスタンプが見にくい
    1. タイムスタンプのズレ(8時間)を修正
       dt_now = datetime.datetime.now() + datetime.timedelta(hours=8)

       kisyo_data.write(dt_now.strftime(“%Y/%m/%d,%H:%M:%S”))
      ※ついでに日付と時間もカンマ区切りにした
  4. 完成したプログラム
    import wiringpi as pi
    import time
    import bme280
    import datetime
    bme280_addr = 0x77
    LED_PIN = 23
    pi.wiringPiSetupGpio()
    pi.pinMode(LED_PIN,pi.OUTPUT)
    i2c = pi.I2C()
    weather = bme280.bme280( i2c, bme280_addr)
    weather.setup()
    count = 0
    while True:
        #デフォルトカウント1800
        if count == 1800:
            (temp,humi,press)  = weather.get_value()
            print(“温度”,temp,”度 湿度”,humi,”%気圧”,press,”hPa”)
            kisyo_data = open(‘kisyo_data.csv’,’a’)
            dt_now = datetime.datetime.now() + datetime.timedelta(hours=8)
            kisyo_data.write(dt_now.strftime(“%Y/%m/%d,%H:%M:%S”))
            kisyo_data.write(“,”)
            temp = round(temp,2)
            kisyo_data.write(str(temp))
            kisyo_data.write(“,”)
            humi = round(humi,2)
            kisyo_data.write(str(humi))
            kisyo_data.write(“,”)
            press = round(press,2)
            kisyo_data.write(str(press))
            kisyo_data.write(“\n”)
            kisyo_data.close()
            count = 0
        pi.digitalWrite(LED_PIN,pi.LOW)
        time.sleep(1)
        pi.digitalWrite(LED_PIN,pi.HIGH)
        time.sleep(1)
        count = count + 1

  5. 結果
    1. CSVファイルにしたことでエクセルから直接開くようにした
    2. 各データがカンマ区切りとなった。
    3. グラフ化も簡単
  6. まとめ
    今回はここまでですが、この他に

    1. 測定時間を確実に1時間毎にすること
      ※カウントを1800にしたことで、なんとなく1時間毎計測していますが微妙にずれています。
    2. 再起動がかかった時など自動的にプログラムが稼働するようにすること

      が課題としてありますので、今後機会があったらチャレンジします。
      crontabあたりでの処理になるでしょうなぁ・・・