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

Comunicación NFC entre Raspberry Pi y Android

Comunicación NFC entre Raspberry Pi y Android

Charla sobre comunicación NFC entre Raspberry Pi y Android en el evento Google

Nacho Álvarez

October 31, 2015
Tweet

More Decks by Nacho Álvarez

Other Decks in Technology

Transcript

  1. 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
  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
  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/32
  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/32
  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/32
  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/32
  15. 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
  16. 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
  17. 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
  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-python/ 21/32
  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 22/32
  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 23/32
  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-nfc-software-and- project?ICID=designcenter-devkitnfc-quick 24/32
  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 26/32
  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 27/32
  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 29/32
  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... 30/32
  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