[Node.js] Serial Port를 이용한 Arduino 이벤트 실행[Node.js] Serial Port를 이용한 Arduino 이벤트 실행

Posted at 2019. 6. 13. 18:54 | Posted in Node.js
반응형




참고 : https://kocoafab.cc/tutorial/view/501

참고 : https://kocoafab.cc/tutorial/view/504






■ 직렬 포트(Serial Port)란?




직렬포트란 한번에 한 비트씩 수신하는 방식의 포트를 말한다.

질렬 포트는 PC에서 직렬 방식으로 주변 장치와 연결할때 사용하는 포트이다.

마우스나 키보드, 모뎀등이 시리얼 포트로 연결해서 사용한다.

직렬 포트는 구조가 단순하여 사용하기 편리한 장점이 있다.

단점으로는 한 선로에 1비트씩 보내기 때문에 전송속도가 낮고 1개의 포트로 주변 기기 1개만 연결된다는 단점이 있다.









■ Node.js 에서 아두이노 연결하기



먼저 테스트에 앞서 아두이노 장비를 준비하고 컴퓨터에 연결하자.




컴퓨터 장치관리자에 들어가면 위와같이 아두이노 장비가 추가된 것을 확인 할 수 있다.






# 모듈설치

 npm install serialport




# 소스코드

 serialport_check.js

const serialPort = require("serialport");


serialPort.list(function(err, ports) {

ports.forEach(function(port) {


console.log("###################################################");

console.log("comName : ", port.comName);

console.log("---------------------------------------------------");

console.log("pnpId : ", port.pnpId);

console.log("---------------------------------------------------");

console.log("manufacturer : ", port.manufacturer);

console.log("###################################################");

});

});




# 출력결과

C:\> node serialport_check.js



그럼 위와같은 화면이 나온다면 윈도우즈에서 node.js 의 설치가 마무리 되었다.










■ 아두이노에 입력값 전달하여, 자동 키보드 입력 하기




# 아두이노 소스코드

 physical_key_input.ino

#include <Keyboard.h>


void setup() {

  Serial.begin(9600);

}


void loop() {

   

if(Serial.available() > 0) {

   

Keyboard.begin();

/* 받을 문자열의 길이를 100으로 지정한다 */

char temp[100];

/* 문자열을 잘라 넣는다. */

byte leng = Serial.readBytes(temp, 20);

 

digitalWrite(13, HIGH);      /* 받은 문자값을 출력할 동안 불을 켜둔다. */

delay(1000);                   /* 값이 입력되기 전까지 딜레이를 10초 준다. */


/* 자른 문자열의 갯수만큼 반복문을돌려 키보드로 입력 신호를 전달한다. */

for(int num = 0; num < leng; num++) {

Keyboard.print(temp[num]);

delay(200);

}

           

digitalWrite(13, LOW);      /* 문자값이 출력도리 동안 켜둔 불을 끈다 */

Keyboard.end();

Serial.end();

}

}




# 노드.js 소스코드

 serialport_arduino.js

const SerialPort = require("serialport");

const sp = new SerialPort("COM9", { baudRate:9600, autoOpen:false });


function timeDelay(timeout) {

return new Promise((resolve) => {

setTimeout(resolve, timeout);

});

}


sp.open(function() {

timeDelay(5000);

sp.on("error", function(error) {

console.log("Error : ", error.message);

});


sp.write("Hello SAAK", function(error) {

if(error) {

return console.log("Error on write : ", error.message);

} else {

console.log("메세지가 정상적으로 입력되었습니다.");

}

});

});




# 출력결과











반응형
//