728x90

하드웨어 디바이스와 통신에 가장 쉽고 많이 사용되는것이 시리얼포트이다. NodeJS에서 시리얼 포트를 사용하려면 Chris Williams가 만든 serialport 모듈을 사용하면 된다.

먼저 serialport 모듈을 설치한다.

$ npm install --save-dev serialport

> serialport@1.6.2 install /home/test/node_modules/serialport
> node-pre-gyp install --fallback-to-build

[serialport] Success: "/home/test/node_modules/serialport/build/serialport/v1.6.2/Release/node-v11-darwin-x64/serialport.node" is installed via remote
serialport@1.6.2 ../node_modules/serialport
├── bindings@1.2.1
├── sf@0.1.7
├── nan@1.7.0
├── optimist@0.6.1 (wordwrap@0.0.2, minimist@0.0.10)
└── debug@2.1.3 (ms@0.7.0)


설치가 완료되면 시리얼 포트를 열어준다.

$ node
> var serialport = require("serialport");
undefined
> SerialPort = serialport.SerialPort;
{ [Function: SerialPort]
  super_:
   { [Function: Stream]
     super_: { [Function: EventEmitter] listenerCount: [Function] },
     Readable:
      { [Function: Readable]
        ReadableState: [Function: ReadableState],
        super_: [Circular],
        _fromList: [Function: fromList] },
     Writable:
      { [Function: Writable]
        WritableState: [Function: WritableState],
        super_: [Circular] },
     Duplex: { [Function: Duplex] super_: [Object] },
     Transform: { [Function: Transform] super_: [Object] },
     PassThrough: { [Function: PassThrough] super_: [Object] },
     Stream: [Circular] } }
> var serialPort = new SerialPort("/dev/cu.usbmodem14131", {
      baudrate: 9600,
      parser: serialport.parsers.readline("\n")
});
> serialPort = new SerialPort("/dev/cu.PL2303-00003014", {
... baudrate: 9600,
... parser: serialport.parsers.readline("\n")
... });
{ domain: null,
  _events: {},
  _maxListeners: 10,
  fd: null,
  paused: true,
  bufferSize: 256,
  readable: true,
  reading: false,
  options:
   { baudrate: 9600,
     parser: [Function],
     baudRate: 9600,
     dataBits: 8,
     stopBits: 1,
     parity: 'none',
     rtscts: false,
     xon: false,
     xoff: false,
     xany: false,
     bufferSize: 256,
     platformOptions: { vmin: 1, vtime: 0 },
     dataCallback: [Function],
     disconnectedCallback: [Function] },
  path: '/dev/cu.PL2303-00003014' }


위에서 '/dev/cu.PL2303-00003014' 부분은 시스템에 맞게 바꿔주면 된다. 리눅스라면 보통 '/dev/ttyUSB0' 같은 이름이고 윈도우라면 'COM1' 같은 이름이 된다.

테스트하기 위해 아두이노에 0.1초마다 숫자를 하나씩 증가시켜 시리얼포트로 출력하도록 하는 스케치를 업로드 해 준다.

setup() { 
  Serial.begin(9600); 


int i=0; 
void loop() { 
  Serial.println(i++); 
  delay(100); // poll every 100ms 
}

Reading from the port

시리얼포트에서 값을 읽어 화면에 표시하기 위해 다음의 코드를 작성해 'dump.js'라는 이름으로 저장해준다. 

var serialport = require("serialport"); 
var SerialPort = serialport.SerialPort; 

var serialPort = new SerialPort("cu.PL2303-00003014", { 
  baudrate: 9600, 
  parser: serialport.parsers.readline("\n") 
}); 
serialPort.on("open", function () { 
  console.log('open'); 
  serialPort.on('data', function(data) { 
    console.log(data); 
  }); 
});

이제 아두이노를 USB-to-Serial 케이블에 연결하고 dump.js를 실행한다.

$ node jump.js
...
5
6
7
....
^C


좀 더 상세한 정보와 예제 코드는 https://www.npmjs.com/package/serialport 를 참조하면 된다.

 

arsviator.blogspot.com/2015/03/nodejs.html

+ Recent posts