前の記事




<!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>
                


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番ポートでサーバーを立てる
    


    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);
    

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);    

<!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
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);