본문 바로가기
Coding/Raspberry pi - node.js

Raspberry pi를 express를 통한 웹 연결

by hyun-am 2019. 11. 17.

웹기반 소리센서 제어 샘플코드

 

먼저 시작전에 $npm install express를 터미널 창에 입력해서 express를 설치합니다.

 

코드구성

 

js 코드

 

선언부분

const fs = require('fs');
const express = require('express');
const bodyParser = require('body-parser');
const mcpadc = require('mcp-spi-adc');

const gpio = require('node-wiring-pi');
const mcpadc = require('mcp-spi-adc');

const CS_MCP3208 = 10;
const SPI_CHANNEL = 0;
const SPI_SPEED = 100000
var QuietSound = 1997;
var sid;

const soundsensr = mcpadc.openMcp3208(SPI_CHANEL,
        {speedHz:SPI_SPEED},
        (err)=>{
            console.log("MCP-ADC 초기화!");
            if(err) console.log("MCP-ADC 초기화 실패!(HW점검)");
        });
app.use(bodyParser.urlencoded({extended:false}));	// body parser 환경설정

const soundDetect = () =>{
   soundsensor.read((error,reading)=>{
       console.log("▲▼ (%d)", reading.rawValue);
       if(rading.rawValue > QuietSound)	// 필터링 기준값 이상크기이면 출력
           console.log("기준값:(%d), 아날로그 측정값(%d)",QuietSound,
           reading.rawValue);
           else
               console.log("인식안함");
       });
       
   sid = setTimeout(SoundDetect,200);	// 타임아웃 취소용 sid값 저장
}

 

express활용 부분

 

app.get('/',(req,res)=>{
    console.log("sensor 호출");
    fs.readFile('sen.html','utf8',(error,data)=>{
    if(error)
        res.send(data);
    });
});

app.get('/1',(req,res)=>{
    console.log("사운드센서 활성화 수행");
    sid = setTimeout(SoundDetect,200);	// 활성화
    res.redirect('/');
});

app.get('/0',(req,res)=>{
    console.log("사운드센서 비활성화 수행");
    clearTimeout(sid);	// 타임아웃취소(비활성화)
    res.redirect('/');
});

app.post('/',(req,res)=>{
    let body = req.body;
    console.log('기준값이 다음 값으로 설정됩니다:');
    console.log('===> :' + body.threshold);
    QuietSound = body.threshold;
    res.redirect('/');
});

process.on('SIGINT',()=>{
    soundsensor.close(()=>{
        console.log("MCP-ADC가해제됩니다.");
        console.log("웹서버를 종료합니다.");
        process.exit();
    });
});

 

listen을 통한 웹 연결

 

app.listen(60001,()=>{
    gpio.wiringPiSetup();
    gpio.pinMode(CS_MCP3208, gpio.OUTPUT);
    console.log("---------------------------------");
    console.log("사운드센서 제어용 웹서버(인식용기준값:%d"),QuietSound);
    console.log("웹 브라우져 접속주소 : http://IP주소:60001/");
    console.log("---------------------------------");
});

 

html 코드

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>임베디드 시스템 제어</title>

</head>
<body bgcolor="lightcyan">
    <h2>임베디드시스템제어</h2>
    <hr>
    <h3>센서측정제어</h3>
    <hr>
    <ul>
        <li>
            <a href="/1">사운드센서측정ON</a>
        </li>
        <li>
            <a href="/0">사운드센서측정OFF</a>
        </li>
    </ul>
    <hr>
    <h3>기준값 설정</h3>
    <h6>기준값 입력범위 : 0~4095(12비트) 입력값으로 조정가능</h6>
    <hr>
    <form name="soundon" method="POST">
        <div class="input">
            <span class="label">기준값</span>
            <input type="text" name = "threshold">
        </div>
        <hr>
        <div class="input">
            <input type="submit" value="기준값 설정">
        </div>
    </form>
</body>
</html>

댓글