Vamos a instalar el servidor web apache, y aprenderemos a escribir el código en HTML y PHP para controlar un LED, o varios, desde una interfaz web.
Lo primero que debemos hacer es instalar el servidor web LAMP, para lo que teclearemos las siguientes órdenes en la terminal:
#Actualizamos los repositorios y el software de la pi usuario@maquina:~$ sudo apt-get update && sudo apt-get upgrade #Instalamos LAMP usuario@maquina:~$ sudo apt-get install apache2 usuario@maquina:~$ sudo apt-get install php5 libapache2-mod-php5 usuario@maquina:~$ sudo service apache2 restart
Ahora añadiremos como sudoer al usuario www-data, esta no es la opción mas segura pero recordemos que estamos haciendo una prueba en un entorno controlado; para un entorno en producción deberíamos buscar otra forma de ejecutar los scripts en python como sudoer.
Para editar estos permisos, escribimos sudo visudo en la terminal y al final del archivo añadimos a www-data como sudoer, debe quedar así.
# See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d pi ALL=(ALL) NOPASSWD: ALL www-data ALL=(ALL) NOPASSWD: ALL
Para cada pin GPIO debemos crear un subdirectorio y tres scripts en Python; uno para encender, otro para apagar, y un último script para hacer parpadear nuestro LED, veamos un ejemplo con el pin 4.
#!usr/bin/env/ python ##
enciende.py
#Importamos la libreria y le cambiamos el nombre a GPIO
import RPi.GPIO as GPIO
#Establecemos el sistema de numeracion que queramos,
#en este caso el sistema BCM
GPIO.setmode(GPIO.BCM)
#Configuramos el pin GPIO 4 como una salida
GPIO.setup(4, GPIO.OUT)
#Encendemos el led
GPIO.output(4, GPIO.HIGH)
-------------------------------------------------------------------
#!usr/bin/env/ python ##
apaga.py
#Importamos la libreria y le cambiamos el nombre a GPIO
import RPi.GPIO as GPIO
#Establecemos el sistema de numeracion que queramos,
#en este caso el sistema BCM
GPIO.setmode(GPIO.BCM)
#Configuramos el pin GPIO 4 como una salida
GPIO.setup(4, GPIO.OUT)
#Apagamos el led
GPIO.output(4, GPIO.LOW)
#Y liberamos los GPIO
GPIO.cleanup()
---------------------------------------------------------------------
#!usr/bin/env/ python ##
parpadea.py
#Importamos la libreria y le cambiamos el nombre a GPIO
import RPi.GPIO as GPIO
#Necesario para los delays
import time
#Establecemos el sistema de numeracion que queramos,
#en este caso el sistema BCM
GPIO.setmode(GPIO.BCM)
#Configuramos el pin GPIO 4 como una salida
GPIO.setup(4, GPIO.OUT)
#Encendemos y apagamos el led 5 veces
for i in range(0,5):
GPIO.output(4, GPIO.HIGH)
time.sleep(1)
GPIO.output(4, GPIO.LOW)
time.sleep(1)
#Y liberamos los GPIO
GPIO.cleanup()
Ahora es el momento de crear nuestra página de inicio en HTML y PHP, que contendrá los botones que deberemos pulsar para ejecutar los scripts en Python desde una interfaz web, mas adelante veremos como queda la jerarquía final.
<html> <head> <!--index.php--> </head> <body> <!--GPIO17--> <form action="" method="post"> GPIO 17 <input type="submit" name="encender17" value="Encender"> <input type="submit" name="apagar17" value="Apagar"> <input type="submit" name="parpadear17" value="Parpadear"> <br></br> <!--GPIO27--> <form action="" method="post"> GPIO 27 <input type="submit" name="encender27" value="Encender"> <input type="submit" name="apagar27" value="Apagar"> <input type="submit" name="parpadear27" value="Parpadear"> <br></br> <!--GPIO4--> <form action="" method="post"> GPIO 04 <input type="submit" name="encender4" value="Encender"> <input type="submit" name="apagar4" value="Apagar"> <input type="submit" name="parpadear4" value="Parpadear"> <br></br> <!--GPIO22--> <form action="" method="post"> GPIO 22 <input type="submit" name="encender22" value="Encender"> <input type="submit" name="apagar22" value="Apagar"> <input type="submit" name="parpadear22" value="Parpadear"> </body> </html> <?php // Funciones PHP del pin GPIO 17 //Si queremos ejecutar el script python en segundo plano (background) //debemos agregar al final de la linea :
> /dev/null &
if ($_POST[encender17]) { exec("sudo python /var/www/leds/gpio/17/enciende.py"); } if ($_POST[apagar17]) { exec("sudo python /var/www/leds/gpio/17/apaga.py"); } if ($_POST[parpadear17]) { exec("sudo python /var/www/leds/gpio/17/parpadea.py > /dev/null &"); } // Fin de las funciónes del pin GPIO 17 // Funciones PHP del pin GPIO 27 if ($_POST[encender27]) { exec("sudo python /var/www/leds/gpio/27/enciende.py"); echo $a; } if ($_POST[apagar27]) { exec("sudo python /var/www/leds/gpio/27/apaga.py"); } if ($_POST[parpadear27]) { exec("sudo python /var/www/leds/gpio/27/parpadea.py > /dev/null &"); } // Fin de las funciónes del pin GPIO 27 // Funciones PHP del pin GPIO 4 if ($_POST[encender4]) { exec("sudo python /var/www/leds/gpio/4/enciende.py"); } if ($_POST[apagar4]) { exec("sudo python /var/www/leds/gpio/4/apaga.py"); } if ($_POST[parpadear4]) { exec("sudo python /var/www/leds/gpio/4/parpadea.py > /dev/null &"); } // Fin de las funciónes del pin GPIO 4 // Funciones PHP del pin GPIO 22 if ($_POST[encender22]) { exec("sudo python /var/www/leds/gpio/22/enciende.py"); } if ($_POST[apagar22]) { $a- exec("sudo python /var/www/leds/gpio/22/apaga.py"); } if ($_POST[parpadear22]) { exec("sudo python /var/www/leds/ejecgpio/22/parpadea.py > /dev/null &"); } // Fin de las funciónes del pin GPIO 22 ?>
Lo he agrupado todo en la misma página ya que si creaba una página en PHP para cada opción, al ejecutarla me mandaba a la página del script (una página en blanco); ahora ejecuta el código y se queda en la misma página.Aunque he agregado algunos cambios, el post original es : http://www.peatonet.com/raspberry-pi-y-los-pines-gpio-controlando-el-led-desde-una-interfaz-web/
Comentarios
Publicar un comentario