【问题标题】:heartbeat sensor outputs buffer data using serialport - Javascript arduino Nodejs心跳传感器使用串行端口输出缓冲区数据 - Javascript arduino Nodejs
【发布时间】:2017-07-27 00:02:02
【问题描述】:

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

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

但我明白了:

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

【问题讨论】:

    标签: node.js arduino-uno


    【解决方案1】:

    在节点串行端口的文档中找到了这个:

    事件:“数据”

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

    种类:SerialPort 发出的事件

    (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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多