我正在尝试显示传感器数据,它应该是这样的:
0,0
0,128
0,150
120,250
var SerialPort = require("serialport");
var serialport = new SerialPort("COM4");
serialport.on('open', function(){
console.log('Serial Port Opend');
serialport.on('data', function(data){
console.log(data);
nsp.emit('live-data', data);
});
});
但我明白了:
我尝试了数据[0],然后出现了一些奇怪的数据,而不是我正在寻找的。如果我检查数据1,那么它显示未定义。
答案 0 :(得分:3)
在node serialport的文档中找到了这个:
事件:“数据”
数据事件将端口置于流动模式。数据在收到后立即发出。数据是一个缓冲区对象,其中包含不同数量的数据。 readLine解析器将数据转换为字符串行。有关解析器的更多信息,请参阅解析器部分;有关数据事件的更多信息,请参阅Node.js流文档。
种类:SerialPort发出的事件
您指出这一点:
SerialPort.parsers:object
默认的解析器是转换流,它以不同的方式解析数据以转换传入的数据。
要使用解析器,您必须创建它们,然后将Serialport传递给解析器。小心只写入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');
// Creating the parser and piping can be shortened to
var parser = port.pipe(new Readline());
要使用ByteLength解析器,请提供字节数的长度:
var SerialPort = require('serialport');
var ByteLength = SerialPort.parsers.ByteLength
var port = new SerialPort('/dev/tty-usbserial1');
var parser = port.pipe(new ByteLength({length: 8}));
parser.on('data', console.log);
要使用Delimiter解析器,请提供分隔符作为字符串,缓冲区或字节数组:
var SerialPort = require('serialport');
var Delimiter = SerialPort.parsers.Delimiter;
var port = new SerialPort('/dev/tty-usbserial1');
var parser = port.pipe(new Delimiter({delimiter: Buffer.from('EOL')}));
parser.on('data', console.log);
要使用Readline解析器,请提供分隔符(默认为'\ n')
var SerialPort = require('serialport');
var Readline = SerialPort.parsers.Readline;
var port = new SerialPort('/dev/tty-usbserial1');
var parser = port.pipe(Readline({delimiter: '\r\n'}));
parser.on('data', console.log);
使用Ready解析器提供字节启动序列。收到字节后,数据事件将通过。
var SerialPort = require('serialport');
var Ready = SerialPort.parsers.Ready;
var port = new SerialPort('/dev/tty-usbserial1');
var parser = port.pipe(Ready({data: 'READY'}));
parser.on('data', console.log); // all data after READY is received