Uhf Rfid-Считыватель, Подключенный К Nodejs



За что? UHF Reader позволяет отслеживать метки на расстоянии до 10 метров, что открывает интересные перспективы для различного использования.

Наиболее очевидным является контроль доступа транспортных средств.

Но можно придумать и более экзотические варианты: оборудование для наблюдения в гараже/сарае.

Вряд ли вор поймет, что к велосипеду (чемодану с инструментами) прикреплена RFID-метка и он способен сообщить о своем выезде за пределы наблюдаемого периметра.

NodeJS + RaspberryPI — гибкий и дешевый сервер для обработки данных и управления периферией.



Оборудование

На тестирование я взял CF-RU5109 (CHAFON), который поддерживает соединения по RS232, RS485, Wiegand, TCP. (ТСР мне нужен только для удобства тестирования оборудования) Страница модели - CF-RU5109 Теги — бумажная бирка RFID gen2 UHF с чипом Alien H3 Диапазон чтения.

«Эксперименты показали, что чтение зависит от активности метки (ее перемещения в пространстве).

Пассивно лежащая метка читалась уверенно на расстоянии 3 метров, слабоподвижная - 5-5,5 метров, на расстоянии 8 метров приходилось активно махать рукой.

У моего ридера встроенная антенна 9 дБи.



UHF RFID-считыватель, подключенный к NodeJS



UHF RFID-считыватель, подключенный к NodeJS



Программное обеспечение

В комплект поставки Reader входит 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, Data[], 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);

Если отметка находится в зоне видимости, мы получим ответ

Читатель УВЧ отвечает:
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 (Инвентаризация).

Теги в зоне видимости сдают свои теги, мы сверяем их с базой данных и инициируем соответствующие действия.

Либо пишем код, который в режиме постоянного сканирования ждёт попадания метки в зону видимости и реагирует событием.

Теги: #JavaScript #node.js #RFID #uhf #Gen.2

Вместе с данным постом часто просматривают: