気温、湿度、気圧、二酸化炭素濃度をブラウザで
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



