Cylon.js: Qué es y cómo empezar con él.

por Ricardo Vega el 15/09/2016

He podido dedicar el verano a "jugar" con algunos de esos proyectos que tenía por ahí aparacados esperando a encontrar un momento con tiempo suficiente. Sin duda, Cylon.js estaba en lo alto de esta lista y tras dedicarle varias horas quiero compartir contigo mis impresiones.

Cylon.js

Sabes que cuando hablo de herramientas, me gusta facilitarte también algún ejemplo práctico con el que puedas empezar a trabajar si así lo deseas. Hoy no va a ser una excepción y vamos a hacer un "Hola Mundo" con Cylon.js. Y cuando digo "Hola Mundo" y hardware ya sabes que me refiero a un blink.

Qué es Cylon.js

Vamos a empezar por el principio. Según su propia web:

Cylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Things. It makes it incredibly easy to command robots and devices.

Es decir, es un framework Javascript especialmente diseñado para la robótica, la computación física y el Internet de las Cosas, lo cual encaja perfectamente en este blog, ¿verdad?.

Soporta un gran numero de protocolos y dispositvos, dotándonos de una API sencilla desde la que manejar nuestro querido hardware: Arduino, Beaglebone, Intel Galileo, Leap Motion, MQTT, Nest, Pebble, Philips Hue, Raspberry Pi, etc

Además, tiene predefinidos otrs elementos de propósito general como son sensores analógicos, servos, leds o motores dándonos un interesante entorno con una API común desde la que jugar.

GORT

Cylon.js usa el protocolo firmata para comunicarse con Arduino va través del puerto serie. La instalación de Arduino la podemos hacer desde el IDE de Arduino pero, sinceramente creo que lo más sencilla es usar GORT.

¿Y qué es GORT? Pues es una herramienta escrita en un lenguaje de programación llamado Go (y con el que llevo unos meses experimentando ;)) creada por la misma gente detrás de Cylon.js y que nos provee de una herramienta para linea de comandos capaz de escanear en busca de dispositivos conectados, actualizar el firmware de nuestros dispositivos y mucho más.

Su instalación es muy sencilla y tan sólo tenemos que descarga el binario adecuado a nuestro sistema operativo y ejecutarlo.

La instalación de Firmata desde GORT es muy sencilla:

Una vez instalado firmata en nuestro Arduino (usa un Arduino Uno, te será todo más fácil), procedemos a instalar en nuestro equipo todas las herramientas necesarias.

Cuando hablamos por primera vez de NodeJS, ya te presentaba el gestor de paquetes npm que facilita la labor a la hora de instalar esta clase de librerías Javascript. En esta ocasión, emplearemos npm para instalar CylonJS y las librerías asociadas:

npm install cylon cylon-gpio cylon-i2c cylon-firmata

Una vez instalado (ya sabemos que hay que ser pacientes porque puede tardar un poco), tendremos disponible CylonJS para su empleo.

Es el momento ahora de escribir el código necesario para hacer un blink con Arduino y CylonJS.

Para ello, creamos un fichero llamado 'index.js' y en su interior escribimos lo siguiente:

var Cylon = require("cylon");

// Inicializamos el robot
Cylon.robot({
  connections: {
    arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
  },

  devices: {
    light: { driver: 'led', pin: 13 }
  },

  work: function(dev) {
    every((2).second(), function() {
      dev.light.toggle();
    });
  }
}).start();

El contenido del fichero que acabamos de crear es muy fácilmente entendible:

En primer lugar, importamos la librería, que acto seguido empleamos para inicializar el robot (o en nuestro caso Arduino). Como parámetros en la inicialización le pasamos el dispositivo que vamos a emplear, el firmware empleado y el puerto en el que tenemos conectado nuestro Arduino.

A continuación, definimos el dispositivo externo que vamos a conectar. En nuestro caso, se trado de un led conectado al pin 13 al que le pondremos el nombre de 'light'.

Recuerda que si usas el pin 13, este lleva una resistencia interna que permite la conexión directa de un led. Si quieres usar otro pin, recuerda que deberás conectar una resistencia limitadora para evitar quemar tu led (un valor de 1k suele ser una buena opción). Sea como sea, la otra pata del led, irá a GND, cerrando el circuito.

Blink Arduino

Después, definimos la rutina de ejecución dentro de 'work' como una función a la que le pasamos un objeto que contará con todos los 'devices' indicados en el paso anterior. En mi caso, he querido referirme a esa variable como 'dev' pero puedes elegir el nombre que quieras. El resto es muy sencillo y casi una traducción directa del inglés: "Cada 2 segundos ejecuta esta función" que en nuestro caso es, dentro de mis dispositivos, seleccionar el que hemos llamado light y ejecutar sobre el la función toggle (que lleva a cambio un cambio de estado binario; lo traduciríamos como 'pulsar').

Por último, acabamos la instancia ejecutándola mediante "start()".

Para ejecutar el contenido de este fichero y ver como nuestro led se enciende y se apaga cada dos segundos, tan sólo tenemos que ejecutar:

node index.js

Y ya está, eso es todo. Deberías ver como tu led cambia de estado cada dos segundos.

Conclusiones

CylonJs no es la única librería para emplear Javascript con nuestros dispostivos pero sí es una de las más famosas. Hace uso de NodeJS para ejecutar órdenes que, a través del puerto serie, transfiere a Arduino.

No es por tanto un framework para programar Arduinos (u otros dispositivos) que después puedan trabajar de forma autónoma sino que establece una comunicación maestro-esclavo, donde Arduino hace todo aquello que el PC le manda.

Cylon.js logo

Su ámbito de aplicación por tanto está limitado pero no por ello es inexistente. Así, rápidamente se me ocurre su empleo como herramienta educativa o en dispositovs tipo Raspberry Pi para manejar un Arduino conectado por USB a esta.

Es más, al ser una librería JS, podemos combinarla con otras muchas más herramientas del ecosistema NodeJS para crear proyectos mucho mayores. Por ejemplo, podríamos usar CylonJS y ExpressJS (sobre el cual ya hablamos a la hora de crear APIs con NodeJS) y generar una aplicación web desde la que manejar nuestro Arduino, lo que nos abre la puerta a su uso, por ejemplo, en domótica.

Es más, ¿te gustaría un post en el que detallaramos más en profundidad esta solución? Si es así, házmelo saber a través de los comentarios o Twitter.

Sea como sea, creo que es una librería interesante y que te recomiendo emplear, aunque sólo sea por diversión, durante unas horas.

Por cierto, evidentemente, la instalación de Firmata no es irreversible y tan sólo con cargar algún programa tuyo o de ejemplo de Arduino, este funcionará como siempre lo ha hecho.

¡Saludos y hasta la próxima semana!

Apoya al blog


Si te ha gustado este artículo, valora apoyarme económicamente a través de Patreon, una plataforma de Micro-mecenazgo con la que puedes hacerme un donativo que ayude a la continuidad del blog. Una pequeña ayuda significa mucho. 😃

Permanezcamos en contacto!


¿Quieres enterarte de todas las novedades del sector? ¿Te gustaría trabajar conmigo? ¡Puedes contactar conmigo de forma muy sencilla!