Libnfc:Arduino
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://github.com/nfc-tools/libnfc.git 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/ 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
- 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