1

nodejsシリアルポートを実行しているラズベリーパイにバーコードスキャナーを接続しました。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 オブジェクトのブロブを git します。(コード内の各数値をデータイベントとしてカウントすると思います。

私の問題は、適切な utf8 番号に変換することさえできないことです。データをデコードするにはどうすればよいですか?

更新-1: これはconsole.log(data)数字でバーコードをスキャンした後の raw の結果です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 を返すことにも興味があるかもしれません

4

1 に答える 1

0

次のようなモジュールを見てください: https://github.com/Bornholm/node-keyboard

ただし、詳しく説明すると、答えは の出力は/dev/input/event0ASCII 文字ではないということです。出力は、ここhttps://www.kernel.org/doc/Documentation/input/input.txt asで説明されている形式の一連の構造体ですstruct input_event

たとえば、出力の 2 番目のチャンクが与えられたことを意味します。

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
于 2013-03-10T02:03:37.483 に答える