Está en la página 1de 17

Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013

Tutorial para manejar el encendido y apagado


de LEDS remotamente por un servidor o ssh a
travs de una Raspberry Pi usando Python y/o C
















Integrantes:
Alberto Aguilera
Eduardo Arancibia
Paula Lasalas
Fabricio Rosales
Jorge Ortz

Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
La GPIO (General Purpose Input Output) de la raspberry pi posee pines con distintas funciones, los
cuales pueden ser manejados con software y a su vez conectarse a otros hardwares como arduino.
En nuestro caso gestionaremos la GPIO mediante lenguajes de programacin como C y Python,
montaremos un servidor web y lo usaremos como estacin remota para encender luces led a
distancia dentro de una misma red. Luego haremos un proceso parecido para controlar las luces
directamente en la raspberry Pi.
Para el siguiente tutorial se recomienda tener conocimientos previos sobre Python y C.
Comencemos!

Materiales que necesitaremos
1 Raspberry Pi (con conexin a internet, de preferencia modelo B)
1 Protoboard
3 LED
3 resistencias de 330 [ohm]
1 Cable UTP
4 Jumpers













Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Paso 1: Armar el circuito
En la imagen se pueden apreciar las
distintas distribuciones que poseen los pin
de la GPIO, nosotros en este proyecto
usaremos solo el de poder 3V3(3,3 volts)
y para los 3 LED el GPIO7, GPIO8 y
GPIO10.
La estructura del circuito la definiremos
como la siguiente:
Siendo r una resistencia de 330 [Ohm]
















Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Paso 2: manejar la GPIO para encender o apagar un LED
Para manejar las luces como si la raspberry fuese un interruptor los pin de la GPIO poseen dos
estados: Low (0 o False) y High (1 o True), los cuales respectivamente los asociaremos con el
encendido y apagado de estas.
Primero necesitaremos instalar un modulo en python llamado RPI.GPIO que nos dejar controlar
la GPIO, para ello abrimos una terminal y ponemos:
sudo apt-get install python-rpi.gpio
Ahora que tenemos el modulo instalado podremos hacer funcionar los
led, probemos:
Tenemos conectado un led al GPIO10(pin 10), entonces para
encenderlo ponemos:
sudo python
#llamamos al modulo y lo importamos.
import RPi.GPIO as GPIO
#Fijamos los parmetros indicando el numero del pin (ver imagen con
los nmeros por si no esta claro) y si es entrada o salida.
GPIO.setup(10, GPIO.OUT)
#Ahora iniciamos el pin a False para que se encienda el led (Si ponemos
True estara apagado).
GPIO.output(10, False)
Y listo, hemos controlado un led usando python y la raspberry pi.









Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Paso 3: Instalar y configurar servidor
Instalaremos un servidor APACHE con PHP y MSQL, luego lo configuraremos para usarlo mas
adelante.
Antes de empezar debemos asegurar que nuestro sistema este actualizado poniendo en la
terminal:
sudo apt-get update
sudo apt-get upgrade
Luego de haber hecho esto instalamos Apache y PHP:
sudo apt-get install apache2 php5 libapache2-mod-php5
Luego reiniciamos Apache:
sudo /etc/init.d/apache2 restart
Y ya tenemos nuestro servidor listo, ahora hay que otorgar permisos.
Los directorios tpicamente utilizados por un servidor web en linux se sitan en /var/www, y el
usuario tpico para dicho entorno suele ser www-data. Ahora vamos a crear el grupo y usuario
estndar para nuestro servidor, a la par que otorgamos los permisos pertinentes y aadimos a
nuestro usuario por defecto (pi) al grupo comentado. De esta forma no ser preciso que el usuario
root (su) sea siempre el que pueda operar en /var/www.
Comenzamos cambiando el usuario y el grupo al directorio:
sudo chown www-data:www-data /var/www/
Damos los permisos a la carpeta www/:
sudo chmod 775 /var/www/
Agregamos el usuario pi al grupo www-data:
sudo usermod -a -G www-data pi
Ahora ponemos:
sudo visudo
Agregamos el siguiente cdigo al final:
www-data ALL=(root) NOPASSWD:ALL
Reiniciamos el Servidor:
sudo /etc/init.d/apache2 restart
Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Luego podremos entrar al servidor ya
creado colocando nuestra ip (en este
caso es 192.168.0.178) en un
navegador y apreciaremos que aparece
la tpica imagen de apache dicindonos
que funciona. It Works!




