Shield de infrarojos para Raspberry Pi - botones

Tras el artículo Shield de infrarojos para Raspberry Pi , relacionado con la utilización de la shield de infrarojos, donde se explica como utilizar los LED de emisión y recepción del módulo Emisor y Receptor de Infrarojos para Raspberry Pi , he pensado en escribir un pequeño artículo para utilizar los botones de esta placa.

No he encontrado nada de información sobre la utilización de los botones, así que he aplicado el funcionamiento habitual para este tipo de dispositivos GPIO.

Antes de comenzar, por favor, instala la shield en la Raspberry Pi como se indica en el artículo Shield de infrarojos para Raspberry Pi . Si no vas a usar la parte de infrarojos y solo necesitas los botones, puedes saltar la parte de configuración.

Comunicación con el núcleo del sistema

El kernel se comunica con este dispositivo utilizando el módulo uinput por lo que lo cargaremos mediante la edición del fichero de configuración /etc/modules, para ello añadiremos al final la siguiente línea:

uinput

Posteriormente será necesario reiniciar el sistemas para que cargue el módulo o bien, podemos cargarlo de forma puntual mediante el comando modprobe uinput. La siguiente vez que arranquemos la Raspberry Pi ya se cargará del fichero /etc/modules.

Instalación del software

Para poder recibir las señales, es necesario utilizar una serie de aplicaciones y librearías. Esta interacción la realizaremos utilizando Python. Para ello, lo primero será necesario instalar el gestor de paquetes de Python, llamado PIP:

sudo apt-get update
sudo apt-get install python-pip libudev-dev

Una vez instalado, procederemos a instalar los paquetes necesarios de Python, que son python-uinput y rpi.gpio. Para ello usaremos el siguiente comando.

sudo pip install python-uinput rpi.gpio

Creación del script de comunicación con los botones

Para comunicarnos con los botones vamos a usar un pequeño script. Este script se va a encargar de escuchar los pines donde se encuentran conectados los botones del shield al GPIO de nuestra Raspberry Pi. Los pines usados son los siguientes:

Uso Pin
Botón 1 21
Botón 2 22

Que corresponden a los siguientes botones:

IR Shield en Raspberry Pi 1

El siguiente paso es construir el script para procesar las pulsaciones. Para ello, creamos un fichero, en mi caso he editado el fichero ~/src/rpibtn.py y he incluido la siguiente información:

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import subprocess
import sys
import os

def select_Button_1(bouncetime):
    print "Button 1"

def select_Button_2(bouncetime):
    print "Button 2"

def gpio_setup():
    GPIO.setwarnings(False)
    GPIO.setmode (GPIO.BCM)

    GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_UP) # Button 1
    GPIO.add_event_detect(21, GPIO.FALLING, callback=select_Button_1, bouncetime=500)

    GPIO.setup(22, GPIO.IN, pull_up_down = GPIO.PUD_UP) # Button 2
    GPIO.add_event_detect(22, GPIO.FALLING, callback=select_Button_2, bouncetime=500)

gpio_setup()

while True:
    time.sleep(2)

El script es muy sencillo. Llama a la función gpio_setup(), que se encarga de esperar eventos desde los pines 21 y 22. Cuando llega un evento, se ejecuta la función select_Button_1 cuando se pulsa el botón 1 y select_Button_2 cuando se pulsa el botón 2. Las funciones únicamnete imprimen en pantalla Button 1 o Button 2 cuando son llamadas.

Ahora, puedes escribir las funciones que creas convenientes para la pulsación de cada botón. Un ejemplo podría ser apagar la Raspberry Pi, reiniciar los procesos de infrarojos, etc.

Para ejecutar el fichero, primero lo haremos ejecutable mediante el comando chmod:

chmod +x ~/rpibtn.py

Y finalmente lo ejecutaremos:

~/rpibtn.py

Enlaces de interes:

Os dejo en Mi página de Github los scripts que utilizo para este dispositivo y para otros que también usan GPIO de Raspberry Pi.