Serialport Node.js 读取缓冲区问题

tsp*_*ree 1 node-serialport

目标
我需要通过串行端口获取一批命令的数据,例如

写入串行:“命令”
来自串行接收器的预期响应:十六进制值

我使用了串口 包。


串行.js

var serialport = require('serialport');
var Readline = serialport.parsers.Readline; // make instance of Readline parser
var parser = new Readline(); // make a new parser to read ASCII lines


// list serial ports:
serialport.list(function (err, ports) {
    ports.forEach(function (port) {
        console.log("Serial Device: " + port.comName);
    });
});

// get port name from the command line:
var path = '/dev/cu.SLAB_USBtoUART' ;

var myPort = new serialport(path ,{
    baudRate: 230400,
});

// Read Line Parser
myPort.pipe(parser); // pipe the serial stream to the parser


// Handling Events
myPort.on('open', showPortOpen);
// Calling with set interval
setInterval(writeToSerial, 2000);
myPort.on('data', readSerialData);
myPort.on('close', showPortClose);
myPort.on('error', showError);

// Callback Functions
function showPortOpen() {
    console.log('port open. Data rate: ' + myPort.baudRate);
}


function writeToSerial() {
    myPort.write('?1VB');
}

function readSerialData(data) {
    buff = data;
    console.log(data);
}

function showPortClose() {
    console.log('port closed.');
}

function showError(error) {
    console.log('Serial port error: ' + error);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码基本上是使用 setInterval(function(){}, time) 设置端口并将数据写入串行端口,然后是读取数据事件及其回调函数。读取数据事件工作正常,但接收到的数据是缓冲区的形式,并且在读取数据时它会分成块。这是附加的输出输出

请帮助我接收完整的缓冲区数据而不是随机字节。

Mar*_*cus 5

数据作为字节缓冲区输出,因为您已将readSerialData事件处理程序订阅到端口而不是将其订阅到解析器。另请参阅有关解析器的串行端口文档

您可以通过替换以下行来简单地修复它:

myPort.on('data', readSerialData);
Run Code Online (Sandbox Code Playgroud)

parser.on('data', readSerialData);
Run Code Online (Sandbox Code Playgroud)