Ahora produciremos un archivo de prueba, Hola mundo en PHP.
Para ello creamos un archivo con nano:
sudo nano /var/www/hola_mundo.php
Luego dentro del archivo escribimos:
<?php
echo HOLA MUNDO DESDE RASPBIAN;
?>
Aqu unas imgenes de ejemplo de esto
llevado a cabo y su resultado.










Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Paso 4: Sistema de encendido y apagado va web.
Hasta el momento poseemos el circuito armado, hemos visto como manejar un led con python y
como montar un servidor web. Ahora lo que haremos ser juntar ambas cosas y hacerlas trabajar
en conjunto.
En PHP existe una funcin llamada exec, la cual puede ejecutar un programa externo como puede
ser Python. Funciona de la siguiente manera:
<?php
echo exec(programa);
?>
Nosotros ejecutaremos un script de python como por ejemplo:
<?php
$a=exec('sudo python /var/www/pi/leds/prende.py');
echo $a;
?>
Ubicado en /var/www/pi/leds , el script prende.py contiene:
import RPi.GPIO as GPIO
GPIO.setup(10, GPIO.OUT)
GPIO.output(10, False)
Tambin podemos probar ejecutndolo en la consola:
sudo php /var/www/pi/leds/prende.php
Y listo, ahora solo falta un ltimo paso en lo que es va web que es descargarse una aplicacin que
nos har el trabajo un poco ms fcil.
http://jeffersonrivera.com/pi/led.zip





Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Carpeta css ->Contiene los archivos de estilos, entre estos, el modelo del interruptor
Carpeta js -> Contiene el script de jQuery 1.9
Carpeta images-> Contiene la imagen de fondo
La web que pondremos ser en cdigo html, el que viene listo y solo hay que modificar para
agregarle las otras 2 luces (y as podemos hacerlo tambin si ponemos mas de 3 luces).
Index.html parte 1:





Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Index.html parte 2:

Originalmente ese es el cdigo para 1 led, pero nosotros lo que haremos ser encender 3 luces,
por lo que modificaremos este cdigo de la siguiente manera:
Para agregar un interruptor nuevo que vaya dirigido a otra luz distinta no es necesario escribir un
tremendo cdigo de nuevo, solo basta con duplicar (o vale decir copiar y pegar) desde la lnea 13
hasta la 64, es decir:
<div class="container">
<header><br>
<h4>CONTROL REMOTO DE UN LED CON RASPBERRY PI</h4>
.
(Hasta)
.
//alert("Salida: "+response );
}
});
}
});
</script>
Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Adems de ello, tambin se deben modificar las variables independientes, de otro modo,
podramos terminar usando dos interruptores diferentes para un mismo led, o provocar un
malfuncionamiento en el cdigo.
He aqu una comparacin de la pgina original y la modificada para 3 leds.

Ahora continuamos con los otros archivos encontrados en la carpeta.




Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
El siguiente es procesa.php:

En la lnea 2, recibimos la variable valor_estado, por el mtodo POST, y la guardamos en
$valor_estado, luego preguntamos si es igual a 1, si es cierto, ejecutamos apaga.py, si no
ejecutamos prende.py
prende.py

apaga.py

