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

Функции модуля

connect(pins)

Создаёт новый объект NFC. Объект pins должен содержать поля:

  • i2c — I2C, к которому подключен модуль, например I2C1
  • irqPin — пин прерывания.

NFC

Класс для работы с nfc-считывателями. Для создания экземпляра используйте функцию connect.

NFC.wakeUp(callback)

Функция активации модуля. В функцию callback передается параметр error со значением true, если активировать модуль не удалось.

nfc.wakeUp(function(error) {
  if (error) {
    print('wake up ERROR');
  } else {
    print('wake up OK');
    nfc.listen();
  }
});

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

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

NFC.listen()

Функция устанавливает модуль в режим поиска меток. При обнаружении метки генерируется событие on('tag').

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