Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

33
IES Gran Capitán - 9 Febrero 2015 Comunicación NFC entre Raspberry Pi y Android Nacho Álvarez @neonigmacdb [email protected] http://www.nacho-alvarez.es

Transcript of Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Page 1: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

IES Gran Capitán - 9 Febrero 2015

Comunicación NFC entre Raspberry Pi y Android

Nacho Álvarez@neonigmacdb

[email protected]://www.nacho-alvarez.es

Page 2: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/31

Page 3: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Índice1) NFC

a) Visión generalb) Modosc) Android Beam, NDEF y ejemplo

2) Raspberry Pia) Definición y proyectosb) Componentesc) Opciones NFCd) GPIO

3) Explore-NFC4) Demo 2/31

Page 4: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/31

Page 5: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

● 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/31

Page 6: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/31

Page 7: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

NFC - Host Card Emulation● Aparecen multitud de soluciones con esta

apertura:○ Visa PayWave○ Mastercard○ Vodafone Wallet○ Isis Mobile Wallet○ Y algunas más...

6/31

Page 8: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/31

Page 9: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/31

Page 10: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/31

Page 11: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Mensajes NDEF

10/31

Page 12: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/31

Page 13: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Ejemplo NFC Android@Overridepublic 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/31

Page 14: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Ejemplo NFC Androidpublic 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;

}@Overridepublic void onNewIntent(Intent intent) {

setIntent(intent);}

13/31

Page 15: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Ejemplo NFC Android@Overridepublic void onResume() {

super.onResume();if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction()))

processIntent(getIntent());}void processIntent(Intent intent) {

Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);NdefMessage msg = (NdefMessage) rawMsgs[0];mInfoText.setText(new String(msg.getRecords()[0].getPayload()));

} 14/31

Page 16: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Raspberry Pi● Microordenador lanzado en Febrero 2012 por la Raspberry Pi Foundation● Hasta la fecha, han aparecido 4 versiones:

○ Modelo A○ Modelo B○ Modelo B+○ Modelo 2B

● 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/31

Page 18: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Raspberry Pi B componentsSoC 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/31

Page 19: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Raspberry Pi B+

18/31

Page 20: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Raspberry Pi 2 Model B

19/31

Page 21: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Opciones NFC Raspberry● Lectores USB

ACR122U

SCM SCL011

20/31

Page 22: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Opciones NFC Raspberry● Dispositivos conectados al GPIO

NFC R522

EXPLORE-NFC

21/31

Page 23: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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/

22/31

Page 24: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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

● UARTUniversal Asynchronous Receiver-Transmitter, se encuentra en placas base, convierte datos paralelo a serie

● I²CInter-Integrated Circuit, para comunicar microcontroladores y sus periféricos en sistemas integrados

23/31

Page 25: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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 24/31

Page 26: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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

25/31

Page 27: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Demo time!

26/31

Page 28: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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.DDF01 27/31

Page 29: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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

28/31

Page 30: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

Explore-NFC: card emulation

29/31

Page 31: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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

30/31

Page 32: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

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... 31/31

Page 33: Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android

GDG DevFest Córdoba - 31 Oct 2014

Comunicación NFC entre Raspberry Pi y Android

Nacho Álvarez@neonigmacdb

[email protected]://www.nacho-alvarez.es