Raspberry Pi: GPIO (parte II)

En el artículo anterior vimos qué eran los GPIO en una Raspberry Pi y la finalidad de cada uno.

Hoy os voy a contar cómo configurarlos para su uso como entrada/salida. Os enseñaré 2 formas de hacerlo: mediante el propio terminal de Raspbian y con Python.

Yo tengo Raspbian como sistema en mi Raspbery Pi y es el que utilizaré para explicaros todo esto. Si no sabéis como instalarlo aquí os cuento como.

Configurar GPIO desde el terminal

Como ya sabéis, y si no os lo cuento yo, en Linux todo el hardware se trata como un fichero. Por ejemplo, si tenéis un disco duro lo más probable es que tengáis algo como esto: /etc/sda. En el caso de los GPIO no es muy distinto. Como estamos utilizando una distro Linux (Raspbian) en nuestra Raspberry Pi, podremos crear un fichero por cada GPIO y definir en el toda la configuración necesaria. Al tratarse de un fichero podremos usar todos los comandos que nos proporciona el shell para el tratamiento de ficheros.

Pero ¿Sirve cualquier fichero? Evidentemente, no. Los ficheros de configuración de los GPIO deberán encontrarse en esta ruta: /sys/class/gpio/

Dicho esto, vamos a ver cómo configurar los GPIO desde el terminal.

Configuración

El proceso de configuración es muy sencillo:

El primer paso es crear un fichero para el GPIO que queramos usar. Para ello utilizaremos el siguiente comando:

echo N > /sys/class/gpio/export 

Donde N será el número del GPIO que queremos configurar. ¡Importante! Hay que utilizar el número del GPIO, no el del pin físico. Podéis consultarlos aquí.

Supongamos que queremos configurar el GPIO 17 (pin 11). El comando será:

echo 17 > /sys/class/gpio/export

Si ahora entramos en /sys/class/gpio con el comando ls veremos que se ha creado un fichero llamado gpio17:

Ahora que ya tenemos el fichero creado vamos a configurar el GPIO.

Escritura

Si queremos usar el GPIO como salida, por ejemplo para conectar un LED. Lo haremos con la siguiente instrucción:

echo out > /sys/class/gpio/gpioN/direction

N será el número del GPIO configurado previamente. Siguiendo con el ejemplo del 17 el comando quedaría así:

echo out > /sys/class/gpio/gpio17/direction

Una vez configurado como salida (out), podremos enviar valores al GPIO. Recordad que son pines digitales, por tanto usaremos 0 (0V) o 1 (3.3V).

echo 1 > /sys/class/gpio/gpio17/value
echo 0 > /sys/class/gpio/gpio17/value

Si tuviésemos un LED conectado al GPIO y enviamos un 1, el LED se iluminará. Si enviamos un 0 el LED se apagará.

Lectura

Por el contrario, si queremos usar el GPIO como entrada, por ejemplo para conectar un pulsador, lo haremos así:

echo in > /sys/class/gpio/gpioN/direction

Igualmente hay que usar el fichero del GPIO que se creó previamente. En el ejemplo gpio17:

echo in > /sys/class/gpio/gpio17/direction

Una vez está configurado como entrada (in) podremos leer el valor del mismo con el siguiente comando:

gpio read 17

Los posibles valores serán 0 (0V) o 1 (hasta 3.3V). Recordad que un voltaje superior a 3.3V puede dañar la placa.

Eliminar entradas

Cuando terminemos de usar el GPIO tendremos que eliminar la configuración usando el siguiente comando:

echo N > /sys/class/gpio/unexport

N tomará el valor del GPIO que queremos eliminar. Siguiendo con el ejemplo, si queremos eliminar la entrada para el GPIO 17 el comando sería este:

echo 17 > /sys/class/gpio/unexport

El fichero /sys/class/gpio/gpio17 se elimina y el GPIO 17 dejaría de estar configurado.

Configurar GPIO con Python

Python es uno de los lenguajes muy utilizados para programar Raspberry Pi. Es fácil de aprender y de usar. Además, existen gran cantidad de módulos ya implementados pensados para su uso con Raspberry Pi.

Python 3 viene instalado por defecto en Raspbian, por lo tanto no sería necesaria su instalación. Lo que si vamos a instalar es el módulo que necesitamos para trabajar con los GPIO.

Instalar módulo GPIO para Python

Lo podemos descargar desde su repositorio oficial pulsando en download:

Cuando termine la descarga tendremos un fichero como este:

A no ser que indiquéis otra cosa, en Raspbian las descargas se guardan en /home/pi/Downloads.

Vamos a descomprimirlo. Pinchamos en el archivo descargado con el botón derecho del ratón y pulsamos en Extract Here en el menú que se abre.

Abrimos un terminal y nos movemos al directorio que acabamos de descomprimir con el comando cd. En mi caso es cd /home/pi/Downloads/RPi.GPIO-0.7.0.

Si hacemos un ls de este directorio veremos que dentro hay un archivo llamado setup.py:

Lo instalaremos así:

sudo apt-get install python-dev python3-dev
sudo python3 setup.py install

Ya tenemos todo listo para empezar a trabajar con los GPIO. Vamos a ver cómo configurarlos como entrada/salida.

Configuración

Todo el código lo escribiremos en un fichero con extensión .py. Podéis usar el editor que más os guste.

Lo primero que haremos será importar el módulo RPi.GPIO que descargamos antes:

import RPi.GPIO as gpio

Ahora procedemos a configurar los GPIO. Primero indicaremos el modo en el que vamos a trabajar con la función setmode. Aquí tenemos dos opciones: usar el número del GPIO o usar el número del pin físico.

Si queremos usar el pin físico lo indicaremos de esta forma:

gpio.setmode(gpio.BOARD)

Si preferimos usar el número de GPIO lo haremos así:

gpio.setmode(gpio.BCM)

Escritura

Si queremos configurar un GPIO como salida, por ejemplo para conectar un LED, lo haremos con la función setup de la siguiente forma:

gpio.setup(N,gpio.OUT)

El valor de N dependerá del modo que hayáis elegido antes. Si estáis usando BOARD entonces N será el pin físico. Por ejemplo, si queremos configurar el GPIO 17 su pin físico es el 11:

gpio.setup(11,gpio.OUT)

Si estáis usando BCM entonces tendréis que indicar el GPIO, es decir, 17:

gpio.setup(17,gpio.OUT)

Una vez configurado el GPIO ya podemos enviar el dato usando la función output. El módulo RPi.GPIO tiene definidas dos constantes para este fin: HIGH y LOW. La primera representa un pulso alto (3.3V) y la segunda un pulso bajo (0V):

gpio.output(N,gpio.HIGH)
gpio.output(N,gpio.LOW)

Al igual que antes, N será el GPIO o el pin físico. Dependerá del modo elegido (BOARD o BCM).

Lectura

La otra opción es configurar el GPIO como entrada, por ejemplo para conectar un pulsador. Para ello usaremos la constante IN con la función setup:

gpio.setup(N, gpio.IN)

La definición de N es igual que en la escritura.

La operación de lectura la realizaremos con la función input. Nos devolverá HIGH si entran por el GPIO más de 0V (3.3V máximo) o LOW en caso de entrar 0V.

gpio.input(N)

El parámetro N es el GPIO del que queremos leer. Al igual que en los casos anteriores su valor dependerá del modo elegido (BOARD o BCM).

En el próximo artículo os enseñaré a conectar un LED a un GPIO y a programarlo con Python.

Sígueme:

Deja una respuesta

Up ↑