微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js SerialPort 如何处理 0x0D 0x0A 读取数据

如何解决Node.js SerialPort 如何处理 0x0D 0x0A 读取数据

我无法在 SerialPort 上触发“数据”事件。下面是我发送的“AT”命令,以及我收到的换行符和“OK”:

enter image description here

如果我理解正确,使用'@serialport/parser-readline'应该能够获取数据(第一个数据为空,第二个数据“OK”)。这是我尝试过的:

const SerialPort = require('serialport')
const Readline = require('@serialport/parser-readline')
const port = new SerialPort('COM4')
port.on('open',() => {
    const parser = port.pipe(new Readline({ delimiter: '\r\n' }))
    parser.on('data',(data)=> {
        console.log(data)
    })
    port.write('AT\r\n')
})

我可以确认“AT”命令发送成功,因为当我停止脚本并用putty连接时,我可以看到一个换行符和“OK”,如果我发送了“ATTTTT\r\n”(无效命令),我可以看到“错误”。

然而,“数据”事件似乎从未被触发。我什至尝试将 "\r\n" 更改为缓冲区,但仍然没有运气:

const parser = port.pipe(new Readline({ delimiter: Buffer.from([0x41,0x54,0x0D]) }))

我什至尝试过 InterByteTimeout:

const SerialPort = require('serialport')
const InterByteTimeout = require('@serialport/parser-inter-byte-timeout')
const port = new SerialPort('COM4')
port.on('open',() => {
    const parser = port.pipe(new InterByteTimeout({interval: 3000}))
    parser.on('data',(data)=> {
        console.log(data)
    })
    port.write('AT\r\n')
})

同样,即使我确定已发送回复,“数据”事件也永远不会被触发。我需要做什么才能获取数据?

更新:我已经放弃了。 SerialPort 还有其他替代库吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。