【问题标题】:How to read correctly with serialport in node js?如何在节点 js 中使用串行端口正确读取?
【发布时间】:2018-05-20 03:19:44
【问题描述】:

这是我在 node js 中从 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的控制台中,打印数据时显示如下:

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

你好
你好
你好

【问题讨论】:

    标签: node.js arduino node-serialport


    【解决方案1】:

    我无法端到端测试这个(附近没有 arduino),但由于serialport 似乎实现了可读流,我会尝试像这样使用scramjet

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

    Scramjet 会为您整理 readline 问题。

    【讨论】:

    • 谢谢您,先生,我正在为类似的事情而苦苦挣扎,您的回复对我帮助很大!
    【解决方案2】:

    我用使用 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);
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      相关资源
      最近更新 更多