Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sysmana 2015 - Comunicación NFC entre Raspberry...

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

Charla sobre comunicación NFC entre Raspberry pi y Android con ejemplos

Nacho Álvarez

February 09, 2015
Tweet

More Decks by Nacho Álvarez

Other Decks in Technology

Transcript

  1. 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
  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/31
  3. Índice 1) NFC a) Visión general b) Modos c) Android

    Beam, NDEF y ejemplo 2) Raspberry Pi a) Definición y proyectos b) Componentes c) Opciones NFC d) GPIO 3) Explore-NFC 4) Demo 2/31
  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/31
  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/31
  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/31
  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/31
  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/31
  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/31
  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/31
  11. 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
  12. 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/31
  13. 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/31
  14. 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/31
  15. 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
  16. 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-smartph one/ ◦ 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
  17. Raspberry Pi B 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/31
  18. 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-pyt hon/ 22/31
  19. 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 23/31
  20. 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
  21. 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-n fc-software-and-project?ICID=designcenter-devkitnfc-quick 25/31
  22. 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
  23. 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
  24. 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
  25. 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
  26. GDG DevFest Córdoba - 31 Oct 2014 Comunicación NFC entre

    Raspberry Pi y Android Nacho Álvarez @neonigmacdb ✉ [email protected] http://www.nacho-alvarez.es