我想阅读带有NodeJS的射频识别卡。我有一个基本的RFID阅读器(真的不知道型号),是通过usb连接到我的电脑。
我尝试使用以下代码读取带有NPM包“序列化端口”的串行数据:
var SerialPort = require('serialport');
var Readline = require('@serialport/parser-readline');
var port = new SerialPort('/dev/cu.usbserial-0001', { baudRate: 9600, parser: new Readline() });
port.on('data', (data) => {
var serialData = data.toString('hex');
console.log(data);
});我启动程序,当我将卡片悬停在读取器上时,我会得到这样的东西(只要我在读取器上有卡片,它的变化就非常快):
0
1818
18
18
98
98
e0
98
f898
e6
18
7e
7e
18
f8
00
18
1818
18
98
98
e0
98f898e6
187e
7e
18
f8
00
18
18
18
18
98
98e0
98
f898
e618
7e7e
18
f8
...
...
...Alternativ我尝试用如下的红线来解析数据:
const SerialPort = require('serialport');
const Readline = require('@serialport/parser-readline');
const port = new SerialPort('/dev/tty.usbserial-0001', {baudRate: 9600});
const parser = port.pipe(new Readline())
parser.on('data', (data) => console.log(data))但不幸的是,我没有得到这个输出。
预期的输出是,我得到的RFID卡ID,我可以使用在我的程序的其余部分。以前,数据库中存储的ID格式为:"MT_0E00635C65“,卡上打印的ID为"0015642441 241,48265”。我猜在旧的程序(读卡片)中,开发人员使用了这样的方法:
private char[]const HexpartsReadline = new char[16] {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F'
string text = RFID_Port.ReadLine ();
if (textparser.Length == 10) {
string text2 = "";
string text3 = text;
foreach (char c in text3) {
text2 += Hexparts [on(byte)c - 48];
}
LastKart = text2;
LastKartView ='data', DateTimeconsole.Now;
}
}
};这是我第一次使用RFID卡,所以很难用它来包装我的头。你能协助我如何达到我想要的结果吗?
谢谢。
//更新
我想我找到了一个模式,我检查了多张卡片,开头总是这样的(去掉了空格)。
Card 1:
00
18181818
9898e098
7ee01898f8 #this line changes
18
f8
Card 2:
00
18181818
9898e098
f898e6187e7e
18
f8
Card3:
00
18181818
9898e098
f898187efe
18
f8//更新还没有弄清楚如何解决这个问题,有人有主意吗?
发布于 2021-09-30 16:37:48
我使用以下代码获得了所需的结果:
var SerialPort = require('serialport');
var sp = new SerialPort('/dev/tty.usbserial-0001', {
baudRate: 4800,
});
let package = '';
const Hexparts = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
sp.on('data', (data) => {
const stringData = data.toString().trim();
if (stringData) {
package += stringData;
if (package.length == 10) {
let text2 = '';
let text3 = package;
for (const c of text3) {
text2 += Hexparts[c.charCodeAt(0) - 48];
}
const RFID_Data = text2;
console.log(RFID_Data);
}
} else {
package = '';
}
});发布于 2021-10-26 06:38:29
这取决于RFID阅读器,哪些数据是提供给你的。有些读者有一个查询CardID的特殊命令。其他人用所有其他数据输出CardID,通常CardID在末尾或开始处。ID的长度也不同于卡上的RFID芯片。使用Mifare,它们通常有6-8字节长.
https://stackoverflow.com/questions/69062774
复制相似问题