node.js 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代表回车)或hex代码(即0x30代表对于数组中的每个项目,“0”或0x0D用于回车)。 我没有尝试unicode或其他任何东西。 但是请看下面我的想法。

B.事实certificate,在我的例子代码

 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.(稍微有一点“时刻”)简单地说,Javascript会尝试将任何与string连接的东西都转换为string。 所以连接0x80 + '123456\r'变成'128123456\r'

D.传递unicode,像sp.write('\u0080')结束输出双字符,我假设由于unicode是每个字符2个字节,string正在处理/期待单字节编码。 Javascriptstring是UTF-16 ,所以我猜测节点serialport模块不处理它,因为RS-232使用8位或更less的每个字符落入典型的ASCII字符集。

我在控制台上testing了这个,而不是通过串口,但我认为它应该为你工作。

有两种select:1)你可以转义成Unicode或2)你可以使用String.fromCharCode函数( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/ fromCharCode )

转义为Unicode非常简单,只需使用\ uXXXX其中XXXX是数字的hex表示forms

 sp.write('\u0080123456\r'); 

或者你可以使用String.fromCharCode:

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