Node.js
Arduino
RS232C

Node.jsでRS232Cを受信、Arduinoをモニター

Arduinoのプログラムのデバックする時に、Serial.print を使うことは良くあることだと思います。Windows のフリーのアプリケーションを使ってモニターしても良かったのですが、自分なりにあれこれやりたかったのでnode で受信するようにしました。

私の環境

serialportのインストール

npm install serialport

Arduino側(送信側のプログラム)

テストプログラムです。n のインクリメントのリミットは無視しています。

monitortest.ino
void setup() {
  Serial.begin(9600);
}

int n=0;

void loop() {
  Serial.print("ABC");
  Serial.println(n,DEC);
  delay(500);
  n++;
}

node 側(受信側のプログラム)

COM ポートはコンパネ、デバイスマネジャで確認、今回はCOM6に接続されています。

rs232cmonitor.js
serialport = require('serialport');
var portName = 'COM6';
var sp = new serialport(portName,{
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
    flowControl: false,
});

sp.on('data', function (data) {
  console.log('Data:', data);
});

受信例

送信側と受信側のモニターのタイミングで、一度にデータが複数受信される場合と、ばらばらに受信される場合があるようです。

receive1.log
Data: <Buffer 41>
Data: <Buffer 42>
Data: <Buffer 43>
Data: <Buffer 31>
Data: <Buffer 30>
Data: <Buffer 36>
Data: <Buffer 31>
Data: <Buffer 0d>
Data: <Buffer 0a>
receive2.log
Data: <Buffer 41>
Data: <Buffer 42 43 31 30 35 39 0d 0a>

Parsers を使うと、ASCII文字に変換できます。

rs232cmonitor_add.js
const Readline = serialport.parsers.Readline;
const parser = new Readline();
sp.pipe(parser);
parser.on('data', console.log);

以下のように表示されます。

receive3.log
ABC1063
ABC1064
ABC1065
'''