node.js - 아두이노 시리얼 통신하기

서주·2023년 7월 8일
post-thumbnail

공모전 기록

아두이노 센서 데이터를 시리얼로 받고 웹에 비주얼라이징하는 파트를 맡았다. 코드는 여기저기서 주워먹었는데 어디껀지 모르겠다.

Serial Port랑 baudRate 지정
클라이언트가 record송신 시 serialport로 입력 들어온 값을 data.txt문서에 저장, stop 입력 시 저장 안함.

server.js

const { SerialPort } = require('serialport')
const { ReadlineParser } = require('@serialport/parser-readline')
const port = new SerialPort({ path: 'COM6', baudRate: 2400 }) //시리얼포트와 boudrate 지정
const parser = new ReadlineParser()
port.pipe(parser)


const express = require('express');
const app = express()
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
var fs = require('fs')
var RecordTF = 0;

app.use(express.static('public'));
app.get('/', (req, res) => {
	res.sendFile(__dirname + "/public/index.html"); // html 문서를 지정
# });



//소켓 연결시
io.on('connection', (socket) => {
	console.log('a user connected');
	socket.on('disconnect', () => {
		console.log('user disconnected');
	});

	socket.emit('result', `${socket.id}로 연결 되었습니다.`);
	parser.on('data', function(data) {
		
			if(RecordTF == 1){
			fs.appendFile('data.txt', data + '\n', function(err) {
				if (err) throw err;
				console.log('Data saved!');
			  });
			}
			socket.emit('data', data);
	});


	socket.on('message', (msg) => { 
		console.log("클라이언트의 요청이 있습니다.");
		console.log(msg);
		if(msg === 'record'){
			RecordTF = 1;
		}
		else if(msg === 'stop'){
			RecordTF = 0;
		}
		socket.emit('result', `수신된 메세지는 "${ msg }" 입니다.`);
	});
});


server.listen(3000, () => {
    console.log("server is listening at localhost: 3000"); //localhost:3000으로 접속
});

index.html 일부

<body>
 <form id="form" action="">
        <input id="input" autocomplete="off" />
        <button>전송</button>
 </form>
</body>
<script src="./index.js"></script>

index.js 일부

form.addEventListener('submit', function(e) {
  e.preventDefault();
  if (input.value) {
    socket.emit('message', input.value);
    input.value = '';
    console.log("sending OK");
  }
 });
 socket.on('data', (msg) => {
  ...
  };
});

0개의 댓글