Otro de los avances de este fin de semana ha sido que finalmente he conseguido enviar imágenes desde la Raspberry mediante comandos de WhatsApp. Esta ha sido la primera imagen enviada:
La imagen es bastante mala, lo sé, pero mi webcam ha pasado por tiempos mejores.
El método fue el siguiente: conecté una antigua webcam USB a la Raspberry. Instalé la aplicación “fswebcam”, que permite tomar capturas de pantalla de un dispositivo de vídeo (en este caso, la webcam, /dev/video0), y almacenarlas como imágenes. Tras comprobar que esto funcionaba, conseguí por fin modificar el código de Yowsup para que procesara adecuadamente el envío de imágenes, gracias a un código compartido en la web de proyecto, que no me costó demasiado adaptar para que se ejecutara al recibir comandos desde WhatsApp, de una manera similar a como activo y desactivo los relés y el sensor de movimiento.
Las posibilidades de esto son enormes: la idea que tengo ahora es modificar el código de aviso del sensor de movimiento PIR para que, además de avisar de cuándo se ha detectado movimiento, realice una captura automática con la webcam, y la envíe al teléfono. Es decir, tener la posibilidad de tomar capturas bajo demanda, o bien de manera automatizada ante eventos externos.
¿Mejoras? Unas cuantas: la primera es que el código compartido no es capaz de hacer el envío de la miniatura asociada a la imagen, lo que produce en algunas ocasiones que WhatsApp dé un error en Android al intentar mostrar la miniatura (aunque luego la imagen se ve bien). La segunda es conseguir una webcam mejor. En cuanto a la tercera, sigue habiendo un problema: la webcam tiene que estar conectada a la raspberry, lo que no resulta demasiado práctico si el sensor de movimiento está, por ejemplo, en la entrada (y conectado con la raspberry por RF). Sería interesante poder hacer uso de una webcam IP, o algún sistema de captura de imágenes para Arduino.
Por cierto, aunque la imagen que encabeza el artículo es la primera que transmití de manera controlada por WhatsApp, no es en realidad la primera imagen enviada. Hubo otras dos antes:
Esta es la primera imagen que envié al móvil desde la Raspberry, antes de realizar la integración con la webcam. La envié con un comando desde la raspberry, para probar la efectividad de la librería de envío de mensajes.
En cuanto a esta otra, en la primera imagen que envié tras integrar la captura de la webcam en el sistema de envío de mensajes de WhatsApp. Pero, de nuevo, fue enviada desde la raspberry hacia el teléfono, antes de implementar la lógica que permite capturar la imagen desde el teléfono.
Por cierto, lo que se ve en ambas capturas es una estantería de mi estudio llena de libros, y el reloj de riego automatizado.
Hoy hemos tenido algunos avances interesantes. He sido capaz de controlar desde la Raspberry Pi un relé conectado al Arduino Nano:
Para ello, he hecho uso unos módulos RF que trabajan a 433 MHz, controlados mediante la librería RCswitch, además de hacer uso de algunas instrucciones obtenidas de NinjaBlocks: Adding 433 to your Raspberry Pi
Siguientes pasos: integrar el uso de la librería en el sistema de control de la Raspberry con WhatsApp, y transferir la operativa desde el Arduino Nano a un chip Attiny85.
Etiquetas: arduino nano, attiny85, domótica, raspberry pi, relé
Ahora sí que sí. Escribía hace unos días que había implementado un sistema de control de relés a través de la Raspberry, utilizando como sistema de mensajería WhatsApp. Pero que ese sistema, que combinaba el uso de una librería en python para procesar el paso de mensajes con un script programado en bash, no era del todo funcional. Pues bien, después de un tiempo de trasteo, he conseguido que todo el sistema funcione:
Finalmente he optado por prescindir del script en bash, y programar la lógica necesaria dentro de la librería python. Para ello, he extendido la funcionalidad de la misma: existía una funcionalidad que permitía el intercambio interactivo de mensajes entre línea de comandos y el contacto remoto. He copiado este sistema de mensajería en una nueva funcionalidad, que en vez de mostrar los mensajes por pantalla, los parsea y ejecuta.
Para ello, he importado el sistema de control de los GPIO que proporciona WebIOPi dentro de yowsup, y a partir de ahí, tan sólo se ha tratado de adaptar la lógica del script bash a la función que procesa los mensajes parseados que se reciben por parte del contacto móvil.
Si alguien está interesado, puedo pasar el fichero py, pero que no espere mucha belleza en el código, ya que es mi primer programa python.
Etiquetas: domótica, electroválvula, python, raspberry, webiopi, whatsapp, yowsup
Hace algún tiempo compré junto con mis compañeros de curro una Raspberry Pi. Para quien no sepa qué es este invento, en líneas generales se trata de un microordenador equipado con un procesador ARM (arquitectura que se usa habitualmente en teléfonos móviles), 512 MB de RAM, y una impresionante GPU que permite reproducir vídeos a 1080p Full HD. Y todo por el ridículo precio de 30 euros, aproximadamente. Y con la ventaja de que es un “ordenador de aprendizaje”, que permite hacer mil diabluras y pequeños proyectos, que asombrarían al más pintado.
Desde que la compramos cada uno hemos empezado a hacer pruebas, con la idea de ver hasta dónde podíamos hacer llegar el invento. Lo más convencional ha sido, obviamente, instalar una Debian preparada para esta peculiar máquina (Raspbian, por lo general), y montar pequeños sistemas. Otra de las labores que hemos realizado ha sido instalar sistemas de visualización de vídeo para convertir televisores en auténticos centros multimedia.
Yo, por mi parte, me he entretenido haciendo cosas más o menos sencillitas, hasta que he recuperado un viejo proyecto que llevaba años queriendo implementar: un sistema de domótica casero, para controlar los sistemas de riego por goteo del jardín. Estos sistemas procuran controlar de manera remota una electroválvula, que es la que permite el paso de agua al sistema de riego. Pero para implementar cualquier sistema de domótica que se precie -y un sistema de riego no es una excepción-, es necesario hacer uso de relés para controlar el paso de corriente a los dispositivos que se trata de controlar. Y es aquí donde la Raspberry se porta de maravilla.
La Raspberry proporciona un sistema GPIO sumamente configurable, mediante un bus de comunicación, que permite comunicarse con dispositivos externos programando el uso de puertos del sistema. Esto permite controlar de una manera sencilla una placa de relés preparada al efecto, y que gracias a la popularización de otro sistema programable empotrado como es Arduino, se pueden encontrar con suma facilidad en sitios como DealExtreme:
Dicho y hecho. No tardé mucho tiempo en hacerme con la placa anterior, y empezar a hacer pruebas de control con una aplicación web, especialmente bien pensada para controlar los puertos GPIO mediante dispositivos móviles. El resultado es el siguiente:
Esta aplicación permite controlar con una sencilla pulsación el cambio de estado del puerto de comunicación escogida, que activa o desactiva el relé. Una vez que puedes controlar los relés, puedes controlar de una manera sencilla algo como una electroválvula, disponiendo de una fuente de alimentación adecuada, cuyo paso de corriente se controla mediante el relé. La siguiente prueba que tengo que hacer es conectar de manera efectiva la salida del relé a la electroválvula.
La aplicación, por supuesto, es apenas el primer paso, ya que su operación es completamente manual y no permite establecer ninguna programación de la activación del sistema de riego, pero permite verificar de una manera muy sencilla que el sistema funciona. A partir de aquí, mi siguiente paso será implementar una aplicación que permita establecer una programación mediante cron o eventos externos.
Seguiremos informando…
Etiquetas: aplicaciones web, domótica, raspberry pi, relés