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