NFC es una tecnología de comunicación inalámbrica que a través de la inducción de un campo magnético permite la comunicación entre dos dispositivos.
Esta tecnología es una variante de la RFID que quizás nos suene mas no por su nombre si no por los usos que se le ha dado. Por ejemplo podemos encontrarla en tarjetas como método de pago para el transporte urbano, para las máquinas expendedoras de la oficina, en los chips implantados en los perros que almacenan los datos del can y su dueño, etc.
Pues bien, esta variante indica que la frecuencia de los dispositivos ha de ser de 13.56 Mhz y que su distancia máxima a cubrir será de 10 cm en el mejor de los casos, aunque esto último depende de las antenas de los dispositivos.
Últimamente con los smartphones de gama alta se está poniendo de moda ya que permiten darles bastantes usos. El principal de todos ellos era/es el de realizar pagos en tiendas físicas, sin embargo no es algo que haya proliferado aquí, aunque si en otros países, otros usos son el de programación de perfiles para el móvil, de modo que dependiendo de qué etiqueta/tag/llavero NFC leas el móvil se configure de determinada forma.
Ahora que ya tenemos una idea de que es y que usos se les puede dar vamos a lo que realmente nos ocupa, que es la revisión de una Shield NFC para Arduino cedida por dealextreme.com
Shield NFC para Arduino
La shield o placa de expansión, que en adelante la nombrare como la placa, a revisar está fabricada por ElecFreaks, el mismo fabricante que el Freaduino revisado hace un tiempo. Dealextreme vende muchos de sus productos, entre ellos esta placa que puede comprarse desde aquí: Shield NFC para Arduino.
La placa viene en una caja de cartón junto a los elementos imprescindibles para hacerla funcionar, en este caso la propia placa, un dispositivo NFC con forma de tarjeta de crédito y unos conectores hembra que necesitaremos soldar si queremos poder pinchar otras shields encima de esta.
La placa al tener una forma entandar, la de shield de expansión para Arduino, la hace compatible también con otras plataformas de desarrollo, ya sean los Arduinos oficiales, los compatibles como el Freaduino, los netDuino, etc. Esta es la apariencia que tiene en alguno de ellos:
Puede observarse como la placa una vez conectada queda expuesta hacia el exterior, eso aunque queda un poco anti estético es necesario por si conectamos otras shields encima ya que de lo contrario la antena NFC de la placa quedaría oculta e imposibilitaría su uso.
La placa NFC esta compuesta de toda la circuitería necesaria para funcionar, esto incluye el controlador PN532 capaz de soportar los protocolos ISP, I2C y UART Serial, la antena NFC que permite leer dispositivos hasta un máximo de 5 cm, dos leds que indican el estado, el cristal de cuarzo del controlador, condensadores, resistencias, etc.
Esta placa para funcionar hace uso del protocolo ISP, aunque teóricamente mediante unos "jumpers" que tiene puede cambiarse para usar el I2C o UART, y para realizar la conexión es tan sencillo como pinchar la placa sobre el Arduino. La he probado en un Arduino Duemilanove/Uno y en un moDuino basado en un Arduino Mega, en ambas ha funcionado correctamente.
Librería para usar la Shield NFC
Con la placa no se incluye ningún CD con las librerías necesarias para su uso en Arduino pero si que están tanto en la descripción del producto de dealextreme como en la página del fabricante.
Además como la placa se basa en el chip PN532, que es bastante común, nos encontramos que hay muchas librerías por internet, la gran mayoría están basadas en la de Adafruit y luego han sido modificadas para soportar un protocolo de comunicación concreto y para quitar o añadir funcionalidades.
Por ejemplo la librería del fabricante nos permite obtener el número identificativo único de cada dispositivo NFC (su ID), además de leer y escribir en la memoria EEPROM que suelen tener estos dispositivos. Pero no incluye la funcionalidad de comunicación entre dos shields NFC o entre la placa y un móvil. Otras librerías sí que incluyen algunas funcionalidades de esas, pero como digo su funcionamiento depende del protocolo de comunicación, así que si necesitamos algo "raro" será mejor que nos informemos antes de si es posible darle ese uso.
- Librería del fabricante de esta placa
- Librería de otro fabricante compatible
- Librería original no compatible (usa I2C)
Para todos los ejemplos que se verán más adelante yo he usado la librería original, aunque la he modificado ya que tal y como viene tenia algunos detalles que no me gustaban nada:
- De serie solo es compatible con el IDE viejo de Arduino, así que le añadí compatibilidad con la versión 1.x
- No viene nada de documentación sobre cómo usar sus métodos o qué parámetros se les ha de pasar, por ello extraje la información de otras librerías e incluí toda la que pude.
- La librería tiene un modo debugger que hace que se imprima por pantalla determinada información, había alguna información que aun teniendo desactivado ese modo se imprimía igual, así que arregle eso ya que puede darnos problemas si quisiéramos enviar datos por el Serial ya que el pc podría leer la basura metida por la librería.
- He añadido dos métodos para poder leer y escribir la totalidad de la memoria EEPROM de forma consecutiva, esto permite escribir texto o estructuras de datos.
- Y por último ordene el código que estaba muy mal formateado.
Enlace a la librería modificada por mí
Tarjetas, llaveros y otros dispositivos NFC
Con la placa se incluye un dispositivo NFC con forma de tarjeta de crédito, de hecho su tamaño y grosor son idénticos así que podemos llevarlo en el hueco para tarjetas de la cartera/monedero. Esta incorpora en su interior un espacio de memoria EEPROM en el que podemos leer y escribir los datos que queramos, aunque para hacerlo hay que tomar unas precauciones que explico en el siguiente punto.
A parte de la tarjeta existen muchos otros dispositivos NFC, en ebay mismo venden llaveros NFC como los de la foto y que revise aquí, o algunos otros mas curiosos con apariencia de llavero o como pegatinas.