Node.jsでArduinoとシリアル通信する

ここを参考に。
http://tomowatanabe.hatenablog.com/entry/2013/03/23/233554

Arduino側のコードはそのまま使う。
serial.ino

#define TEMP A5
#define LED  13

int value; // アナログ入力値(0〜203)
int tempC   = 0; // 摂氏値( ℃ )
char trans[20]; // 数字(文字列)の送信用配列
char recv[10]; // 数字(文字列)の受信用配列

void setup() {
  pinMode(TEMP, INPUT);
  pinMode(LED, OUTPUT);
  // シリアル通信速度
  Serial.begin(9600);
}

void loop() {

  // シリアルからのデータ受信
  memset(recv, 0, 10);
  char *p = &recv[0];
  recvStr(p);

  if (strcmp("ON", p) == 0) {
    digitalWrite(LED, HIGH);
  } else if (strcmp("OFF", p) == 0) {
    digitalWrite(LED, LOW);
  }

  // 気温を送信
  value = analogRead(TEMP);
  tempC = ((5 * value) / 1024.0) * 100;
  // シリアルからのデータ送信
  memset(trans, 0, 20);
  char *json = &trans[0];

  // 送信用のJSONデータの作成
  sprintf(json, "{\"temp\":%d, \"led\":%d}", tempC, digitalRead(LED));
  Serial.println(json);

  delay(5000);
}

// データ受信
void recvStr(char *buf)
{
  int i = 0;
  char c;
  while (Serial.available()) {
      c = Serial.read();
      buf[i] = c;
      i++;
  }
}


node.jsではnode-serialportを使う。

var serialport = require('serialport');

// Serial Port
//var portName = '/dev/tty.usbmodemfd13431'; // Mac環境
var portName = '/dev/tty.usbserial-A6008hxG'; // Mac環境
var sp = new serialport.SerialPort(portName, {
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
    flowControl: false,
    parser: serialport.parsers.readline("\n")   // ※修正:パースの単位を改行で行う
});

// data from Serial port
sp.on('data', function(input) {

    var buffer = new Buffer(input, 'utf8');
    var jsonData;
    try {
        jsonData = JSON.parse(buffer);
        console.log('temp: ' + jsonData.temp);
        console.log('led: ' + jsonData.led);
    } catch(e) {
        // データ受信がおかしい場合無視する
        return;
    }
    // つながっているクライアント全員に送信
    //io.sockets.json.emit('message', { value: jsonData });
});

setInterval(function(){toggleLED()},5000);

var sw = 0;//initialize
function toggleLED(){
  switch(sw){
    case 0:
      sp.write("ON");
      sw = 1;
      console.log("wrote ON, and sw flag is"+sw);
      break;
    case 1:
      sp.write("OFF");
      sw = 0;
      console.log("wrote OFF, and sw flag is"+sw);
      break;
   }
}