1. GDG DevFest Córdoba - 31 Oct 2014
Comunicación NFC entre
Raspberry Pi y Android
Nacho Álvarez
@neonigmacdb
✉ neonigma@gmail.com
http://www.nacho-alvarez.es
2. Acerca de mí
● Ingeniero en Informática por la UCO
● Trayectoria profesional:
○ Soporte Servicio Informática UCO
○ Desarrollo Web
○ Desarrollo / Integración distribuciones GNU/Linux
○ Android mobile + backend developer (WUL4)
○ Actualmente: Área de Innovación (Redsys)
1/32
3. Índice
1) NFC
a) Visión general
b) Modos
c) Beam, NDEF y ejemplo
2) Raspberry Pi
a) Definición y proyectos
b) Componentes
c) Opciones
d) GPIO
3) Explore-NFC
4) Demo 2/32
4. NFC - Visión general
● Near Field Communication es una tecnología de comunicación
inalámbrica, de corto alcance y alta frecuencia que permite el
intercambio de datos entre dispositivos.
● Los estándares de NFC cubren protocolos de comunicación y
formatos de intercambio de datos, y están basados en ISO 14443
(RFID, radio-frequency identification) y FeliCa
● El protocolo NFCIP-1 puede funcionar a diversas velocidades
como 106, 212, 424 o 848 Kbit/s (BLE4 24Mbit/s) y trabaja en la
banda de 13,56MHz 3/32
5. ● En el modo R/W, podemos leer tags NDEF y tarjetas contactless como las
relativas al uso de transportes.
● En el modo P2P se puede realizar un intercambio de información entre el
móvil y otro dispositivo NFC gracias a Android Beam, una API que sin
embargo aún se queda un poco corta.
● El modo CE (Card Emulation) fue introducido en versiones posteriores
de Gingerbread para soportar el uso de Google Wallet. El elemento seguro
embebido se conecta al controlador NFC a través de una conexión S2C
(NFC-WI).
NFC - Modos en Android
4/32
6. NFC - Host Card Emulation
● Novedad de Android 4.4 (KitKat): soporte de la
especificación Host Card Emulation (HCE) para pagos
móviles con NFC
● Cualquier aplicación puede representar virtualmente y
de forma segura a través de NFC una tarjeta
inteligente
● Permite realizar una transacción sin necesidad de
usar el Secure Element (elemento seguro). 5/32
7. NFC - Host Card Emulation
● Aparecen multitud de soluciones con esta
apertura:
○ Visa PayWave
○ Mastercard
○ Vodafone Wallet
○ Isis Mobile Wallet
○ Y algunas más...
6/32
8. NFC - P2P: protocolo SNEP
● Logical Link Control Protocol (LLCP): define un
protocolo a nivel de capa 2 (enlace de datos) para
soportar comunicación P2P entre dos dispositivos con
NFC.
● Simple NDEF Exchange Protocol (SNEP): protocolo
del NFC Forum que permite a una app de un
dispositivo con NFC intercambiar mensajes NDEF con
otro dispositivo cuando ambos operan en modo P2P.
Hace uso de LLCP para el intercambio de datos.
● NDEF Push Protocol (NPP): protocolo cliente-
servidor de Google que permite la transferencia entre
dispositivos NFC operando en modo P2P.
7/32
9. Android Beam
● Sistema de transmisión de contenido entre dispositivos
utilizando las tecnologías NFC y/o Bluetooth
● Disponible desde Ice Cream Sandwich
● Si lo que compartimos son URLs o archivos muy poco
pesados se intercambiarán mediante NFC
● Si los archivos son más pesados, como vídeos o fotos, se
activará automáticamente el Bluetooth y se desactivará al
terminarse la transmisión
● Debemos tener visible en la pantalla el contenido a
compartir y unir las partes traseras de los dispositivos 8/32
10. Mensajes NDEF
● NDEF -NFC Forum Data Exchange Format- es un formato ligero
de mensaje binario diseñado para encapsular una o más cargas
útiles de información dentro de un mensaje simple.
● Un mensaje NDEF contiene uno o más registros NDEF, cada uno
de los cuales transporta una carga de información de tipo
arbitrario.
● Un registro NDEF transporta tres parámetros de cabecera para
describir su payload: tipo, identificador opcional y longitud.
9/32
12. Ejemplo NFC Android
● Ejemplo de transmisión de
un texto personalizado de un
terminal a otro vía NFC (las
partes interesantes)
● Código disponible en: https:
//bitbucket.
org/jialvarez/android-beam-
p2p-demo
11/32
13. Ejemplo NFC Android
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
Time time = new Time();
time.setToNow();
NdefMessage msg = new NdefMessage(
new NdefRecord[] { createMimeRecord(
"text/plain", “ola k ase”.getBytes())
});
return msg;
}
12/32
14. Ejemplo NFC Android
public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
NdefRecord mimeRecord = new NdefRecord(
NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
return mimeRecord;
}
@Override
public void onNewIntent(Intent intent) {
setIntent(intent);
}
13/32
16. Raspberry Pi
● Microordenador lanzado en Febrero 2012 por la Raspberry Pi
Foundation
● Hasta la fecha, han aparecido 3 versiones:
○ Modelo A
○ Modelo B
○ Modelo B+
● Puede comprarse en varias tiendas:
○ RS Online: http://es.rs-online.com/web/generalDisplay.html?
id=raspberrypi
○ Farnell: http://es.farnell.com/raspberry-pi 15/32
17. Raspberry Pi: Proyectos
● Algunos proyectos interesantes que utilizan Raspberry Pi +
Android
○ Fing + ConnectBot (Obtener IP local + SSH)
○ Streaming video con VLC (Pi) + VLC Beta (Android)
○ Mando remoto de XBMC
○ Control remoto de coches Lego https://www.youtube.
com/watch?v=5K_Eyxi56tk
○ FTP, VNC, etc...
16/32
18. Raspberry Pi components
SoC Broadcom BCM2835
CPU ARM 1176JZFS a 700MHz
GPU Videocore 4
RAM 512 MB (256 MB al principio)
Video HDMI y RCA
Resolución 1080p
Audio HDMI y 3.5 mm
USB 2 x USB 2.0
Redes Ethernet 10/100
17/32
22. Raspberry Pi - GPIO
● Acrónimo de General Purpose Input/Output
● Este puerto de expansión permite a los periféricos y placas de
expansión acceder a la CPU mediante la exposición de entradas y
salidas. 26 pins en modelo B y 40 pins en B+.
● Ejemplos de programación de GPIO con Scratch: http://pihw.
wordpress.com/lessons/rgb-led-lessons/rgb-led-lesson-2-scratch-
gpio-getting-started/
● Ejemplos con Python: http://makezine.com/projects/tutorial-
raspberry-pi-gpio-pins-and-python/
21/32
23. Raspberry Pi - GPIO
● SPI
Serial Peripheral Interface:
estándar para controlar un
dispositivo electrónico digital
que acepte un flujo de bits serie
regulado por un reloj
● UART
Universal Asynchronous
Receiver-Transmitter, se
encuentra en placas base,
convierte datos paralelo a serie
● I²C
Inter-Integrated Circuit, para
comunicar microcontroladores y
sus periféricos en sistemas
integrados
22/32
24. Explore-NFC en Raspberry
● Basado en solución NXP PN512
● Cumple con los tres modos de operación: reader, P2P y Card
Emulation
● Soportada por libnfc, ofrece una interfaz SPI flexible
● Software:
○ libnfc - SDK de bajo nivel
○ nfcpy (no soportado por ahora )
○ Open source code propio - http://www.element14.
com/community/community/designcenter/explorenfc
○ Python Wrapper - https://github.com/svvitale/nxppy 23/32
25. Software Explore-NFC
● El software se entrega en 3 paquetes: uno por cada modo NFC
● Se descomprime cada paquete y se compila cada aplicación
preparada con CMake
● El código está escrito en C
● Tienen una documentación muy buena: http://www.element14.
com/community/docs/DOC-65447/l/explore-nfc-software-and-
project?ICID=designcenter-devkitnfc-quick
24/32
27. Explore-NFC: polling
● Se utiliza para saber de qué tipo es una tarjeta
● Se realiza un proceso continuo de búsqueda de este tipo de
tarjetas:
○ MiFare
○ Felica
○ ISO/IEC 14443B
● También se buscan tarjetas de débito/crédito con NFC
lanzando el PSE: 1PAY.SYS.DDF01 y el 2PAY.SYS.DDF0126/32
28. Explore-NFC: card emulation
● El sistema consta de tres partes:
○ App Android que permite leer, componer y enviar
mensajes a la Raspberry vía NFC
○ App C para el intercambio de datos
○ App Java que toma el mensaje recibido del
smartphone y lo postea en tu muro de Facebook 27/32
30. Explore-NFC: P2P com
● Ejemplo de transferencia de datos utilizando protocolo P2P
● Enviaremos una imagen de la Raspberry a nuestro terminal
Android
● Se utiliza internamente protocolo LLCP + SNEP
● La imagen se transfiere íntegramente por NFC, con las
limitaciones de velocidad conocidas
29/32
31. Explore-NFC: own P2P
● Veremos un pequeño programa en Python que simula un
comercio
● El comerciante escribe el importe de la compra del cliente
(como en los pinpads)
● El sistema solicita al cliente que toque su móvil en la
Raspberry
● Se realiza la transferencia de datos necesaria hacia la
Raspberry y el sistema procesa el pago, enviando
confirmación al móvil
● Podemos añadir multitud de elementos: autenticación
biométrica, GCM pushes, tokenización... 30/32