Libnfc:Arduino

From NFC Tools
(Difference between revisions)
Jump to: navigation, search
(Prepare Arduino)
Line 93: Line 93:
 
<source lang=bash>
 
<source lang=bash>
 
svn checkout http://mfocuino.googlecode.com/svn/trunk/nfcreader/arduino/ uartnfc
 
svn checkout http://mfocuino.googlecode.com/svn/trunk/nfcreader/arduino/ uartnfc
 +
cd uartnfc
 
</source>
 
</source>
 
now you have the lib and the sketch for your arduino :)
 
now you have the lib and the sketch for your arduino :)
  
Change baudrate in the '''uartnfc.ino''' file:
+
Change baudrate in the '''uartnfc.ino''' file to 230400:
 
<source lang=c>
 
<source lang=c>
 
void setup(void)
 
void setup(void)
 
{
 
{
   Serial.begin('''230400'''); //115200, 230400(, 460800, 921600)
+
   Serial.begin(230400); //115200, 230400(, 460800, 921600)
 
   Serial.flush();
 
   Serial.flush();
 
   nfc.begin();
 
   nfc.begin();

Revision as of 23:31, 6 March 2014

How to use a PN532 board with Arduino to make a reader compatible with libnfc

Contents

Prepare Libnfc

Download libnfc 1.7.1

git clone https://code.google.com/p/libnfc/
cd libnfc
git checkout libnfc-1.7.1

Download this patch:

--- libnfc/drivers/pn532_uart.c	(unpatched)
+++ libnfc/drivers/pn532_uart.c	(patched)
@@ -48,7 +48,7 @@
 #include "chips/pn53x-internal.h"
 #include "uart.h"
 
-#define PN532_UART_DEFAULT_SPEED 115200
+#define PN532_UART_DEFAULT_SPEED 230400
 #define PN532_UART_DRIVER_NAME "pn532_uart"
 
 #define LOG_CATEGORY "libnfc.driver.pn532_uart"
@@ -306,6 +306,7 @@ pn532_uart_wakeup(nfc_device *pnd)
   const uint8_t pn532_wakeup_preamble[] = { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
   int res = uart_send(DRIVER_DATA(pnd)->port, pn532_wakeup_preamble, sizeof(pn532_wakeup_preamble), 0);
   CHIP_DATA(pnd)->power_mode = NORMAL; // PN532 should now be awake
+  sleep(4);
   return res;
 }

This can be done with

wget --content-disposition "http://nfc-tools.org/index.php?title=Libnfc:Arduino&action=raw&anchor=pn532_uart.patch"

Then apply it:

patch -p0 < pn532_uart.patch

Compile with pn532_uart driver (or all drivers if you remove "--with-drivers=..."):

autoreconf -vis
./configure --with-drivers=pn532_uart --sysconfdir=/etc --prefix=/usr
make clean all

and install it on your system:

sudo make install

(if libnfc was installed before, it should be deleted before installing it)

Set configuration by creating /etc/nfc/libnfc.conf as

# Allow device auto-detection (default: true)
# Note: if this auto-detection is disabled, user has to set manually a device
# configuration using file or environment variable
allow_autoscan = false
 
# Allow intrusive auto-detection (default: false)
# Warning: intrusive auto-detection can seriously disturb other devices
# This option is not recommended, user should prefer to add manually his device.
allow_intrusive_scan = false
 
# Set log level (default: error)
# Valid log levels are (in order of verbosity): 0 (none), 1 (error), 2 (info), 3 (debug)
# Note: if you compiled with --enable-debug option, the default log level is "debug"
log_level = 2
 
# Manually set default device (no default)
# To set a default device, you must set both name and connstring for your device
# Note: if autoscan is enabled, default device will be the first device available in device list.
device.name = "PN532 NFC Board on Arduino"
device.connstring = "pn532_uart:/dev/ttyACM0:230400"


sudo mkdir -p /etc/nfc/devices.d
cd /etc/nfc/devices.d
wget --content-disposition "http://nfc-tools.org/index.php?title=Libnfc:Arduino&action=raw&anchor=libnfc.conf"

All above steps are available in this script libnfc_arduino.sh

Check if /dev/ttyACM0 is well your Arduino port, else adapt this script.

Prepare Arduino

Download:

svn checkout http://mfocuino.googlecode.com/svn/trunk/nfcreader/arduino/ uartnfc
cd uartnfc

now you have the lib and the sketch for your arduino :)

Change baudrate in the uartnfc.ino file to 230400:

void setup(void)
{
  Serial.begin(230400); //115200, 230400(, 460800, 921600)
  Serial.flush();
  nfc.begin();
}

Upload the sketch to the Arduino, e.g. via the Arduino IDE.

Prepare hardware

Check if your PN532 board needs some soldering to activate the SPI, then wire it to the Arduino as following:

 Arduino       PN532 board (SPI)
 Pin 13  <-->  SCK
 Pin 12  <-->  MISO
 Pin 11  <-->  MOSI (/SDA/TX)
 Pin 10  <-->  SS   (/NSS/SCL/RX)
 GND     <-->  GND
 3,3V    <-->  3,3V (VCC)

Test

root@kali:~# nfc-list
nfc-list uses libnfc libnfc-1.7.0-91-g491db20
NFC device: pn532_uart:/dev/ttyACM0 opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04  
       UID (NFCID1): a5  09  fd  e5  
      SAK (SEL_RES): 08  

Links

Personal tools
Namespaces

Variants
Actions
Navigation
Documentation
Misc
Toolbox
Partners