Actualmente cuento con 1 placa Raspberry Pi rev2.0 y 1 placa Raspberry Pi 2 con la que realizo mis pruebas caseras, lo he realizado en ambos hardwares sin problemas ni cambios relevantes.
El presente repaso lo realizaré en la raspberry Pi 1 rev2.0
Vamos a instalar el servidor lighttpd por ser muy ligero en comparación con apache2. Usaremos php para programar la página web a la que se tendrá acceso vía web y vía aplicativo android. Usaremos scripts en python y bash muy básicos para poder controlar los puertos GPIO de la raspberry.
Desde php llamaremos a los scripts para que interactúe con el usuario.
La práctica consiste en prender, apagar y parpadear un led desde python y/o bash conectado al pin 11 del conector P1. El ánodo será conectado a una resistencia de 4.7k a voltaje para limitar la corriente y el cátodo al pin 11.
Empecemos:
pi@raspberry~$ sudo aptitude install lighttpd php-config php-pear php-xml-parser php5-cgi php5-cli php5-common
No voy a explicar la configuración de php con lighttpd ya que hay abundante información de ello en la web.
Recomiendo la lectura del siguiente blog propiedad de LiGNUxero que a mi parecer está muy bien explicados los pasos básicos para poner en marcha lighttpd y php:
http://blog.desdelinux.net/lighttpd-un-servidor-web-muy-agil-y-liviano/
Ahora vamos a /var/www y dentro crearé la carpeta led. Dentro de la carpeta led crearemos el index.php que contendrá el código en php.
pi@raspberry /var/www/led~$ sudo vim index.php
<html>
<head>
<!--index.php-->
</head>
<body>
<!--GPIO17-->
<form action="" method="post">
Control de Led en el puerto 17
<input type="submit" name="prenderLED" value="Prender">
<input type="submit" name="apagarLED" value="Apagar">
<input type="submit" name="parpadearLED" value="Parpadear">
</body>
</html>
<?php
// Funciones PHP del pin GPIO 17
if ($_POST[prenderLED]) {
exec("sudo python /var/www/led/gpio/prenderLED.py");
}
if ($_POST[apagarLED]) {
exec("sudo python /var/www/led/gpio/apagarLED.py");
}
if ($_POST[parpadearLED]) {
exec("sudo python /var/www/led/gpio/parpadearLED.py");
}
// Fin Funciones PHP del pin GPIO 17
?>
Debería quedar así:
Luego dentro de la carpeta led, crearé la carpeta gpio; aquí alojaré los scripts en python y bash que serán llamados por el index.php.
Usaremos el pin gpio 17, ya que es el número 0 en la tabla de comparación con WiringPi.
pi@raspberry /var/www/led/~$ mkdir gpio
pi@raspberry /var/www/led/gpio~$ nano prendeLED.py
#!/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 17 como una salida GPIO.setup(17, GPIO.OUT) #Encendemos el led GPIO.output(17, GPIO.HIGH) GPIO.cleanup(); Liberamos el GPIO 17
pi@raspberry /var/www/led/gpio~$ nano apagaLED.py
#!/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 17 como una salida GPIO.setwarnings(False) GPIO.setup(17, GPIO.OUT) #Apagamos el led GPIO.output(17, GPIO.LOW) #Y liberamos el GPIO 17 GPIO.cleanup()
pi@raspberry /var/www/led/gpio~$ nano parpadearLED.py
#!/usr/bin/env/ python import RPi.GPIO as GPIO import time #Establecemos el sistema de numeracion que queramos, #en este caso el sistema BCM GPIO.setmode(GPIO.BCM) #Configuramos el pin GPIO 17 como una salida GPIO.setup(17, GPIO.OUT) #Encendemos y apagamos el led 5 veces for i in range(0,5): GPIO.output(17, GPIO.HIGH) time.sleep(1) GPIO.output(17, GPIO.LOW) time.sleep(1) #Y liberamos el GPIO 17 GPIO.cleanup()
Ahora creamos los scripts en bash si es que no queremos hacerlo en python.
pi@raspberry /var/www/led/gpio~$ nano prenderLED.sh
#!/bin/bash echo 17 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio17/direction echo 0 > /sys/class/gpio/gpio17/value #Liberamos el PIN asociado echo 17 > /sys/class/gpio/unexport
pi@raspberry /var/www/led/gpio~$ nano apagarLED.sh
#!/bin/bash echo 17 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio17/direction echo 1 > /sys/class/gpio/gpio17/value echo 17 > /sys/class/gpio/unexport
pi@raspberry /var/www/led/gpio~$ nano parpadearLED.sh
#!/bin/bash echo 17 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio17/direction for i in $(seq 1 5) do echo 1 > /sys/class/gpio/gpio17/value sleep 1 echo 0 > /sys/class/gpio/gpio17/value sleep 1 done echo 17 > /sys/class/gpio/unexport
Ahora estoy trabajando en crear un apk que pueda controlarlo vía android. Existe una página llamada AppInventor para poder crear nuestro código online y así no tener que instalar el pesado Android Studio.
Cuando culmine, incluiré el código.
Por lo pronto hasta aquí.
Saludos;
JPC