<!DOCTYPE html>
<html>
<head>
<title>temp</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<nav>
<h1>temp</h1>
</nav>
<div>
<p>
<textarea><%= value %></textarea>
<%# valueで温度テータを受け取る %>
</p>
</div>
<%# ----測定スイッチ追加--- %>
<div>
<a href="/shot">測定</a>
</div>
<%# ----測定スイッチ追加--- %>
</body>
</html>
pi@raspberrypi:~/temp_rec $ sudo vim app.js
const fs = require('fs'); //ファイルを読み込むfsの準備
const express = require('express'); //サーバーを立てるexpressの準備
const app = express(); //expressの装備
const ejs = require('ejs'); //ejsブラウザ表示用ファイルの準備
app.use(express.static('public')); //静的ファイル(画像や表示画面設定するファイル)のファルダ指定
app.use(express.urlencoded({extended: false}));
app.engine('ejs',ejs.renderFile); //ejsを指定
// app.get('/',)を書き直し
app.get('/', (req, res)=> {
res.render('temp.ejs', {value:""});
});
// '/'を'/shot'に書き換え:測定のリクエストをここ「app.get('/shot')」で受け取る'
app.get('/shot', (req, res) => {
let data_th = [];
let temp = () => {
let buff = fs.readFileSync('/sys/bus/w1/devices/28-3c01b556b5e5/w1_slave');
let data_sp = buff.toString().split("=");
data_th.push(data_sp.pop());
let data_dig = (data_th.map(Number))/100;
data_th = [];
let data_rou = (Math.round(data_dig))/10;
return data_rou;
}
res.render('temp.ejs',{value:temp()}); // ブラウザに表示する画面用ファイルの指定と、value:を使って温度データを画面と一緒にしてrenderで画面をブラウザに送る
});
app.listen(3000); // 3000番ポートでサーバーを立てる
$ node app.js
const fs = require('fs');
const express = require('express');
const app = express();
const ejs = require('ejs');
app.use(express.static('public'));
app.use(express.urlencoded({extended: false}));
app.engine('ejs',ejs.renderFile);
let data_th = [];
let intervalId = ""; //追加 setIntervalの停止操作用ID
let tm = 3000; //追加 連続測定の間隔時間設定 (ミリ秒)
// 追加 tempを関数の外へ出す
let temp = () => {
let buff = fs.readFileSync('/sys/bus/w1/devices/28-3c01b556b5e5/w1_slave');
let data_sp = buff.toString().split("=");
data_th.push(data_sp.pop());
let data_dig = (data_th.map(Number))/100;
data_th = [];
let data_rou = (Math.round(data_dig))/10;
console.log(data_rou); //追加
}
app.get('/', (req, res)=> {
res.render('temp.ejs', {value:""});
});
app.get('/shot', (req, res) => {
res.render('temp.ejs',{value:temp()});
});
// 追加 以下を追加
app.get('/rec', (req, res) => {
intervalId = setInterval(temp, tm);
});
app.listen(3000);
$ node app.js
pi@raspberrypi:~/temp_rec $ node app.js
18.3
18.4
18.4
18.4
18.5
18.4
18.4
^C
const fs = require('fs');
const express = require('express');
const app = express();
const ejs = require('ejs');
app.use(express.static('public'));
app.use(express.urlencoded({extended: false}));
app.engine('ejs',ejs.renderFile);
let data_th = [];
let data_rec = []; //追加 連続記録格納用
let intervalId = "";
let tm = 3000;
let today = new Date(); //追加 記録時間表示用
let count = 0; //追加 測定された回数
let num_rec = 10; //追加 記録する数の設定
let temp = () => {
count++;
let buff = fs.readFileSync('/sys/bus/w1/devices/28-3c01b556b5e5/w1_slave');
let data_sp = buff.toString().split("=");
data_th.push(data_sp.pop());
let data_dig = (data_th.map(Number))/100;
data_th = [];
let data_rou = (Math.round(data_dig))/10;
if(count===num_rec){ //2880){
fs.writeFile("./temp.csv",data_rec.toString(), (err)=>{
if(err){
throw err
}else{
console.log("temp.csvが作成されました。");
}
});
data_rec = [];
count=0;
}
data_rec.push("\n"+data_rou+","+today.getDate()+"日"+today.getHours()+"時"+today.getMinutes()+"分") //追加 室温と日付を入れる
console.log(data_rou);
return data_rou; // 追加
}
app.get('/', (req, res)=> {
res.render('temp.ejs', {value:""});
});
app.get('/shot', (req, res) => {
res.render('temp.ejs',{value:temp()});
});
app.get('/rec', (req, res) => {
intervalId = setInterval(temp, tm);
res.render('temp.ejs',{value:"記録開始"+today}); //追加ブラウザの表示
});
//追加
app.get('/showData',(req,res)=>{
res.render('temp.ejs', {value:data_rec});
});
app.get('/reset',(req,res)=>{
clearInterval(intervalId);
data_rec = [];
res.render('temp.ejs', {value:""});
});
app.listen(3000);
if(count===num_rec){
fs.writeFile("./temp.csv",data_rec.toString(),
<!DOCTYPE html>
<html>
<head>
<title>temp</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<nav>
<h1>temp</h1>
</nav>
<div>
<p>
<textarea><%= value %></textarea>
<%# valueで温度テータを受け取る %>
</p>
</div>
<div>
<a href="/shot">測定</a>
<%# ----スイッチ追加--- %>
<a href="/showData">表示</a>
<a href="/reset">リセット</a>
<%# ----スイッチ追加--- %>
</div>
</body>
</html>
pi@raspberrypi:~/temp_rec $ node app.js
pi@raspberrypi:~/temp_rec $ node app.js
21.4
21.6
21.6
21.6
21.6
21.6
21.6
21.6
21.6
21.6
temp.csvが作成されました。
<!DOCTYPE html>
<html>
<head>
<title>temp</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<nav>
<h1>temp</h1>
</nav>
<div>
<p>
<%# ----id追加--- %>
<textarea id="showOut"><%= value %></textarea>
<%# valueで温度テータを受け取る %>
</p>
</div>
<div>
<a href="/shot">測定</a>
<a href="/showData">表示</a>
<a href="/reset">リセット</a>
</div>
<%# ----ファイルをダウンロードするスクリプト追加--- %>
<script>
let data=document.querySelector('#showOut').value;
let fileIn;
let fileLine;
let thValue;
document.querySelector('#download').addEventListener('click',() => {
let blob=new Blob([data],{type:"text/plan"}); //ダウンロードするデータを作成
let link=document.createElement('a'); //リンクを作成
link.href=URL.createObjectURL(blob); //URLを作成
link.download="temp_rec.csv"; //ファイル名
link.innerText="ダウンロードする"; //リンクの表示テキスト
document.body.appendChild(link); //リンクをbodyに追加
});
</script>
</body>
</html>
const fs = require('fs');
const express = require('express');
const app = express();
const ejs = require('ejs');
app.use(express.static('public'));
app.use(express.urlencoded({extended: false}));
app.engine('ejs',ejs.renderFile);
let data_th = [];
let data_rec = [];
let intervalId = "";
let tm = 3000;
let today = new Date();
let count = 0;
let num_rec = 10;
let temp = () => {
count++;
let buff = fs.readFileSync('/sys/bus/w1/devices/28-3c01b556b5e5/w1_slave');
let data_sp = buff.toString().split("=");
data_th.push(data_sp.pop());
let data_dig = (data_th.map(Number))/100;
data_th = [];
let data_rou = (Math.round(data_dig))/10;
if(count===num_rec){
fs.writeFile("./temp.csv",data_rec.toString(), (err)=>{
if(err){
throw err
}else{
console.log("temp.csvが作成されました。");
}
});
data_rec = [];
count=0;
}
data_rec.push("\n"+data_rou+","+today.getDate()+"日"+today.getHours()+"時"+today.getMinutes()+"分")
console.log(data_rou);
return data_rou; // 追加
}
app.get('/', (req, res)=> {
res.render('temp.ejs', {value:""});
});
app.get('/shot', (req, res) => {
res.render('temp.ejs',{value:temp()});
});
app.get('/rec', (req, res) => {
intervalId = setInterval(temp, tm);
res.render('temp.ejs',{value:"記録開始"+today});
});
app.get('/showData',(req,res)=>{
res.render('temp.ejs', {value:data_rec});
});
// 追加
app.get('/showFile',(req,res)=>{
let data_file = fs.readFileSync('./temp.csv');
res.render('temp.ejs', {value:data_file});
});
app.get('/reset',(req,res)=>{
clearInterval(intervalId);
data_rec = [];
res.render('temp.ejs', {value:""});
});
app.listen(3000);
pi@raspberrypi:~/temp_rec $ node app.js
Copyrights © 2019 - Imran Hossain, All Rights Reserved.