웹기반 소리센서 제어 샘플코드
먼저 시작전에 $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>
'Coding > Raspberry pi - node.js' 카테고리의 다른 글
실습 사운드센서, 광센서를 웹에 연결시키기 (0) | 2019.11.17 |
---|---|
실습 socket.io를 활용하여 1색LED, Buzzer, 3색LED Control (0) | 2019.11.17 |
웹기반 조이스틱 제어 (0) | 2019.11.17 |
SPI 방식과 ADC 칩 (0) | 2019.11.16 |
초음파 센서 제어와 웹 연동 (0) | 2019.11.15 |
댓글