EduBasica shield con Nodejs

Escrito por: Ulises Gascón

May 17, 201510 min read
Desayunando en un café mientras programo en la EduBasica

Como se puede ver en la imagen... muy dura es la vida del freelance :-) . Humor aparte, esta semana me gustaría hablaros de EduBasica, un shield para Arduino Uno desarrollado por Manuel Hidalgo, Jorge Luis Loza, Pablo Evaristo García y Jorge Muñoz para ayudar a alumnos de secundaria en el aprendizaje de programar y hacer proyectos con Arduino.

Seguramente a los lectores con mejor memoria, este nombre ya os sonará del post que dedique hace unas semanas al Madrid Mini Maker Faire, donde explicaba lo mucho que me había gustado esta idea de EduBasica, si recordáis incluí este vídeo de su montaje que me parece ideal para quitarnos los primero miedos cuando damos el primer paso en firme para trabajar y desarrollar orientado a Internet de las Cosas:

EduBasica por su parte ha desarrollado un shield especifico para Arduino con el objetivo de reducir la problemática en la aulas con la electrónica, dejando más tiempo a la programación.

Una vez terminado el montaje de la placa los alumnos de cuarto de la ESO pueden centrarse en la programación. Para poder exprimir al máximo las posibilidades de este shield, han desarrollado un montón de material complementario como un libro en pdf con varias practicas y por supuesto el código fuente de los ejercicios. Esto convierte a Arduino en el aliado de cualquier profesor de tecnología para enseñar programación y electrónica básica. El equipo de EduBasica esta trabajando en una versión web del libro. Podéis seguir sus progresos desde su web

La razón por la que abría este articulo con la foto de este sano desayuno es porque desde que tengo EduBasica no tengo que llevarme una caja de trastos conmigo (protoboard, leds, cables...), ahora puedo trabajar directamente con el software y la única parafernalia que necesito es conectar un cable usb al ordenador. Antes de esto necesitaba empezar a conectar cosas y más cosas a una placa de pruebas y esperar que todo funcionara, mientras tanto el tiempo pasa y yo sigo montando y desmontando cosas...

Así que muy recomendado hacerte con una, sobretodo si quieres programar dinámicamente en los huecos que nos deja el día, y especialmente si te pasas el día fuera la oficia/casa/taller. Es muy lógico dar este paso... sino... ¿Por qué tenemos portátiles con nosotros todo el tiempo :-) ?

Nodebots - Robots con alma en javascript

Nodebots banner

El concepto de NodeBots surgió inicialmente con el creciente interés por la creación y manipulación de hardware dentro de la comunidad emprendedora de node js.

Chris Williams es el creador del módulo conocido como node-serialport, el cual permite a los programadores de JS controlar y dirigir el mundo físico. Desde entonces, el hardware ha sido el punto principal de cada conferencia de JS (JSConf), maravillando audiencias con cualquier cosa, desde maquinas de humo (usadas comunmente en los antros) hasta robots que caminan. Hoy es el momento para que cualquiera pueda iniciarse. Now is time for the rise of JS Robotics. Nodebots Peru

Sigo sorprendido de que en España no tengamos una comunidad orientada a Nodebots. No creo que sea el único tecnólogo que piense que ¡ya va siendo hora de empezar con esto por estas tierras!. Para los que llegados a este punto del post no están ya descargándose los módulos de Node para esto y comprando placas tipo Arduino... sin duda... es debido a que no habéis vivido la revolución en punto js (.js).

Así que para los lectores más perdidos, voy a intentar sintetizar porque ahora vivimos una revolución en el mundo del desarrollo de Javascript. Prometo no ser como Sheldon Cooper explicando los orígenes de la física.

Así que empecemos... es una gélida tarde de invierno hacia el año 1995 cuando Internet estaba en pañales... y el mundo dio un paso de gigante cuando Netscape anuncio que incluiría Javascript en su navegador, poco tiempo antes Brendan Eich había empezado a crear este lenguaje de programación para solucionar problemas recurrentes en una época muy primitiva de Internet. Según fue pasando el tiempo.. muchas mejoras tecnológicas dotaron a Internet de la madurez suficiente como para convertirse en lo que hoy es para muchos, un elemento esencial de su vida.

Durante mucho tiempo Javascript fue un lenguaje muy limitado y despreciado por desarrolladores de lenguajes más sólidos como Java o C. Pero... una revolución empezó cuando AJAX apareció como un recurso efectivo para gestionar el futuro asincrónico de la web.

Hasta entonces Javascript había sido un recurso útil y significativo en el lado del cliente, frontend, pero esto iba cambiar... como si se tratara de la caída del muro de Berlin, con la llegada de Nodejs... por fin.. el backend, la parte que se ejecuta en el servidor y el frontend podían ser desarrollados íntegramente en un único lenguaje de programación, esto dio pie a la mayor revolución en punto js (.js). Por supuesto sino mencionase que HTML5 y CSS3 han supuesto cada uno un balón de oxigeno enorme y sobretodo un aporte de calidad a la web de nuestros días podría perder a la gran mayoría de mis queridos lectores más radicales.

Nodejs ha sido tomado por la comunidad de desarrolladores de Javascript con una ilusión tremenda. Grandes proyectos como Grunt, Gulp, Bower, Express, less, coffee-script, etc.. se apoyan en Nodejs para funcionar. A pesar de su escaso tiempo en el mercado muchos grandes ya apuestan por él como Yahoo, Linkedin o Paypal.

Lo que ocurre cuando tienes un servidor gobernado en Javascript es que tus posibilidades para desarrollar aspectos que nunca pensaste, se multiplican exponencialmente y ese es el caso de Johnny-five, la idea detrás de este modulo es poder controlar placas como Arduino desde Nodejs de manera muy fluida y natural.

