前回の実習で構築した標記システムを修正して使いやすいものを目指します。
気象センサーの演習のブログ
前回作ったプログラムで排出されるデータ
- ファイルのデータを加工しにくい
→エクセルで利用できるように変更する - 気象データの小数点以下の桁が多すぎて見にくい
- タイムスタンプが見にくい(現在+8時間といった標記になっている)
それぞれ改善していきたいと思います。
- カンマ区切りデータを出力できるようにする。
- プログラムを下記のように修正
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()
- 結果
カンマ区切りで出力された
- 追加
出力ファイルをCSVファイルに変更
※そのままエクセルで開けるようにするkisyo_data = open(‘kisyo_data.txt’,’a’) →kisyo_data = open(‘kisyo_data.csv‘,’a’)
- プログラムを下記のように修正
- 気象データの小数点桁数を減らす
- round関数を使って小数点を制限する
round(値,桁数)今回2桁のみ取得したいので
temp = round(temp,2)となる。
- 結果
- round関数を使って小数点を制限する
- タイムスタンプが見にくい
- タイムスタンプのズレ(8時間)を修正
dt_now = datetime.datetime.now() + datetime.timedelta(hours=8)kisyo_data.write(dt_now.strftime(“%Y/%m/%d,%H:%M:%S”))
※ついでに日付と時間もカンマ区切りにした
- タイムスタンプのズレ(8時間)を修正
- 完成したプログラム
import wiringpi as piimport timeimport bme280import datetimebme280_addr = 0x77LED_PIN = 23pi.wiringPiSetupGpio()pi.pinMode(LED_PIN,pi.OUTPUT)i2c = pi.I2C()weather = bme280.bme280( i2c, bme280_addr)weather.setup()count = 0while True:#デフォルトカウント1800if 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 = 0pi.digitalWrite(LED_PIN,pi.LOW)time.sleep(1)pi.digitalWrite(LED_PIN,pi.HIGH)time.sleep(1)count = count + 1
- 結果
- CSVファイルにしたことでエクセルから直接開くようにした
- 各データがカンマ区切りとなった。
- グラフ化も簡単
- CSVファイルにしたことでエクセルから直接開くようにした
- まとめ
今回はここまでですが、この他に- 測定時間を確実に1時間毎にすること
※カウントを1800にしたことで、なんとなく1時間毎計測していますが微妙にずれています。 - 再起動がかかった時など自動的にプログラムが稼働するようにすること
が課題としてありますので、今後機会があったらチャレンジします。
crontabあたりでの処理になるでしょうなぁ・・・
- 測定時間を確実に1時間毎にすること