目标
我需要通过串行端口获取一批命令的数据,例如
写入串行:“命令”
来自串行接收器的预期响应:十六进制值
我使用了串口 包。
串行.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) 设置端口并将数据写入串行端口,然后是读取数据事件及其回调函数。读取数据事件工作正常,但接收到的数据是缓冲区的形式,并且在读取数据时它会分成块。这是附加的输出输出
请帮助我接收完整的缓冲区数据而不是随机字节。
数据作为字节缓冲区输出,因为您已将readSerialData事件处理程序订阅到端口而不是将其订阅到解析器。另请参阅有关解析器的串行端口文档
您可以通过替换以下行来简单地修复它:
myPort.on('data', readSerialData);
Run Code Online (Sandbox Code Playgroud)
和
parser.on('data', readSerialData);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7503 次 |
| 最近记录: |