Raspberry 串行端口使用 Node.js 删除数据

Raspberry serialport dropping data with Node.js

我正在尝试在我的 Raspberry Pi 3 上使用 Node 的串口。 我使用的代码只是简单地回应了它读取的内容。问题是有些字节没有回显。我正在使用两个 USB 串行端口适配器,一个连接到我的 PC,一个连接到树莓派。我正在使用 RealTerm 写入和读取数据。我使用 npm-serialport package. I also tried raspi-serial 得到相同的结果。

我在 C 中尝试了一个类似的程序,一切正常,它工作到 230400,这是我想用 Node 实现的。所以这告诉我这不是硬件问题。

只有读写并发时才会出现这个问题。

降低波特率似乎有所帮助,但我需要它快于 1200 bps。

这是我使用的代码:

var SerialPort = require('serialport');
const serial = new SerialPort('/dev/ttyUSB0',{baudRate:9600});
serial.on('data',(data)=>{
        console.log(data.toString('utf8', 0, 1));
        serial.write(data.toString('utf8', 0, 1));
});

这个 picture 显示了放置在 PC 和 Raspberry 之间的逻辑分析器看到的内容。上面一行是树莓派正在写入的内容,下面一行是 PC 正在发送的内容。我正在重复发送字符串 1234567890。

事实证明,这不是应该如何使用库来实现我想要的。问题是我在 "flowing mode" 中使用了阅读流,你想避免这种应用程序。

这段代码对我有用:

serial.on('readable',() => {
    var buffer = serial.read();
    if(buffer){ //serial.read() could return null if there's nothing to read
            console.log(buffer.toString('utf8'));
            serial.write(buffer.toString('utf8'));
    }
});