Electrónica y Programación en Personal
«Si no se soluciona con un script en Python entonces no es viable»

por Yeison Cardona el 06 de noviembre del 2013 a las 7:43 pm UTC

Continuemos con Raspberry, en esta ocasión les he preparado una aplicación web que permite controlar los GPIO de Raspberry, he usado Django (por supuesto) y Node.js un herramienta magnífica para manipular todas esas características de tiempo real.

Servidores

Este sencillo ejemplo puede parecer lo contrario cuando se habla de tres servidores diferentes sólo para encender y apagar un pin, pero verán que no lo es.

Servidor de Node.js

El mas sencillo de todos y el mas importante, Node.js explicado rápidamente es una plataforma que nos permite construir aplicaciones en tiempo real a base de eventos, funciona a base de un servidor central que se encarga de crear/redirigir eventos a todo los que lo necesiten (así de genial es), e implementarlo no podría ser mas simple que esto:

var server = require("socket.io").listen();
server.sockets.on("connection", start_server);

function start_server(events){
	events.on("sendCommand", send_command);
}

function send_command(data){
	server.sockets.emit(data.keyworduser, data);
}

No se necesita nada mas para tener nuestro servidor de Node.js

Ahora, ¿cómo ejecutarlo?, bueno eso lo explicarán mucho mejor en otros tutoriales, no quiero ser redundante en éste punto, hay muchos en internet.

Lo pueden implementar localmente en cualquier equipo y tomar nota de la ip de la maquina para usarla como parámetro en los demás nodos, pero la solución mas sencilla es usar Nodejitsu, se trata de un servicio web que nos permite crear, subir y administrar servidores con Node.js, también pueden usar Heroku, algo a tener en cuenta con Nodejitsu es que no es gratuito, pero no dejata tener un servidor gratuito si demostramos que se trata de una aplicación Open source.

Pero no es necesario hacer todo esto, yo ya lo hice por ustedes y pongo al servicio de todos, mi servidor de node.js, (al menos para éste ejemplo).

Servidor de la aplicación web

Este servidor puede ejecutarse localmente, se trata de un aplicación con Django la cual se conecta con el servidos de Node.js y redirecciona los camandos enviados.

Igualmente no es necesario implementarlo, puede acceder a una copia que está ejecutándose en los servidores de Google App Engine

http://raspberry-domo.appspot.com/
Aplicación web.

Servidor local en Raspberry

Para esta parte no hay alternativas, debe estar ejecutándose en cada Raspberry, también se trata de una aplicación hecha con Django, entonces ejecutaremos un servidor de desarrollo (no necesitamos nada mas), es entonces necesario instalar Django en nuestra Raspberry según cada distribución.

Aplicación web.

¿Cómo se usa?

El modo difícil, es ejecutar nosotros mismo los tres servidores y poner en línea el sistema, pero ya he desplegado de manera pública gran parte del proyecto.

En Raspberry

Del lado de Raspberry sólo tenemos que descargar la carpeta llamada raspberry_node_listener que se encuentra en un repositorio en Bitbucket y ejecutar:

python manage.py runserver
Validating models...

0 errors found
November 05, 2013 - 22:27:49
Django version 1.5.5, using settings 'settings.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Entonces abrir una pestaña en el navegador que tengamos instalado, Midori, Chromium, cualquiera, y abrir la dirección que retorna el comando anterior http://127.0.0.1:8000/.

Ahora debemos ingresar una palabra clave, con ésta crearemos la conexión entre la Raspberry y el servidor de Node.js, hacer click enOK e ir al paso siguiente.

Aplicación local, en Raspberry.

Desde la aplicación web

Ahora sólo debemos abrir la aplicación web, e ingresar la misma palabra clave que configuramos en Raspberry, no es necesario mas, y si las conexión lo permite ya podemos enviar y recibir comandos y datos de manera romota a nuestra Raspberry.

Aplicación web, en Google App Engine.

Repositorios

Estoy estrenando repositorio en BitBucket, no termino de simpatizar con GitHub, además de que el servicio es mucho mejor, puedo tener repositorios públicos y privados ilimitados, gratis hasta 5 usuarios y si aplicamos con nuestra cuenta de correo institucional (.edu) podremos acceder al plan Totalmente Ilimitado (usuarios ilimitados) para proyectos y grupos, así que recomendado ;)

Dejando la publicidad atrás, les dejo en link del repositorio para este proyecto, con todas las fuentes:

  • Servidor de Node.js
  • Aplicación en Django
  • Aplicación en Django-nonrel listo para hacer el deploy en App Engine
  • Aplicación local que se ejecuta desde Raspberry

Coclusiones

La primera conclusión es que pude explicarlo mejor, pero insisto en que no es mi estilo, tutoriales de Django y Node.js hay mucho en internet, no creo conveniente hacer mi propio tutorial para publicar este ejemplo. Como siempre les dejo las fuentes del ejemplo para que las usen como crean conveniente, en ésta ocasión bajo una licencia GPLv3, también dejo los servidores públicos, espero poderlos mantener durante mucho tiempo.
La segunda conclusión es que Node.js es genial, estúdienlo juiciosamente.

Hasta el próximo post ;)


También podría interesarte:

Añadir un comentario:
Si desean una respuesta para su comentario sólo deben agregarme en G+ y hacer una mención a Yeison Cardona, así les podré responder lo antes posible.