Libnfc:Arduino

From NFC Tools
(Difference between revisions)
Jump to: navigation, search
(Created page with "Tips about using libnfc with Arduino Category:Libnfc Category:Libnfc:Examples")
 
Line 1: Line 1:
Tips about using libnfc with Arduino
+
(Tips about using libnfc with Arduino)
 +
 
 +
'''How I got my cheap PN532 board working with Arduino and Libnfc:'''<br>
 +
 
 +
<br>
 +
=Libnfc=
 +
==download==
 +
 
 +
git clone https://code.google.com/p/libnfc/
 +
 
 +
<br>
 +
==patch==
 +
copy this into '''/libnfc/pn532_uart.patch''' (not /libnfc/libnfc/pn532_uart.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;
 +
  }
 +
 
 +
 
 +
and than:
 +
 
 +
patch -p0 < pn532_uart.patch
 +
 
 +
<br>
 +
==compile==
 +
with pn532_uart driver:
 +
 
 +
./configure --with-drivers=pn532_uart --sysconfdir=/etc --prefix=/usr
 +
make clean all
 +
 
 +
or with all possible drivers:
 +
 
 +
autoreconf -vis
 +
./configure --sysconfdir=/etc --prefix=/usr
 +
make clean all
 +
 
 +
 
 +
and to use it with tools like mfoc:
 +
 
 +
sudo make install
 +
 
 +
(if libnfc was installed before, it should be deleted before this command)
 +
 
 +
<br>
 +
==set config==
 +
(maybe sudo)
 +
 
 +
mkdir /etc/nfc
 +
mkdir -p /etc/nfc/devices.d
 +
touch /etc/nfc/libnfc.conf
 +
 
 +
and '''/etc/nfc/libnfc.conf''' should look like this:
 +
 
 +
# 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"
 +
 
 +
(maybe '''/dev/ttyACM0''' is not your arduino port)
 +
 
 +
<br>
 +
=Arduino=
 +
==download==
 +
(we only need the arduino files)
 +
 
 +
svn checkout http://mfocuino.googlecode.com/svn/trunk/nfcreader/arduino/ uartnfc
 +
 
 +
now you have the lib and the sketch for your arduino :)
 +
 
 +
<br>
 +
==change baudrate==
 +
in the '''uartnfc.ino''' file:
 +
 
 +
void setup(void)
 +
{
 +
  Serial.begin('''921600'''); //460800, 115200
 +
  Serial.flush();
 +
  nfc.begin();
 +
}
 +
 
 +
change to:
 +
 
 +
void setup(void)
 +
{
 +
  Serial.begin('''230400'''); //115200, 230400(, 460800, 921600)
 +
  Serial.flush();
 +
  nfc.begin();
 +
}
 +
 
 +
<br>
 +
==upload==
 +
I used the Arduino IDE.
 +
 
 +
<br>
 +
==pins==
 +
maybe some solder work should be done to use SPI, if not this should work:
 +
 
 +
  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)
 +
 
 +
<br>
 +
=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 
 +
 
 +
<br>
 +
=Links=
 +
 
 +
http://code.google.com/p/mfocuino/<br>
 +
http://www.libnfc.org/community/topic/1169/how-to-connect-a-pn532-nfc-modul-to-an-arduino-to-use-libnfc-with-it/<br>
 +
http://regnerischernachmittag.wordpress.com/2013/05/13/libnfc-mit-arduino-nfc-shield-nutzen/ (german)<br>
 +
http://robospatula.blogspot.de/2014/01/configure-install-libnfc-linux-PN532-breakout-board.html<br>
 +
http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_93&products_id=2205<br>
  
 
[[Category:Libnfc]]
 
[[Category:Libnfc]]
 
[[Category:Libnfc:Examples]]
 
[[Category:Libnfc:Examples]]

Revision as of 16:59, 6 March 2014

(Tips about using libnfc with Arduino)

How I got my cheap PN532 board working with Arduino and Libnfc:


Contents

Libnfc

download

git clone https://code.google.com/p/libnfc/


patch

copy this into /libnfc/pn532_uart.patch (not /libnfc/libnfc/pn532_uart.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;
 }
 

and than:

patch -p0 < pn532_uart.patch


compile

with pn532_uart driver:

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

or with all possible drivers:

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


and to use it with tools like mfoc:

sudo make install

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


set config

(maybe sudo)

mkdir /etc/nfc
mkdir -p /etc/nfc/devices.d
touch /etc/nfc/libnfc.conf

and /etc/nfc/libnfc.conf should look like this:

# 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"

(maybe /dev/ttyACM0 is not your arduino port)


Arduino

download

(we only need the arduino files)

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

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


change baudrate

in the uartnfc.ino file:

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

change to:

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


upload

I used the Arduino IDE.


pins

maybe some solder work should be done to use SPI, if not this should work:

 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

http://code.google.com/p/mfocuino/
http://www.libnfc.org/community/topic/1169/how-to-connect-a-pn532-nfc-modul-to-an-arduino-to-use-libnfc-with-it/
http://regnerischernachmittag.wordpress.com/2013/05/13/libnfc-mit-arduino-nfc-shield-nutzen/ (german)
http://robospatula.blogspot.de/2014/01/configure-install-libnfc-linux-PN532-breakout-board.html
http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_93&products_id=2205

Personal tools
Namespaces

Variants
Actions
Navigation
Documentation
Misc
Toolbox
Partners