UHF RFID阅读器连接到NodeJS

怎么了


UHF阅读器使您可以控制10米距离的标签,这为各种用途提供了有趣的前景。 最明显的是对车辆通过的控制。 但是您可以想出更多奇特的选择:车库/谷仓中的设备控制。 小偷几乎不可能想到将RFID标签粘贴到自行车(工具箱)上,并且他能够在观察到的周界之外报告自己的离开。
NodeJS + RaspberryPI是用于数据处理和外围设备管理的灵活且廉价的服务器。

配套设备


我参加了CF-RU5109(CHAFON)测试,它支持RS232,RS485,Wiegand,TCP连接。 (我只是为了方便测试设备才需要TCP)
型号页-CF-RU5109

标签-带Alien H3芯片的RFID Gen2超高频纸质标签

阅读范围。 实验表明,读取取决于标签的活动(标签在空间中的移动)。 我自信地在3米的距离上读取了一个被动躺着的标记,而在微弱的移动中(5-5.5米,在8米的距离上),我不得不主动挥手。 我的阅读器具有内置的9dbi天线。





软体类


该阅读器随附一个SDK,命令的详细说明以及Windows的多个测试程序。 我使用该软件只是为了尝试与Reader一起使用-使用NodeJS不需要任何东西。

连接到节点


tcpclient.prototype.Start = function () { client = new net.Socket(); client.setEncoding('ascii'); client.connect(6000, '192.168.0.190', function() { }); client.on('connect', function(data) { console.log('UHF reader connected'); var bytes = Buffer.from([0x04, 0xff, 0x21, 0x19, 0x95], "ascii"); client.write(bytes); client.on('data', function(data) { console.log('UHF reader respond:'); var buffer = Buffer.from(data, "ascii"); console.log(buffer); }); }); client.on('close', function() { console.log('UHF reader - connection closed'); }); client.on('error', function(err) { console.log(err) }); }; tcpclient.prototype.Write = function (req) { var bytes = new Buffer(req, "ascii"); console.log(bytes); client.write(bytes); }; 

从手册。 命令块的结构如下:
Len,Adr,Cmd,数据[],LSB-CRC16,MSB-CRC16

最后两个字节是CRC16校验和,多项式为0x8408,起始编号为0xFFFF。 字节以相反的顺序显示。 制造商请提供用于计算的C代码,我将其重写为JS(请参见下文)。

因此,[0x04、0xff,0x21、0x19、0x95]是在默认地址FF处请求读取器状态的命令。 04长度,21指令,19和95-CRC16校验和。

 var PRESET_VALUE = 0xFFFF; var POLYNOMIAL = 0x8408; var CRC16 = function (pucY) { var uiCrcValue = PRESET_VALUE; for(var i = 0; i < pucY.length; i++){ uiCrcValue = uiCrcValue ^ (pucY[i]); for(var j = 0; j < 8; j++){ if(uiCrcValue & 0x0001){ uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL; } else { uiCrcValue = (uiCrcValue >> 1); } } } var buf = Buffer.from(uiCrcValue.toString(16), 'hex'); buf = Buffer.from([buf[1], buf[0]], 'hex'); return buf; }; //CRC16([0x04, 0xff, 0x21]); //returns <Buffer 19 95> 

命令示例


库存 -要求读取单个卡。 在接听模式下行动

 req =[0x04, 0x00, 0x01, 0xdb, 0x4b]; tcpClient.Write(req); 

如果商标在眼前,那么我们得到答案
超高频阅读器回应:
<缓冲区13 00 01 01 01 0c 62 00 51 79 17 19 00 04 05 60 5b 28 2f 24>
62 00 51 79 17 19 00 04 05 60 5b 28是标签标签。

切换阅读器操作模式


应答模式 :[0x0a,0x00、0x35、0x00、0x02、0x01、0x00、0x01、0x00、0x2a,0x9f]
扫描/主动模式 :[0x0a,0x00、0x35、0x01、0x02、0x01、0x00、0x01、0x00、0x01、0x9b]。 在这种模式下,阅读器会不断轮询标签并为其提供标签。

接下来是什么?


然后,如果需要一个简单的解决方案,那么我们要么编写代码,然后定期发送0x01(清单)命令。 可见性区域中的标签会提供标签,我们将它们与数据库一起检查并启动适当的操作。 或者我们编写一个代码,在恒定扫描模式下,等待标签落入可见范围并响应事件。

Source: https://habr.com/ru/post/zh-CN423369/


All Articles