node-serialportを使ってArduinoとシリアル通信

node-serialportを使うと簡単にArduinoとお話ができます。

 

ただ、Readmeに書いてあるコードをそのまま実行しても、うまく通信できませんでした。

いろいろ試したところ、openイベントが発生してから、実際に通信ができるようになるまでに若干のタイムラグがあるっぽいです。

 

なので、NodeからArduinoに書き込みをしたい場合は、以下のようにsetTimeoutを設定するとうまくいきました。

var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/tty.usbmodem1411", {
  baudrate: 9600
});
 
serialPort.on("open", function () {
  console.log('open');
 
  setTimeout(function() {
    serialPort.write("ls\n", function(err, results) {
      console.log('err ' + err);
      console.log('results ' + results);
    }); 
  }, 1000); 
});
 
serialPort.on('data', function(data) {
  console.log('data received: ' + data);
});
 
serialPort.on('error', function(err) {
  console.log('err ' + err);
});

 

ちなみに、Arduino側はExamples > 04.Communication > SerialEventのサンプルコードを実行しています。

 

イベント発生してるのに、その中でsetTimeoutしないといけないのは気持ち悪いですが、動いたのでひとまずよし。。