====== @amperka/nfc ======
Библиотека для работы с [[amp>product/troyka-rfid-nfc-1356|NFC-сканерами]] и [[amp>product/rfid-card-1356-mifare-ultralight|метками]].
Позволяет работать с картами 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);
});
===== Функции модуля =====
func:: connect(pins)
Создаёт новый объект NFC. Объект ''pins'' должен содержать поля:
* ''i2c'' — I2C, к которому подключен модуль, например ''I2C1''
* ''irqPin'' — пин прерывания.
class:: NFC
Класс для работы с nfc-считывателями. Для создания экземпляра используйте функцию ''connect''.
func:: NFC.wakeUp(callback)
Функция активации модуля. В функцию ''callback'' передается параметр ''error'' со значением ''true'', если активировать модуль не удалось.
nfc.wakeUp(function(error) {
if (error) {
print('wake up ERROR');
} else {
print('wake up OK');
nfc.listen();
}
});
func:: NFC.readPage(page, callback)
Функция чтения информации со страницы метки. Параметр ''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);
}
});
func:: NFC.writePage(page, data[, callback])
Функция записи информации на страницу метки. Параметр ''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');
}
});
func:: NFC.listen()
Функция устанавливает модуль в режим поиска меток. При обнаружении метки генерируется событие ''on('tag')''.
event:: NFC.on('tag', function(error, data) { … })
Событие, возникающее при поднесении метки к считывателю. Параметр ''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);
}
});