Os invito a pasaros por npm, para que veáis la cantidad de módulos disponibles por ejemplo para Arduino

Hablemos de Johnny-five (J5)

Johnny Five Banner

Por si la genial ilustración de Max Sgier no os parece suficientemente explicativa, la idea de Rick Waldron fue crear un framework capaz de manejar Arduino en un principio, luego muchas más plataformas se sumaron gracias al sistema de plugins que usan.

Hoy por hoy cuenta con más de 85 colaboradores activos en el proyecto. Este es otro importante ejemplo de como un proyecto opensource se amplia y mejora a un ritmo vertiginoso gracias a la comunidad.

Johnny-five es bastante intuitivo, y esta genialmente documentado, no necesariamente necesitáis usar esta librería, pero frente a otras que he probado... la he encontrado muy completa y funcional.

Llegados a este punto muchos lectores se habrán dado cuenta de que Arduino es incapaz de soportar Nodejs directamente. ¡Cierto!

Pero... recapitulemos un momento... necesitaremos un ordenador para poder ejecutar nuestros scripts en Arduino, esto es muy cierto, pero no nos quedemos pensando en el típico laptop o en un ordenador de sobremesa. ¿Por que no... usamos Raspberry Pi? es mas si Raspberry Pi tiene GPIOs (pins de conexión) ¿para que necesito un Arduino?.. ¿no podría simplemente ejecutar los scripts en ella y conectar todo el hardware que necesito?

Bueno... sobre estas hipotesis hay mil discursiones abiertas en internet. Desde mi humilde opinión se puede desplegar todo esto (Raspberry Pi + Node + Johnny-five + Arduino + otros Shields (como EduBasica)...) solamente en escenarios donde buscamos la interacción y la simplicidad para programas complejos como cuando queremos hacer una estación meteorológica o gestionarlo todo remotamente a través de una web, etc... si nuestro objetivo es solo abrir una puerta al hacer una combinación determinada en un teclado, con un sencillo script lo podemos hacer con tan solo Arduino.

Si queréis ver ejemplos de aplicaciones hechas con Arduino y Johnny-five, no te pierdas este enlace.

Para los que pensasteis que con solo Raspberry Pi podemos funcionar, es cierto, existen miles de cosas que podemos hacer como cuando os comentaba en este mismo blog la posibilidad de útilizar Google Hangouts para comunicarnos con nuestra Raspberry Pi desde cualqueir dispositivo. Pero... tenemos que tener en cuenta que la RasPi carece por completo de pins analógicos... esto nos limita muchísimo a la hora de trabajar con sensores, recordemos que los sensores son la única manera que existe para estos dispositivos de medir el mundo, olvidémonos de medir distancias, intensidades, etc...

Así que muchos estaréis de acuerdo conmigo que la mejor solución para proyectos complejos es sin duda la combinación de ambos, bajo un mismo lenguaje Javascript, además teniendo en cuenta que Johnny-five también da soporte a RasPi gracias a este genial plugin de Bryan Hughes, no nos quedaremos sin pines aunque solo tengamos una placa Arduino Uno y un EduBasica shield.

Un repositorio para EduBasica

foto de una placa de EduBasica

Bueno... ya va siendo hora de presentar lo que promete el titulo de este post, una vez nos hemos familiarizado con Node y Johnny-five, es bueno que miréis el código de este repositorio en el que he estado trabajando los últimos días...

Para hacer un breve resumen

Enamorado de la filosofía de EduBasica, y muy agradecido de solo tener que centrarme en programar, sin tener que complicarme más con soldaduras, cables y pequeños componentes por todas partes... empecé a desarrollar este repositorio. Esta es mi pequeña contribución a la revolución rebotica con Javascript por el momento.

El repositorio esta diseñado para ser una primera toma de contacto con EduBasica usando Javascript. El primer paso será clonar el repositorio e instalaros todas las librerías necesarias. Posteriormente podéis ejecutar el script llamado test.js, que permite ejecutar y probar todos los componentes de vuestra placa EduBasica, incluyendo motores y servos que tienen que estar conectados a la placa siguiendo los esquemas que podéis encontrar en la la web de EduBasica o directamente en su libro.

Este script permite ejecutar test más específicos e individualizados gracias a los argumentos que podemos escribir directamente en la consola de Nodejs, tenéis detallados todos los comandos en la documentación. Una vez pasada esta fase de testing, podéis adaptar vuestros proyectos a esta placa gracias a edubasica.js que ya tiene el pinout de la placa preparado para su uso. En base a esto podéis adaptar o crear nuevos scripts.

Además de esto existe una carpeta ejemplos que contiene algunos ejemplos de aplicaciones creadas para EduBasica pero que fácilmente pueden adaptarse sino se tiene el shield. Para los que pensasteis que los ejemplos son un poco básicos, teniendo en cuenta que muchos lectores tienen un background más orientado al software que al hardware... ya os confieso que ahora mismo me encuentro trabajando en implementar ejemplos usando websockets y HTML5 para poder controlar nuestro Arduino y EduBasica desde el navegador, iré subiendo scripts y anunciando en Twitter, así que, sino me sigues aún. esta puede ser una buena oportunidad :-)

En definitiva... podéis consultar con todo detalle la documentación que creé para este repositorio en Github. Además no os cortéis... lanzaros a hacer mejoras y subir vuestros propios ejemplos. ¡Esto es código abierto y colaborativo! :-)

Expertos Mencionados | Brendan Eich, Rick Waldron, Manuel Hidalgo, Jorge Luis Loza, Pablo Evaristo García y Jorge Muñoz

Imágenes | Nodebots, Johnny-five, EduBasica y propias