気温、湿度、気圧、二酸化炭素濃度をブラウザで
10分おきに測定している気温、湿度、気圧、二酸化炭素濃度をブラウザで確認できるようにしました。
保存しているCSVデータの最新の情報をブラウザで表示しています。WEBIOPiの仕組みを利用しています。
/usr/share/webiopi/htdocs/bme280/index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no"> <title>温度・湿度・気圧・二酸化炭素濃度の取得</title> </head> <body> <h4 align="center">温度・湿度・気圧・二酸化炭素濃度の測定</h4> <div align="center"> <table border="2"> <tr><th>日付</th><th><input type="text" id="day_text"></th><th> </th></tr> <tr><th>時刻</th><th><input type="text" id="time_text"></th><th> </th></tr> <tr><th>温度</th><th><input type="text" id="temp_text"></th><th>℃</th></tr> <tr><th>湿度</th><th><input type="text" id="humi_text"></th><th>%</th></tr> <tr><th>圧力</th><th><input type="text" id="pres_text"></th><th>hPa</th></tr> <tr><th>CO2</th><th><input type="text" id="CO2_text"></th><th>ppm</th></tr> </table> </div> <hr align='center'> <div align='right'>programed by ji3lvo</div> </body> </html>
/usr/share/webiopi/htdocs/bme280/styles.css
#day_text{ width: 5em; font-size: 2em; text-align:right; } #time_text{ width: 5em; font-size: 2em; text-align:right; } #temp_text{ width: 5em; font-size: 2em; text-align:right; } #humi_text{ width: 5em; font-size: 2em; text-align:right; } #pres_text{ width: 5em; font-size: 2em; text-align:right; } #CO2_text{ width: 5em; font-size: 2em; text-align:right; } body { background-color: #eddcbc }
/usr/share/webiopi/htdocs/bme280/javascript.js
// millisミリ秒ごとにデータを取得する関数 function getDataPeriodic(millis){ // responseにデータが格納されている var drawData = function(macro, args, response){ var data = response.split(','); $("#day_text").val(data[0]); $("#time_text").val(data[1]); $("#temp_text").val(data[2]); $("#humi_text").val(data[3]); $("#pres_text").val(data[4]); $("#CO2_text").val(data[5]); } // script.py内のgetData関数を実行。終了後にdrawTemp関数を呼ぶ webiopi().callMacro("getData", [], drawData); // millisミリ秒後に自分自身を呼び出す setTimeout(function(){ getDataPeriodic(millis); }, millis); } function initialize_webiopi(){ // webiopiの準備が終わってからstyles.cssを適用する applyCustomCss('styles.css'); // 2秒ごとに温度を取得して描画 getDataPeriodic(60000); // GPIOの状態を監視しない(自分で作成した関数で温度を定期的に取得するため) webiopi().refreshGPIO(false); } function applyCustomCss(custom_css){ var head = document.getElementsByTagName('head')[0]; var style = document.createElement('link'); style.rel = "stylesheet"; style.type = 'text/css'; style.href = custom_css; head.appendChild(style); }
/usr/share/webiopi/htdocs/bme280/script.py
#coding: utf-8 #import mh_z19 #import smbus import datetime import webiopi #import time #import os def data_read(): dir_path = '/home/pi/bme280-data/' today=datetime.datetime.now() filename = today.strftime('%Y%m%d') + 'New' #if not os.path.exists('/home/pi/bme280-data'): # os.makedirs('/home/pi/bme280-data') f = open(dir_path+filename+'.csv','r') data=f.read().splitlines() f.close() data_new=data[-1].split(',') daytime = data_new[0].split() data_str="{},{},{:.2f},{:.2f},{:.2f},{}".format(daytime[0],daytime[1],float(data_new[1]),float(data_new[2]),float(data_new[3]),int(data_new[4])) return data_str #print(data_read()) def setup(): webiopi.debug("Script with macros - Setup") def loop(): webiopi.sleep(1) def destroy(): webiopi.debug("Script with macros - Destroy") @webiopi.macro def getData(): data_str = data_read() return data_str