Implementación de "pestillos virtuales" en proyectos basados en Arduino con Latch

miércoles, 30 de diciembre de 2015

Gracias al esfuerzo de Intel por acercar su arquitectura x86 al mundo del IoT, es posible utilizar el SDK en C oficial de Latch desde el entorno de desarrollo de Arduino, y disponer de pestillos virtuales en nuestros proyectos de forma muy sencilla.

Arduino es una popular plataforma de hardware y software abierto ampliamente utilizada en todo tipo de proyectos electrónicos, especialmente en ambientes didácticos, por su sencillez y bajo coste. Actualmente se está librado una batalla en torno a la marca Arduino, que explica claramente Félix Maocho en este artículo.

Incorpora un completo entorno de programación (IDE) que utiliza un lenguaje basado en Wiring; en esencia C++, aunque en muchas ocasiones se usa C, ya que la suite de desarrollo Open Source incluye ambos lenguajes dentro de su colección de compiladores.

Pese a que Intel no supo adaptar x86 a la era post-PC, y desde 2007 la arquitectura ARM domina ampliamente en tablets y smartphones (llegando incluso a dispositivos embebidos que eran nicho tradicional de MIPS), con la llegada del IoT se produce un acercamiento a la comunidad makers de Arduino, hasta ahora fieles a la arquitectura AVR, pero necesitados de facilidades para conectar sus proyectos a Internet.

En 2013 Intel lanza la placa de desarrollo Galileo, basada en la arquitectura x86 (i586) es totalmente compatible, tanto con IDE de Arduino, como con todos módulos complementarios (Shields) al adoptar el mismo pinout que el Arduino UNO R3, convirtiéndose en la primera arquitectura no AVR oficialmente certificada por Arduino. Dotada de un núcleo Linux (Yocto) y conexión Ethernet, su estándar totalmente abierto explota al máximo la fusión entre Linux y Arduino; algo que no sucede con el intento más cercano, el Arduino YÚN, cuyo componente Linux es cerrado y extremadamente limitado al igual que el microcontrolador del lado de Arduino.

Después de una mínima revisión Gen2 en 2014, Intel alcanza en 2015 un hito en los sistemas embebidos al integrar conexiones WiFi y Bluetooth en la minúscula placa x86 (i686) Edison, sembrando la semilla del nuevo Arduino 101 basado en x86 que verá la luz en 2016 para sustituir al veterano UNO R3 y revolucionar el ecosistema actual.

Para utilizar el SDK en C oficial de Latch desde el IDE de Arduino en una placa Intel Edison, es necesario incorporar al IDE las librerías: OpenSSL (libcrypto) para las operaciones criptográficas y cURL (libcurl) para la conexión HTTPS, junto con sus dependencias: nettle, hogweed, gmp, gnutls, z y cap.

Estas librerías y sus archivos de cabecera deben ser copiados desde el sistema Linux Yocto de la placa Intel Edison en la ruta sysroot compiler.toolchain.path del IDE de Arduino; que por ejemplo, en la versión de IDE v1.6.2 será:

  • Linux: /home/test/.arduino15/packages/Intel/tools/core2-32-poky-linux/1.6.2+1.0/i686/sysroots/core2-32-poky-linux/
  • Mac OS X: /Users/test/Library/Arduino15/packages/Intel/tools/core2-32-poky-linux/1.6.2+1.0/i686/core2-32-poky-linux/
  • Win 8.1: C:\Users\test\AppData\Roaming\Arduino15\packages\Intel\tools\core2-32-poky-linux\1.6.2+1.0/core2-32-poky-linux/

Aprovechando la conexión wifi estos archivos se pueden transferir por SSH con una herramienta como WinSCP o similar desde un sistema Windows, y desde Linux o Mac OS X se puede utilizar una combinación de ssh y tar para preservar los enlaces simbólicos; por ejemplo, situarse en el sysroot compiler.toolchain.path y ejecutar:

