Arduinoのプログラムのデバックする時に、Serial.print を使うことは良くあることだと思います。Windows のフリーのアプリケーションを使ってモニターしても良かったのですが、自分なりにあれこれやりたかったのでnode で受信するようにしました。
私の環境
- windows 7 Professional 32bit
- node v5.6.0
- RS232C-USB変換 USB-CVRS9
- 3V,3.3V,5V系-RS232Cレベル変換基板 ADM3202
- 参照 https://qiita.com/YumeYakata/items/01ace8a588bb58bc0bc5
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
'''