jueves, 24 de julio de 2014

Raspberry Pi (Encendido de un led por servidor)

Bueno, siguiendo con el anterior tutorial sobre como instalar el servidor Apache, PHP y MySQL. Hoy vamos a ver como crear una web propia desde la que podemos encender un led desde cualquier dispositivo conectado a interntet.
Si sustituimos ese led y ponemos un relé conectado a una lámpara de casa, tendremos un sistema domótico, y si lo conectamos a una bomba de agua podremos automatizar el regado de nuestras plantas...

Aquí tocaremos Python, Html y Php, si tenemos algo de idea de programación en estos lenguajes perfecto, tampoco será muy complicado ya que con unas nociones basiquisimas de ellos, nos arreglamos.
Es un proyecto sencillo, no una web cargada de estilos en css, colorines y demás.. eso ya cada uno.

Utilizaremos los pines de salida de la Raspbery para conectar el led, haremos un pequeño script en Python para su encendido, luego haremos un sencillo botón en Html enviando la información a otro script de Php que llamará al script de Python para finalmente encender el led, y todo esto cargado en nuestro servidor hará el led se encienda.


Esquema de conexión del led
                                                                                               
Después de esta pequeña introducción, empecemos.

Descargaremos la librería GPIO para Python desde Raspberry pi, con esta libreria podremos acceder a los pines GPIO:.

sudo wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.1.0.tar.gz
tar zxf RPi.GPIO-0.1.0.tar.gz
cd RPi.GPIO-0.1.0
sudo python setup.py install

Crearemos los scripts para el encendido y apagado, podemos hacerlos en un editor externo y luego ponerlos en la carpeta "var/www/", o bien desde el shell de Raspberry:

sudo nano /var/www/on.py 

En el editor introduciremos el siguiente código para el encendido del led, y guardamos.
 
import RPi.GPIO as GPIO
GPIO.setup(7, GPIO.OUT);
GPIO.output(7, False);

Y para el apagado, creamos otro script:

sudo nano /var/www/off.py 

Introducimos:

import RPi.GPIO as GPIO
GPIO.setup(7, GPIO.OUT);
GPIO.output(7, True);

Creamos el archivo html, si entráis en "index.html", veréis que ya hay algo escrito, es la página de prueba de Apache, borramos sin problema.


sudo nano /var/www/index.html


<html><head> Control de led por servidor:
<form action="" method="post">
<input checked="" name="led" type="radio" value="1" />On
<input name="led" type="radio" value="2" />Off
<input name="Ok" type="submit" value="enviar" />
</form>
<?php
if ($_POST['on'] {
exec("sudo python /var/www/on.py")
}else{
exec("sudo python /var/www/off.py")
}
</head></html>

Debemos otorgar permisos para poder utilizar el comando exec de PHP, lo haremos de la siguiente forma:


sudo chmod 775 /var/www/
sudo usermod -a -G www-data pi
sudo visudo 
 
Agregamos una ultima linea:
www-data ALL=(root) NOPASSWD:ALL

Y reiniciamos el servidor:
sudo /etc/init.d/apache2 restart

Después de esto estaremos listos para probar el encendido y apagado del led desde cualquier pc, o incluso desde nuestro móvil, entrando a la dirección IP de nuestra Raspberry.
A partir de aquí, podríamos dejarlo más bonito diseñando un poco mejor la página, utilizando unas imágenes que muestren el estado actual del led. Por mi parte prefiero ver lo realmente necesario para funcionar, y luego perfilar hasta conseguir el diseño óptimo.

2 comentarios: