El lector RFID UHF se conecta a NodeJS

Por qué


UHF Reader le permite proporcionar control sobre las etiquetas a una distancia de 10 metros, lo que ofrece perspectivas interesantes para diversos usos. Lo más obvio es el control del paso de vehículos. Pero puede encontrar opciones más exóticas: control de equipos en el garaje / establo. Es casi imposible que un ladrón piense que una etiqueta RFID está pegada a una bicicleta (una caja de herramientas) y puede informar su partida fuera del perímetro observado.
NodeJS + RaspberryPI es un servidor flexible y económico para el procesamiento de datos y la gestión periférica.

Equipo


Tomé para las pruebas CF-RU5109 (CHAFON), que admite la conexión RS232, RS485, Wiegand, TCP. (Necesito TCP solo para la conveniencia de probar equipos)
Página del modelo - CF-RU5109

Etiquetas - etiqueta de papel rfid gen2 uhf con chip Alien H3

Rango de lectura Los experimentos han demostrado que la lectura depende de la actividad de la etiqueta (su movimiento en el espacio). Una marca de mentira pasiva se lee con confianza a una distancia de 3 metros, moviéndose débilmente: 5-5.5 metros, a una distancia de 8 metros Tuve que agitar activamente mi mano. Mi lector tiene una antena incorporada de 9dbi.





Software


El lector viene con un SDK, una descripción detallada de los comandos, varios programas de prueba para Windows. Utilizo este software solo para tratar de trabajar con el Reader, no necesitamos nada de trabajar con NodeJS.

Conectarse al nodo


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); }; 

Del manual. El bloque de comandos está estructurado así:
Len, Adr, Cmd, Datos [], LSB-CRC16, MSB-CRC16

Los dos últimos bytes son la suma de verificación CRC16, con el polinomio 0x8408, el número de inicio 0xFFFF. Los bytes se muestran en orden inverso. El fabricante proporcionó amablemente el código C para el cálculo, y lo reescribí en JS (ver más abajo).

En consecuencia, [0x04, 0xff, 0x21, 0x19, 0x95] es un comando que solicita el estado del lector en la dirección predeterminada FF. 04-length, 21-command, 19 y 95 - suma de verificación 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> 

Ejemplos de comandos


Inventario : una solicitud para una sola lectura de tarjeta. Actúa en modo respuesta

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

Si la marca está a la vista, entonces obtenemos la respuesta
El lector UHF responde:
<Tampón 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 es la etiqueta.

Cambiar los modos de operación del lector


Modo de respuesta : [0x0a, 0x00, 0x35, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x2a, 0x9f]
Modo de escaneo / activo : [0x0a, 0x00, 0x35, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x9b]. En este modo, el lector sondea constantemente las etiquetas y les da etiquetas.

Que sigue


Y luego, si se requiere una solución simple, entonces escribimos código que envía periódicamente el comando 0x01 (Inventario). Las etiquetas en la zona de visibilidad dan sus etiquetas, las verificamos con la base de datos e iniciamos las acciones apropiadas. O escribimos un código que, en el modo de exploración constante, espera a que la etiqueta caiga dentro del rango de visibilidad y responde con un evento.

Source: https://habr.com/ru/post/es423369/


All Articles