Nodejs serialport data.toString()编码失败

时间:2013-03-08 06:23:21

标签: javascript node.js serial-port

我有一个条形码扫描仪连接到运行nodejs serialport的覆盆子pi。 serialport实例正在侦听/dev/input/event0

当我运行时

var serialport = require("serialport");
var SP = serialport.SerialPort;
var port = "/dev/input/event0"
var sp = new SP(port);


sp.on('data', function(data) {
  console.log( data);
});

我从扫描中获取了一大堆Buffer对象。 (我认为它将代码中的每个数字都算作数据事件。

我的问题是,我甚至无法将它转换为正确的utf8数字。如何解码数据?

更新-1:这是使用数字console.log(data)

扫描条形码后原始19024336的结果
<Buffer 32 a9 3b 51 54 76 0c 00 04 00 04 00 1e 00 07 00 32 a9 3b 51 6d 76 0c 00 01 00 02 00 01 00 00 00 32 a9 3b 51 76 76 0c 00 00 00 00 00 00 00 00 00>
<Buffer 32 a9 3b 51 c6 8d 0c 00 04 00 04 00 1e 00 07 00 32 a9 3b 51 dc 8d 0c 00 01 00 02 00 00 00 00 00 32 a9 3b 51 e2 8d 0c 00 04 00 04 00 26 00 07 00 32 a9 3b ...>
<Buffer 32 a9 3b 51 61 cc 0c 00 04 00 04 00 1f 00 07 00 32 a9 3b 51 78 cc 0c 00 01 00 03 00 00 00 00 00 32 a9 3b 51 7e cc 0c 00 04 00 04 00 21 00 07 00 32 a9 3b ...>
<Buffer 32 a9 3b 51 5f fb 0c 00 00 00 00 00 00 00 00 00 32 a9 3b 51 e4 0a 0d 00 04 00 04 00 20 00 07 00 32 a9 3b 51 fc 0a 0d 00 01 00 04 00 00 00 00 00 32 a9 3b ...>
<Buffer 32 a9 3b 51 f6 d5 0d 00 04 00 04 00 28 00 07 00 32 a9 3b 51 0a d6 0d 00 01 00 1c 00 00 00 00 00 32 a9 3b 51 12 d6 0d 00 00 00 00 00 00 00 00 00>

每次扫描时都会返回不同的结果(我的人眼可以阅读的内容)

您可能也有兴趣知道Buffer.isBuffer(data);返回true

1 个答案:

答案 0 :(得分:0)

您应该看一下这样的模块:https://github.com/Bornholm/node-keyboard

尽管如此,答案是/dev/input/event0的输出不是ASCII字符。输出是一系列结构,采用此处描述的格式https://www.kernel.org/doc/Documentation/input/input.txtstruct input_event

例如,这意味着给出了输出的第二个块

32 a9 3b 51 54 76 0c 00 04 00 04 00 1e 00 07 00

像这样分解:

// 32-bit int timestamp (1362864434) - Sat, 09 Mar 2013 21:27:14 GMT
32 a9 3b 51 

// microsecond-granularity time
54 76 0c 00

// 16-bit short (1) indicating it is a key event 
01 00

// 16-bit short (2) is the keycode for the key '1'.
02 00

// 32-bit int (1) indicating it was a keypress.
01 00 00 00