Library to run the PN532 RFID Reader
npm install pn532Driver for the PN532 NFC chip. Provides an event and promise-based API, and requires either:
- node-serialport
- node-i2c (WIP)
This implementation does not require libnfc, and should work on both X86 (32-bit or 64-bit) and ARM (RPi / Beaglebone) systems
Tested on a Mac OSX 10.9 system using a UART/FTDI cable to an Adafruit breakout board
and on a BeagleBone using UART. I2C support is currently a WIP at the moment.
API is subject to change until the 1.0.0 release
and npm install serialport or npm install i2c
#### UART (using node-serialport)
``js
var pn532 = require('pn532');
var SerialPort = require('serialport').SerialPort;
var serialPort = new SerialPort('/dev/tty.usbserial-AFWR836M', { baudrate: 115200 });
var rfid = new pn532.PN532(serialPort);
`
#### I2C (using node-i2c)
`js
var pn532 = require('pn532');
var i2c = require('i2c');
var wire = new i2c(pn532.I2C_ADDRESS, {device: '/dev/i2c-1'});
var rfid = new pn532.PN532(wire);
`
#### Scan a tag
`js`
rfid.on('ready', function() {
rfid.scanTag().then(function(tag) {
console.log('tag:', tag.uid);
});
});
#### Poll for a tag
`js`
rfid.on('ready', function() {
console.log('Listening for a tag scan...');
rfid.on('tag', function(tag) {
console.log('tag:', tag.uid);
});
});
#### Retrieve the firmware version
`js`
rfid.on('ready', function() {
rfid.getFirmwareVersion().then(function(data) {
console.log('firmware: ', data);
});
});
#### Read
`js`
rfid.on('ready', function() {
rfid.on('tag', function(tag) {
rfid.readNdefData().then(function(data) {
var records = ndef.decodeMessage(Array.from(data));
console.log(records);
});
});
});`
#### Writejs
rfid.on('ready', function() {
rfid.scanTag().then(function(tag) {
var messages = [
ndef.uriRecord('http://www.google.com'),
ndef.textRecord('test')
];
var data = ndef.encodeMessage(messages);
rfid.writeNdefData(data).then(function(response) {
console.log('Write successful');
});
});
});
`
directory$3
PN532_LOGGING=debug node examples/card_scan.js$3
If you are using this library on a Raspberry Pi 3, you will likely encounter an issue with the device sending or receiving data over UART due to some hardware and configuration changes with regards to the serial port.TLDR workaround:
1. Add
core_freq=250 in the /boot/cmdline.txt
2. Use /dev/ttyS0 instead of /dev/ttyAMA0`For details on why these changes are needed, see here and here