Arduino Yún
Hace muy pocos días que adquirí mi Arduino Yún. Las expectativas eran altas y estas son las conclusiones y andanzas de las primeras horas. Han habido sinsabores debido a que no hay mucha documentación todavía. Me recuerda la situación a los primeros tiempos de las primeras placas. En el resto de implementaciones estamos a costumbrados a tirar de la comunidad y el soporte es estupendo. Algo que en este caso está por hacer. Aunque la respuesta en los foros de Arduino está siendo fluída.
Una vez abierto me sorprende que el tamaño sea como los antiguos NG o Diecimilla que tengo por casa. La puesta en marcha es bastante sencilla. Siguiendo los pasos de la página de Arduino Yún nos conectamos a la wifi del Arduino (que actua como punto de acceso) y nos deja configurar nuestra red inalámbrica. Se reinicia y se supone que ya estamos en la misma red. En mi caso he tenido que irme al router y mirar que IP se le había asignado ya que no me ha conectado directamente, seguro que con las prisas no he hecho algo bien. Como he ido haciendo varias pruebas, lo he reseteado varias veces y sí que en alguno de los arranques ha llegado a funcionar esta característica.
Lo siguiente que he hecho es cargar el sketch blink típico de testeo para validar que todo esté en orden. Ya he visto que en el apartado puertos aparecía la IP de la placa y lo he lanzado así la segunda vez. Al proceder pide la contraseña y funciona bien.
A partir de aquí he probado con mayor o menor fortuna los diferentes ejemplos que vienen con la librería. Al principio todo ha ido bien y he conseguido ver como el entorno Arduino recibe una página web y la lanza al monitor del puerto serie del IDE mostrando el texto del html, o porqué no a una pantalla lcd ¿quién se atreve con una versión de lynx para pantallas LCD? Algo más tarde este sketch me ha empezado a dar problemas. Yo lo he achacado a que como cuento más adelante había enredado más de la cuenta. Pero no, una vez reseteado completamente el entorno (una característica más que deseable para probar sin miedo) seguía fallando. En el foro he encontrado que estaba reportado un problema que se solucionaba actualizando el IDE o sustituyendo un fichero. A partir de aquí como un reloj.
También he tenido problemas con el ejemplo que publica la información como una página web en el servidor de linino. El almacenamiento de las páginas web de estos sketches se hace en una tarjeta SD externa y la estructura de carpetas es fija. En mi caso la tarjeta no aparecía como sd sino como sda1 y por lo tanto no funcionaba... había varias soluciones pero he preferido preguntar en el foro y me han indicado bastante rápido que revisara los problemas típicos de estructura de carpetas y permisos por si pudiera venir de aquí. En mi caso después de varias pruebas ha aparecido el enlace sd a la tarjeta en el mnt y todo solucionado. Seguramente yo habré tenido que ver en que algo no funcionara...
Contar que en algunos trabajos con Arduino me he quedado sin memoria... quiero hacer muchas cosas y los recursos son limitados. También he trabajado con servidores en publicar y leer los pines a través de la red. Mis expectativas eran altas con respecto al producto ya que veía una posibilidad de hacer algo contenido (en recursos) en la línea de lo que he hecho ultimamente. Desarrollar programas en python que se entiendan con el Arduino vía firmata (como el ejemplo del vídeo en este caso desde un PC) y además me permita publicar y leer websockets para explotar con javascript.
Lo que me he encontrado es que precisamente el proyecto a priori está concebido al revés (o al derecho según se mire y en este caso desde el punto de vista del equipo de Arduino). Lo que se ha procurado y conseguido es traer al entorno de Arduino las facilidades de interactuar con el exterior pero mandando y gobernando desde el entorno y gestionando todos los recursos desde allí. Mi planteamiento es justo al contrario veo el entorno como extensión de mis propuestas. Tanto es así que he investigado para "romper" la forma de conectarse y buceando un poco en el sistema he encontrado el puerto serie que usan para comunicarse e incluso he hecho algunas pruebas de transmitir datos. Como siempre una búsqueda en los foros han proporcionado soluciones incluso a la implememtación de firmata y la desactivación de una cónsola serie que apuntaba al puerto y podía dar guerra. No está bien solucionado y además hay todavía algunos flecos ya que si se desactiva la cónsola hay cosas que no funcionan y si el sketch cargado intenta hacer uso de la conexión ni el propio linux es capaz de arrancar. Se soluciona cargando un sketch tipo blink y una vez arrancado el linux carga el sketch correspondiente... En este caso la funcionalidad de reseteo completo ha sido realmente práctica. He tocado todo lo que se me ha ocurrido y una vez reseteado he empezado de nuevo configurando la wifi y arrancando el sistema completamente limpio. Ha sido una buena idea por parte del equipo el hacerlo así.
Lo que viene a continuación es información que se puede encontrar en la web de Arduino y en diversos sitios de internet. La idea es cometar las características y la forma de funcionar. Sugiero consultar las fuentes directamente aunque me aventuro con esta descripción en castellano ya que no he encontrado una completa todavía.
¿Que es Arduino Yún?
Es una placa que implementa un Arduino Leonardo + un linux corriendo cada uno en un procesador y una conexión entre ámbos vía serie. La idea ya había sido apuntada con ejemplos tan bien hechos como la librería firmata. Incluso en mi caso mi último desarrollo hacía algo parecido. La ventaja aquí es que está todo sobre la misma placa y conectado listo para funcionar. Lo que hace grande al producto es sin duda el gran desarrollo software que se ha llevado a cabo mediante las librerías e implementación para que los entornos se entiendan y sobre todo buscando que desde la parte de Arduino sea fácil hacer uso del linux.
¿Qué funcionalidades tiene Arduino Yún?
El proyecto está orientado a utilizar el entorno de Arduino con todas las funcionalidades de un linux. En este caso la distribución es linino que se deriva de OpenWRT. Y que se ha trabajado para que no sea necesario a priori entrar al linux para hacer cosas. Un conocimiento mas importante de linux ayudará a hacer y entender cosas. Una de las primeras características es el poder cargar en el YUN sketchs vía wifi. El funcionamiento es simple. El IDE de Arduino muestra entre los puertos disponibles la IP del YUN para enviarle programas. En el linino cuando se recibe la petición se levanta el proceso que hace que el scheck sea transmitido al entorno Arduino vía el puerto serie que los conecta.
¿Como se conecta con el entorno linux desde el de Arduino Yún?
En los IDE más actuales (en beta) ya aparece la librería bridge que es la encargada de gestionar todos los servicios y clases que proporcionan la conectividad. Se accede a la conectividad incluyendola en la lista de bibliotecas del sketch para utilizar sus recursos.
¿Que tipos de conectividad (lógica) existen entre los entornos Arduino Yún y linux?
El trabajo realizado con la librería es importante y que por nombrar solo algunos, permite interactuar desde nuestro sketch a nivel de linea de comandos del linux (lanzando comandos o leyendo la entrada e incluso enviando scripts). Se puede interactuar a nivel de ficheros, escribiendo y leyendo datos en ficheros existentes o crearlos. Implementa funciones de red avanzadas permitiendo el acceder a información de la web via servicios http. También permite publicar información vía web en este caso haciendo uso del servidor web que corre en el linux proporcionando incluso vía REST el acceso a los pines del arduino tanto para lectura como para escritura. Esta implementación es la que mas me ha llamado la atención dado que es posible conectarse a una dirección web y desde un navegador en otra máquina interactuar con los pines del arduino leyendo o escribiendo información. Se me antoja una suerte de servidor que ya en javascript o cualquier programa de alto nivel que maneje peticiones vía web, que controle un despliegue de arduinos. Hay otro tipo de recursos que da información de los procesos de la parte del linux o que crean clientes y servidores para compartir la información así como clases de más bajo nivel que se encargan de la mensajería. Por ultimo proporciona ejemplos de interacción de alto nivel con plataformas como Spacebrew y Temboo (con una API para publicar en mas de 100 sitios) o Xively (anteriormente pachube) para leer/publicar información de sensores a lo largo del globo.
¿Qué ocurre cuando se lanza una petición desde el entorno de Arduino al linux en Arduino Yún?
Observando los procesos en el linino vemos que se activan en función de las necesidades y aparece un proceso ’python bridge.py’ que consumiendo un 10% de la capacidad de proceso se encarga de la comunicación en el lado del linux.
¿Que es linino? ¿Cómo funciona linino en Arduino Yún?
Linino es una distribución linux basada en openWRT que es habitualmente usada en sistemas linux embebidos y que consume pocos recursos. La característica más sobresaliente en este caso es la implementación realizada por el equipo de Arduino ya que junto con LuCi que es una capa web sobre el sistema operativo podemos gestionar linino desde cualquier navegador web. Conectarnos al servidor de la placa y gestionar la parte linux sin tener que utilizar la cónsola es una ventaja muy importante sobre todo si se tiene poca experiencia con linux. Las tareas habituales de instalar y desinstalar paquetes, la configuración de red (si se desea modificar) y la de programas de arranque así como la supervisión del rendimiento y revisión de log está disponible con una interfaz clara vía web y preconfigurada. Ni que decir tiene que podemos conectarnos vía ssh y por cónsola hacer lo que haríamos en cualquier linux aunque con las limitaciones de una distribución de estas características (no soporta x por decir algo). La selección de la distribución así como de la interface para gestionarla parece todo un acierto.
Conclusiones.
Como conclusión he de decir que el resultado es estupendo. Proporciona a la comunidad de programadores de Arduino a unos recursos que antes estaban accesibles via shields (lan o wifi) o librerías (firmata) y por añadidura las funcionalidades que todo un linux pone a disposición de nuestro entorno de programación favorito. En mi opinión y por mi planteamiento preconcebido no termina de satisfacer mis expectativas (el fallo es mío por no haber leído mas documentación antes y entiendo que el planteamiento es el lógico desde el punto de vista del desarrollo). Me explico. El que los pines del procesador no estén accesibles directamente desde el entorno linux resta funcionalidad a recorridos que yo había preconcebido. El uso del bridge no es razonable para los fines por mi aventurados ya que la latencia con la que trabaja hace que sean inviables (aunque creo que hay que trabajar en domesticar los ejemplos). En los foros hablan de mejoras que se pueden acometer en la forma de abrir o cerrar puertos o ficheros por el bridge para ahorrar tiempo osea que será optimizable. Además seguro estarán disponibles en las próximas versiones del IDE y las librerías. Por último nombrar que aunque dispone de 32 Mb para los sketches la librería ocupa un poco mas de la tercera parte y hay que valorar que lo que proporciona al entorno es algo muy grande pero deja menos espacio para los programas de usuario al estilo clásico de Arduino.
Disclaimer
Pido disculpas por cualquier inexactitud o información erronea o parcial vertida en esta primera e impulsiva impresión. En todo caso se anima a obtener la información de las fuentes y contrastar cualquier extremo que aquí se haya manifestado.
3 comentarios
El artista -
http://forum.arduino.cc/
Eddy -
El Artosta -
http://forum.arduino.cc//index.php?topic=195589.0