ssh –C root@ip_edison "tar -c /usr/lib/libcrypto*" | tar –x
ssh -C root@ip_edison "tar -c /usr/lib/libcurl*"   | tar –x
ssh -C root@ip_edison "tar -c /usr/lib/libgnutls*" | tar –x
ssh -C root@ip_edison "tar -c /usr/lib/libnettle*" | tar -x
ssh -C root@ip_edison "tar -c /usr/lib/libhogweed*"| tar –x
ssh -C root@ip_edison "tar -c /usr/lib/libhogmp*"  | tar –x
ssh -C root@ip_edison "tar -c /lib/libz*"     | tar -x
ssh -C root@ip_edison "tar -c /lib/libcap*"   | tar -x
ssh -C root@ip_edison "tar -c /lib/libcrypto*"| tar -x
ssh -C root@ip_edison "tar -c /usr/include/openssl"| tar –x
ssh -C root@ip_edison "tar -c /usr/include/curl"   | tar –x

Para que estas nuevas librerías sean enlazadas dinámicamente por el linker que invoca por el IDE de Arduino en el proceso de construcción del sketch, es necesario modificar el archivo “platform.txt” que detalla las especificaciones de cada arquitectura, añadiendo al final de la línea recipe.c.combine.pattern los modificadores: -lcrypto -lcurl. Este archivo está ubicado en la carpeta correspondiente del IDE de Arduino; por ejemplo, en la versión de IDE v1.6.2 o superior será:

  • Linux: /home/test/.arduino15/packages/Intel/hardware/i686/1.6.2+1.0/
  • Mac OS X: /Users/test/Library/Arduino15/packages/Intel/hardware/i686/1.6.2+1.0/
  • Win 8.1: C:\Users\test\AppData\Roaming\Arduino15\packages\Intel\hardware\i686\1.6.2+1.0/

Todos los archivos de configuración son leídos únicamente al iniciar el IDE de Arduino, por lo que hay que cerrarlo y volver a abrirlo para que los cambios tengan efecto.

Una vez realizados estos cambios en el IDE de Arduino, ya es posible utilizar las librerías del SDK en C de Latch, que podemos descargarnos desde el repositorio oficial, tal y como se muestra a continuación:

Un ejemplo de esta implementación se pudo ver en el pasado Hackathon IoT de Openbank; copatrocinado por ElevenPaths, se impartió un taller demostrativo integrando una hucha física con Latch.

En combinación con un conocido lector de huella dactilar para la autenticación biométrica del usuario, se realiza una delegación múltiple de la autorización de la extracción de monedas en terceros usuarios mediante Latch. Pudiendo combinar los diferentes pestillos de modo que tengan que estar todos abiertos (AND), o solo alguno de ellos (OR), para que tras la autenticación, la hucha expulse una cantidad de monedas definida.

Toda la configuración se almacena en un archivo JSON de fácil manipulación desde Arduino gracias a la librería aJson de Interacive Matter. Y para una mayor sencillez, la conexión física con el lector y la hucha, explota la capacidad de la placa Intel Edison para crear puertos serie virtuales en Arduino a partir de conversores USB, por lo que todo está conectado con un simple HUB USB, sin necesidad de realizar soldaduras ni ninguna otro conexión eléctrica.

El código ejemplo está publicado en el espacio de GitHub https://github.com/latchdevel/latch-moneybox

1 comentario:

  1. Gracias por el enlace. Triste que un emprendimiento iniciado por un grupo de personas, con motivos tan alturistas como los que había cuando se inició Arduino, termine con peleas entre fundadores, por un ¡quitame allá una patente!.

    Pero hay que conocer la naturaleza humana, muchos, cuando vemos unas monedas, perdemos rápidamente los buenos principios. Si somos de esos, lo mejor que nos puede pasar, es que nunca estemos en las cercanías de monedas. No hay más que ver el espectáculo de la política, para ver que vulneramos somos en general a la codicia.

    Saludos

    ResponderEliminar