@amperka/nfc
Библиотека для работы с NFC-сканерами и метками.
Позволяет работать с картами Mifare Ultralight: считывать ID карты, читать и записывать данные по страницам карты. Сканер подключается по протоколу I2C и использует пин прерывания IRQ
.
// настраиваем I2C1 для работы модуля I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000}); // подключаем модуль к I2C1 и пину прерывания var nfc = require('@amperka/nfc').connect({i2c: I2C1, irqPin: P10}); // активируем модуль nfc.wakeUp(function(error) { if (error) { print('wake up error', error); } else { print('wake up OK'); // слушаем новые метки nfc.listen(); } }); // указываем страницу для чтения данных var page2read = 5; nfc.on('tag', function(error, data) { if (error) { print('tag read error'); } else { // выводим в консоль полученные данные print(data); // читаем указанную страницу данных nfc.readPage(page2read, function(error, buffer) { if(error) { print('page read error'); } else { print('page read result: ', buffer); // обновляем данные для записи. Например, увеличиваем на единицу for (var i in buffer) { buffer[i]++; } // перезаписываем метку новыми данными на ту же страницу nfc.writePage(page2read, buffer, function(error) { if (error) { print('write page ERROR'); } else { print('write page OK'); } }); } }); } // каждые 1000 миллисекунд слушаем новую метку setTimeout(function () { nfc.listen(); }, 1000); });
Функции модуля
Создаёт новый объект NFC. Объект pins
должен содержать поля:
i2c
— I2C, к которому подключен модуль, напримерI2C1
irqPin
— пин прерывания.
Класс для работы с nfc-считывателями. Для создания экземпляра используйте функцию connect
.
Функция активации модуля. В функцию callback
передается параметр error
со значением true
, если активировать модуль не удалось.
nfc.wakeUp(function(error) { if (error) { print('wake up ERROR'); } else { print('wake up OK'); nfc.listen(); } });
Функция чтения информации со страницы метки. Параметр page
указывает номер читаемой страницы. В функцию callback
передаются параметры error
и buffer
. error
возвращает false
при отсутствии ошибок, а buffer
хранит 4 байта данных прочитанной страницы метки.
// указываем номер страницы для чтения var page2read = 2; nfc.readPage(page2read, function(error, buffer) { if(error) { print('page read error'); } else { // печатаем результат чтения байт данных print('page read result: ', buffer); } });
Функция записи информации на страницу метки. Параметр page
указывает номер записываемой страницы. Параметр data
должен быть массивом из четырех элементов в диапазоне 0…255. Все 4 элемента будут записаны на указанную страницу метки. При отсутствии ошибок записи параметр error
функции callback
принимает значение false
.
// указываем номер страницы для записи var page2write = 3; // подготавливаем данные для записи. var buffer = new Array(2, 0, 1, 6); nfc.writePage(page2write, buffer, function(error) { if (error) { console.log('write page ERROR', result); } else { console.log('write page OK'); } });
Функция устанавливает модуль в режим поиска меток. При обнаружении метки генерируется событие on('tag')
.
Событие, возникающее при поднесении метки к считывателю. Параметр error
имеет значение true
, если при считывании произошла ошибка. В принимаемом объекте data
находятся следующие поля:
uid
— массив, содержащий уникальный идентификатор метки. Для Mifare Ultraligth длина массива равна семи;ATQA
— контрольная сумма ответа метки. Для меток Mifare Ultraligth поле должно иметь значение 64.
nfc.on('tag', function(error, data) { if (error) { print('tag read error'); } else { // выводим в консоль полученные данные print(data); } });