Raspberry Pi y GPIO (2)

ENGLISH VERSION

Ya hemos comentado la forma en que podemos controlar señales hardware a través del puerto GPIO de nuestra Raspberry Pi, pero hoy vamos a abordar la forma de hacerlo de una manera más cómoda para el usuario (vía un lenguaje de alto nivel) además de simplificar el proceso de “exportación” comentado también en este blog. Y para más comodidad de nuestros seguidores pondremos a su disposición el código preciso para llevar a cabo los ejemplos mostrados ¡¡ a DIVERTIRSE !! …

Nota: esta entrada se basa en el harware Raspberry Pi y en el software Raspbian (p.ej. Wheezy)

El resumen de lo que comentaremos :

(1)    Descripción del fichero rc.local.
(2)    Exportación automatizada del puerto GPIO.
(3)    Sencilla aplicación PHP para control GPIO.
(4)    Sencillo script para exportar GPIO.

Nota: el código ejemplo puede descargarse (formato ZIP) al final de esta entrada.

1 – Descripción del fichero rc.local.

Algo que vimos en la entrada Raspberry Pi y GPIO (1) es la necesidad del manejo de nuestro puerto GPIO vía fichero, razón por la que teníamos que realizar (usando privilegios de root) la “exportación” de las patillas hardware al correspondiente “file” en la senda /sys/class/gpio

La idea que a cualquier usuario de Raspberry se le ocurrirá nada más saber esto sería automatizar el proceso para no tener que exportar este hardware cada vez que tengamos que usar nuestra Raspi, sobre todo si queremos utilizar un hardware conectado siempre a la tarjeta.

Vamos a volver a centrar nuestro ejemplo en la tarjeta XUE-001 de Webtronika,

_XUE_001_by_Webtronika

razón por la que – como ya vimos – la Raspberry Pi tendrá que estar “informada” de los puertos de entrada/salida que este pequeña pieza de hardware utiliza, a saber:

Patilla 8 (GPIO14) : salida digital
Patilla 24 (GPIO8) : entrada digital

pero esta vez no vamos a conformarnos con ejecutar los comandos de exportación desde nuestro terminal sino que vamos a decirle a Linux que los ejecute en el arranque de forma automática, para lo cual necesitamos hacer uso del fichero “rc.local“.

Típicamente, Linux nos permite ejecutar una serie de comandos “personalizados” al final del proceso de arranque. Para hacerlo debemos utilizar el fichero /etc/rc.local y colocar en el mismo los comandos que deseemos lanzar en arranque.

Así que está claro, lo primero que haremos es echar un vistazo al fichero comentado (/etc/rc.local) y vemos que contiene esto:

2_GPIO_y_Raspi_00

2 – Exportación automatizada del puerto GPIO.

Ahora podemos modificar nuestro fichero rc.local para efectuar el añadido de nuestros comandos de “exportación”, pero para no correr riesgos efectuamos antes un backup del fichero original mediante el comando:

sudo cp /etc/rc.local /etc/rc.local.org

Modificamos el fichero mediante el comando

sudo nano /etc/rc.local

y editamos el final del mismo (justo antes del “exit 0“) dejandolo así :

(por cierto, aprovechamos para españolizar el texto sobre nuestra IP)

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will “exit 0” on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ “$_IP” ]; then
printf “Mi direccion IP es %s\n” “$_IP”
fi

# Pin GPIO14 (OUT)
echo “14” >  /sys/class/gpio/export
chmod 777 -R /sys/class/gpio/gpio14
echo “out” > /sys/class/gpio/gpio14/direction

# Pin GPIO8 (IN)
echo “8”  >  /sys/class/gpio/export
chmod 777 -R /sys/class/gpio/gpio8
echo “in” >  /sys/class/gpio/gpio8/direction

exit 0

Tras guardar el fichero rc.local podemos reiniciar la Raspberry Pi y verificar que los ficheros asociados a las I/O ya existen. Para ello ejecutamos :

ls -la /sys/class/gpio/

2_GPIO_y_Raspi_01

3 – Sencilla aplicación PHP para control GPIO.

Ahora, una vez exportados los puertos, nuestra Raspi ya puede efectuar los comandos desde el terminal y manejar la tarjeta I/O, tal y como veíamos en la entrada Raspberry Pi y GPIO (1)

Pero vamos a dar un paso más y utilizar un lenguaje de alto nivel y que, además, es uno de los más extendidos en el entorno Web. Mediante la pequeña aplicación PHP que comentaremos podemos manejar el hardware de nuestra Raspberry Pi vía red, bien sea desde nuestra red local o bien (si hacemos las configuraciones adecuadas) desde cualquier navegador Web que acceda remotamente a nuestra Raspi en Internet.

La condición imprescindible para poder instalar este programa PHP es tener instalado en nuestra Raspberry un servidos Web con capacidad PHP. Hay en Internet información muy detallada para instalarlo, pero también podemos hacerlo siguiendo las instrucciones de la entrada de DIVERTEKA titulada HTTP y PHP en Raspberry .

Una vez que nuestra Raspi tenga capacidad de ejecutar PHP podemos crearnos un pequeño programa – por ejemplo – como este :

2_GPIO_y_Raspi_01b

Nosotros lo hemos denominado xue1.php, y debe estar ubicado en la carpeta donde sirva la IP de nuestra Raspi vía Web (por defecto en /var/www/ )

Una vez colocada allí solo hemos de acceder desde un navegador a nuestra Raspi mediante :

http://192.168.0.22/xue1.php

2_GPIO_y_Raspi_01c

Nota: la IP es 192.168.0.22 en este ejemplo, pero nosotros utilizaremos la IP de nuestra Raspi.

Una vez ejecutado el programa podremos activar (escribir 1/0) en la salida GPIO o consultar (leer 1/0) en la entrada GPIO.

4 – Sencillo script para exportar GPIO.

Ahora ya sabemos como exportar de forma automática (vía fichero rc.local) el hardware GPIO, pero podemos hacerlo de una manera más elegante. Para ello crearemos un script específico al que se llamará desde el fichero rc.local. De esta forma podremos – por ejemplo – activar o desactivar fácilmente la llamada a la exportación (co/descomentando la línea asociada en el fichero rc.local) o, en un futuro, editar las opciones del script externo para variar la configuración hardware controlada por la Raspberry Pi.

Para crear el script efectuaremos

sudo touch /etc/gpio.sh

y ahora, lo editamos con

sudo nano /etc/gpio.sh

2_GPIO_y_Raspi_02

Ahora, todo lo que tenemos que hacer es darle permisos al script

sudo chmod 777 /etc/gpio.sh

y editar de nuevo el fichero rc.local para insertar la llamada a nuestro script. Algo así:

sudo nano /etc/rc.local

2_GPIO_y_Raspi_03

 

Y ahora …  ¡¡ a DIVERTIRSE  !!

 

DESCARGA DE CODIGO-EJEMPLO:

Codigo_30_GPIO

 

  Bitcoin Currency Converter
Amount of BTC to convert
To currency:
1BTC =