Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何正确读取节点js中的serialport?_Node.js_Arduino_Node Serialport - Fatal编程技术网

Node.js 如何正确读取节点js中的serialport?

Node.js 如何正确读取节点js中的serialport?,node.js,arduino,node-serialport,Node.js,Arduino,Node Serialport,这是我在NodeJS中从arduino的串行数据端口读取的代码 var SerialPort = require('serialport'); var io = require('socket.io').listen(3000); var serialPort = new SerialPort("COM4", { baudRate: 9600, parser: new SerialPort.parsers.Readline("\n") }); io.sockets.on('c

这是我在NodeJS中从arduino的串行数据端口读取的代码

var SerialPort = require('serialport');
var io = require('socket.io').listen(3000);

var serialPort = new SerialPort("COM4", {
    baudRate: 9600,
    parser: new SerialPort.parsers.Readline("\n")
});

io.sockets.on('connection', function(socket){
    socket.on('message', function(msg){
        console.log(msg);
    });

    socket.on('disconnected', function(){
        console.log('disconnected');
    });
});

var clearData = "";
var readData = "";

serialPort.on('open',function(){
    console.log('open');
    serialPort.on('data', function(data){
        console.log(data);
        readData += data.toString();
        io.sockets.emit('message',data);
    });
});
这是我在Arduino中的代码,它只是一个简短的示例

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.println("Hello");
delay(2000);
}
但是,在node js的控制台中,打印数据时显示以下内容:

如何在一行中正确获取数据? 有这样的东西:

const {StringStream} = require('scramjet');

serialport.on('open', () => console.log('open');
serialport.pipe(new StringStream) // pipe the stream to scramjet StringStream
    .lines('\n')                  // split per line
    .each(                        // send message per every line
        data => io.sockets.emit('message',data)
    );
你好
你好

您好

我无法进行端到端的测试(附近没有arduino),但由于
serialport
似乎实现了一个可读的流,因此我会尝试使用以下方法:

const {StringStream} = require('scramjet');

serialport.on('open', () => console.log('open');
serialport.pipe(new StringStream) // pipe the stream to scramjet StringStream
    .lines('\n')                  // split per line
    .each(                        // send message per every line
        data => io.sockets.emit('message',data)
    );

超音速燃烧冲压发动机将为您解决读线问题。

我使用使用RS-232协议的串行端口设备测试了此代码。它的优点是不需要从npm安装第三个包

var recVal = '';
mySerial.on('data', function(data) {
  if(data.indexOf('\n') != -1) {
    io.emit('serial:data', {
      value: recVal
    });
    console.log("Data: ", recVal.toString());
    recVal = '';
  } else {
    recVal = recVal.concat(data);
  }
});

谢谢你,先生,我也在为类似的事情苦苦挣扎,你的回答对我帮助很大!