node.js serialport,正在尝试编写,我只能';我想不出来

node.js serialport,正在尝试编写,我只能';我想不出来,node.js,node-serialport,Node.js,Node Serialport,我对rs232的知识几乎一无所知。我有一个连接到串行端口的LED显示屏。我正在使用node.jsv8.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需求。我

我对rs232的知识几乎一无所知。我有一个连接到串行端口的LED显示屏。我正在使用node.jsv8.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');
});
非常感谢您的任何想法或帮助


谢谢。

我在控制台上测试了这个,不是通过串行端口,但我认为它应该适合您

有两个选项:1)可以转义为Unicode,或2)可以使用String.fromCharCode函数()

转义到Unicode非常简单,只需使用\uxxx,其中XXXX是数字的十六进制表示形式

sp.write('\u0080123456\r');
也可以使用String.fromCharCode:

sp.write(String.fromCharCode(128) + '123456\r');

我在控制台上测试了这个,不是通过串口,但我认为它应该适合您

有两个选项:1)可以转义为Unicode,或2)可以使用String.fromCharCode函数()

转义到Unicode非常简单,只需使用\uxxx,其中XXXX是数字的十六进制表示形式

sp.write('\u0080123456\r');
也可以使用String.fromCharCode:

sp.write(String.fromCharCode(128) + '123456\r');

我想出来了。我打开了一个串口监控应用程序,看看发生了什么

最后的答案是

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

在我的示例代码中

sp.on("open", function () {
    console.log(comPort + ' is open');
    sp.write(0x80);
    sp.write('123456\r');
});
我需要将0x80作为缓冲区/数组发送。so
sp.write([0x80]),没有它发送了大量的00…s,但是LED显示器供应商的文档不正确,因为它需要一个
\r\n
,而不仅仅是一个
\r

C.(有点“duh”的意思)就是Javascript将尝试将任何与字符串连接的内容转换为字符串。因此,将
0x80+'123456\r'
串联成
'128123456\r'


D.传递unicode,如
sp.write('\u0080')
最终输出双字符,我假设unicode是每个字符2个字节,字符串被处理/期望单字节编码,因此,我猜测节点serialport模块无法处理它,因为RS-232每个字符使用8位或更少,这属于典型的ASCII字符集。

我找到了答案。我打开了一个串口监控应用程序,看看发生了什么

最后的答案是

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

在我的示例代码中

sp.on("open", function () {
    console.log(comPort + ' is open');
    sp.write(0x80);
    sp.write('123456\r');
});
我需要将0x80作为缓冲区/数组发送。so
sp.write([0x80]),没有它发送了大量的00…s,但是LED显示器供应商的文档不正确,因为它需要一个
\r\n
,而不仅仅是一个
\r

C.(有点“duh”的意思)就是Javascript将尝试将任何与字符串连接的内容转换为字符串。因此,将
0x80+'123456\r'
串联成
'128123456\r'


D.传递unicode,如
sp.write('\u0080')
最终输出双字符,我假设unicode是每个字符2个字节,字符串被处理/期望单字节编码,因此,我猜节点serialport模块无法处理它,因为RS-232每个字符使用8位或更少,这属于典型的ASCII字符集。

您使用了哪个串行端口监控工具?您使用了哪个串行端口监控工具?