sysmana 2015 - comunicación nfc entre raspberry pi y android
TRANSCRIPT
IES Gran Capitán - 9 Febrero 2015
Comunicación NFC entre Raspberry Pi y Android
Nacho Álvarez@neonigmacdb
✉ [email protected]://www.nacho-alvarez.es
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
Í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
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
● 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
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
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
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
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
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
Mensajes NDEF
10/31
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
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
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
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
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
Raspberry Pi: Proyectos● Algunos proyectos interesantes que utilizan Raspberry Pi +
Android○ Porta-Pi Arcade Kit
http://www.retrobuiltgames.com/the-build-page/porta-pi-arcade-kit/○ PiPhone
http://www.raspberrypi.org/piphone-home-made-raspberry-pi-smartphone/
○ Control remoto de coches Lego https://www.youtube.com/watch?v=5K_Eyxi56tk
○ Pi laptop http://blog.parts-people.com/2012/12/20/mobile-raspberry-pi-computer-build-your-own-portable-rpi-to-go/ 16/31
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
Raspberry Pi B+
18/31
Raspberry Pi 2 Model B
19/31
Opciones NFC Raspberry● Lectores USB
ACR122U
SCM SCL011
20/31
Opciones NFC Raspberry● Dispositivos conectados al GPIO
NFC R522
EXPLORE-NFC
21/31
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
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
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
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
Demo time!
26/31
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
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
Explore-NFC: card emulation
29/31
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
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
GDG DevFest Córdoba - 31 Oct 2014
Comunicación NFC entre Raspberry Pi y Android
Nacho Álvarez@neonigmacdb
✉ [email protected]://www.nacho-alvarez.es