node.js 串行端口,尝试编写但我无法弄清楚

标签 node.js node-serialport

我对 rs232 的了解几乎一无所知。我有一个连接到串行端口的 LED 显示屏。我使用的是node.js v8.22 和node-serialport v1.1.0。

LED 显示屏的用户指南要求发送 [hex80]xxxxxx[cr],其中每个“x”是一个数字 (0-9)。我的波特率也设置为 9600。

我假设我可以写

sp.write(0x80);
sp.write('123456\r');

但老实说,我只是不知道如何将 [hex80]xxxxxx[cr] 转换为 javascript/serialport 需求。我尝试过各种方法。

sp.write([0x80,55,55,55,49,49,48,'\r']);//hex80 + 所有数字的字符代码 sp.write(128+'123456\r')//128 是十进制的 0x80

我得到了一些困惑的东西要显示。完整代码如下。

var serialPort, sp;

var comPort = '/dev/cu.usbserial';

var serialPort = require('serialport').SerialPort
sp = new serialPort(comPort, { baudrate: 9600, parser: parserJaCircuitsChrono() });

sp.on("open", function () {
    console.log(comPort + ' is open');
    sp.write(0x80);
    sp.write('123456\r');
});

非常感谢任何想法或帮助。

谢谢。

最佳答案

我明白了。我安装了一个串行端口监控应用程序来查看发生了什么。

最终答案是

A.当使用数组或缓冲区传递给 .write() 方法时,它需要是十进制字符代码(即 30 表示“0”或 13 表示回车)或十六进制代码(即 0x30 代表“0”,0x0D 代表回车)数组中的每个项目。我没有尝试 unicode 或其他任何东西。但请参阅下面我对此的想法。

B.事实证明,在我的示例代码中

sp.on("open", function () {
    console.log(comPort + ' is open');
    sp.write(0x80);
    sp.write('123456\r');
});

我需要将 0x80 作为缓冲区/数组发送。所以 sp.write([0x80]);,如果没有它发送大量 00 00 00...s 但是 LED 显示屏供应商的文档不正确,因为它需要 \r\n 位于末尾,而不仅仅是 \r

C. (有点“duh”的时刻)只是 JavaScript 会尝试将任何与字符串连接的内容转换为字符串。因此,连接 0x80 + '123456\r' 会变成 '128123456\r'

D.传递 unicode,如 sp.write('\u0080') 最终输出双字符,我假设因为 unicode 每个字符 2 个字节,并且字符串正在被处理/期望单字节编码。 Javascript strings are UTF-16 ,所以我猜测 Node 串行端口模块无法处理它,因为 RS-232 每个字符使用 8 位或更少,属于典型的 ASCII 字符集。

关于node.js 串行端口,尝试编写但我无法弄清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18327807/

相关文章:

javascript - 如何使用koaJS获取本域ip地址

node.js - 无法登录到 GitHub 包注册表

node.js - nodejs 串口写入问题?

javascript - Arduino 串行端口提供错误数据?

javascript - 将 Go 文件转换为 JS 失败

javascript - 获取类中的所有静态 getter

javascript - 隐式声明 'let' 对带递归的 for 循环变量有什么影响?

linux - node.js 和 serialport 无法列出任何端口

javascript - 如何编写在 `data` 事件发射器触发时解析的异步函数

node.js - Node 串行端口堆叠监听器并且未使用 promise 获得完整响应