Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Comunicación NFC entre Raspberry Pi y Android

2,529 views

Published on

Charla sobre comunicación NFC entre Raspberry Pi y Android en el evento Google DevFest Córdoba el 31/10/2014

Published in: Technology
  • Be the first to comment

Comunicación NFC entre Raspberry Pi y Android

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  11. 11. Mensajes NDEF 10/32
  12. 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. 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. 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
  15. 15. Ejemplo NFC Android @Override public 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/32
  16. 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. 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. 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
  19. 19. Raspberry Pi B+ 18/32
  20. 20. Opciones NFC Raspberry ● Lectores USB ACR122U SCM SCL011 19/32
  21. 21. Opciones NFC Raspberry ● Dispositivos conectados al GPIO NFC R522 EXPLORE-NFC 20/32
  22. 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. 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. 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. 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
  26. 26. Demo time! 25/32
  27. 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. 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
  29. 29. Explore-NFC: card emulation 28/32
  30. 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. 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
  32. 32. Spam! Sorry... Contactar con: cromero@uco.es 31/32
  33. 33. 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

×