逐行读取节点串口流

Read node-serialport stream line by line

设置

official documentation has a part on how to read a node-serialport逐行流。

我尝试了示例代码:

var SerialPort = require('serialport');
var Readline = SerialPort.parsers.Readline;
var port = new SerialPort('/dev/tty-usbserial1');
var parser = new Readline();
port.pipe(parser);
parser.on('data', console.log);
port.write('ROBOT PLEASE RESPOND\n');

我很快意识到 SerialPort.parsers.Readline 应该是 SerialPort.parsers.readline 但即使这样我仍然得到错误:

Uncaught TypeError: dest.on is not a function

问题

后来我意识到此功能仅在处于测试阶段的 5.0.0 之后可用(截至 2017 年初)。我有 4.0.7。那么如何在版本 5 以下逐行读取流?

tl;博士

read it like a regular stream:

var SerialPort = require('serialport');
var createInterface = require('readline').createInterface;

var port = new SerialPort('/dev/tty-usbserial1');

var lineReader = createInterface({
  input: port
});

lineReader.on('line', function (line) {
  console.log(line);
});

port.write('ROBOT PLEASE RESPOND\n');

说明

由于 node-serialport 的原型是 Stream,令人惊讶的是你可以像普通人一样阅读它 Stream 并且这个解决方案的长度与文档中给出的解决方案的长度大致相同。