node.js - 心跳传感器使用串口输出缓冲区数据 - Javascript arduino Nodejs

标签 node.js arduino-uno

我正在尝试显示传感器数据,它应该是这样的:

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);
  });
});

但我明白:

enter image description here

我尝试了 data[0],然后出现了一些奇怪的数据,而不是我正在寻找的数据。如果我检查数据1然后显示未定义。

最佳答案

在 Node 串行端口的文档中找到了这一点:

事件:“数据”

数据事件将端口置于流动模式。数据一收到就发出。 Data 是一个 Buffer 对象,其中包含不同数量的数据。 readLine 解析器将数据转换为字符串行。有关解析器的更多信息,请参阅解析器部分,有关数据事件的更多信息,请参阅 Node.js 流文档。

种类:串行端口发出的事件

( https://github.com/EmergingTechnologyAdvisors/node-serialport/blob/5.0.0-beta8/README.md#module_serialport--SerialPort+event_data )

这向您指出了这一点:

( https://github.com/EmergingTechnologyAdvisors/node-serialport/blob/5.0.0-beta8/README.md#module_serialport--SerialPort.parsers )

SerialPort.parsers:对象

默认的解析器是转换流,它以不同的方式解析数据以转换传入的数据。

要使用解析器,您必须创建它们,然后通过管道将串行端口传输到解析器。请小心,仅写入 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);

要使用分隔符解析器,请提供分隔符作为字符串、缓冲区或字节数组:

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

关于node.js - 心跳传感器使用串口输出缓冲区数据 - Javascript arduino Nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339267/

相关文章:

javascript - 如何将变量从 nodejs 发送到所有连接的客户端?

C# SerialPort GetPortNames 在 Windows 10 上不起作用

node.js - 我可以用 Nodejs 而不是 go 编写 kubernetes Controller 吗?

javascript - node.js 和浏览器之间的 JavaScript 语法差异是什么?

node.js - npm start 不适用于 Gulp js 上的 React 应用程序

arduino - 在arduino中将十六进制字符串转换为十进制

c - 错误的脉冲序列定时

arduino-uno - Arduino UNO 上的常量太大

python - 定义引脚时出现 InvalidPinDefError

node.js - 批量创建后 Sequelize 不会关闭