逐行读取节点串口流
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
并且这个解决方案的长度与文档中给出的解决方案的长度大致相同。
设置
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
并且这个解决方案的长度与文档中给出的解决方案的长度大致相同。