Libnfc:Arduino
(→Libnfc) |
(→Libnfc) |
||
Line 2: | Line 2: | ||
=Libnfc= | =Libnfc= | ||
− | Download libnfc | + | Download libnfc 1.7.1 |
{{#fileanchor: libnfc_arduino.sh}} | {{#fileanchor: libnfc_arduino.sh}} | ||
<source lang=bash> | <source lang=bash> | ||
git clone https://code.google.com/p/libnfc/ | git clone https://code.google.com/p/libnfc/ | ||
cd libnfc | cd libnfc | ||
+ | git checkout libnfc-1.7.1 | ||
</source> | </source> | ||
Download this [{{#file: pn532_uart.patch}} patch]: | Download this [{{#file: pn532_uart.patch}} patch]: |
Revision as of 18:39, 6 March 2014
How to use a PN532 board with Arduino to make a reader compatible with libnfc
Contents |
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 "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=..."):
./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)
TODO ONGOING
Above steps are available in this script libnfc_arduino.sh
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