Como se puede apreciar, debemos modificar segn nos convenga el archivo prende.py y apaga.py.
En nuestro caso usaremos 3 leds, en las cuales usaremos 3 GPIO distintas, lo que significa que
tendremos que modificar el cdigo y/o agregar lneas en el caso de la pgina web(como quedo
demostrado anteriormente), hacer un procesa2.php, procesa3.php y que para cada led debe
haber un archivo prende.py y apaga.py, lo cual nos deja por ejemplo con:
Led 1 GPIO10
prende.py y apaga.py

Led 2 GPIO8
prende2.py y apaga2.py

Led 3 GPIO7
prende3.py y apaga3.py

Todo lo ltimo que estamos viendo
solo es relacionar lo que hemos
visto en los pasos 2 y 3.
Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Y con una carpeta como la siguiente:

Con ello nuestra web estara funcional.















Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Paso 5: Instalacin de WiringPi para controlar directamente con C
Ya hemos acabado con el servidor web, el php, html y python, ahora continuaremos con
implementar un programa en C que nos ayude a encender y apagar las luces directamente desde
la raspberry, para ello necesitaremos primero instalar la librera WiringPi para el control de la GPIO
mediante este lenguaje de programacin.
Antes que todo, debemos tener instalado GIT en nuestra Raspberry pi, en caso de no tenerlo,
desde la terminal ingresamos la siguiente lnea:
sudo apt-get install git-core
Nota: hay una posibilidad de que esto nos lance algn error, y esto se debe a que nuestra
raspberry no esta actualizada, pero como ello lo hemos hecho en el paso 3 no debiera pasar.
Ahora debemos obtener WiringPi mediante GIT:
sudo git clone git://git.drogon.net/wiringPi
Si es la primera vez que utilizas la funcin clone, debes hacer lo siguiente:
cd wiringPi
git pull origin
Finalmente, para instalar la librera debemos ingresar a la carpeta wiringPi y ejecutar build:
cd wiringPi
sudo ./build










Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Paso 6: Utilizando C para el control de los leds
La esencia es la misma que cuando utilizamos Python, solo que ac abrimos un editor de texto
(nano, gedit, etc) y lo primero que debemos hacer es incluir la librera wiringpi a nuestro
programa:
#include <wiringPi.h>
Luego utilizamos las funciones de esta librera para el control de los leds:
wiringPiSetup(): Esta funcin inicia el sistema wiringPi y asume que ser usado el esquema
de pines wiringpi.

pinMode (int pin, int mode): configura los pines para que sean de entrada o salida (INPUT,
OUTPUT), en este caso en particular usaremos OUTPUT.
digitalRead(int pin): Lee en que estado se encuentra el pin HIGH o LOW (1, 0),
dependiendo de su estado lgico.
digitalWrite(int pin, int estado_logico): Le asigna un estado al pin, sea HIGH o LOW.
Ejemplo:

Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
En nuestro caso usando 3 luces led nuestro cdigo quedara as (fragmento):

















En un archivo leds.C







Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Por lo que queda listo para usarse directo en la raspberry pi:
./leds

Es importante sealar que al momento de compilar el programa escrito en C se debe hacer de la
siguiente manera:
Tenemos un archivo no compilado leds.c
sudo gcc leds.c -o 1 lwiringPi
ya que estamos trabajando con la librera wiringPi y con el hardware, por lo que necesitamos
permisos del root.


Universidad Tcnica Federico Santa Mara, Introduccin a la ingeniera Telemtica, ao 2013
Bibliografa:
https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/
https://projects.drogon.net/raspberry-pi/wiringpi/functions/
http://riverajefer.blogspot.com/2013/06/control-remoto-de-un-led-con-raspberry.html
http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/turing-machine/two.html
http://es.wikihow.com/hacer-un-servidor-web-Raspberry-Pi
http://jeffersonrivera.com/pi/Proyecto_raspberry_pi.pdf
Agradecimientos especiales al trabajo de Jefferson Rivera:
WEB: http://jeffersonrivera.com/
BLOG: http://riverajefer.blogspot.com/
YOUTUBE: https://www.youtube.com/user/riverajefer

También podría gustarte