Raspberry Pi: entrada y salida básica

Publicado .

Una de las diferencias entre la Raspberry Pi y otras computadoras como PCs de escritorio, teléfonos inteligentes y tabletas, es que la RPi cuenta con 40 puertos GPIO que se controlan a través de software personalizado, esto la hace similar a otras plataformas de desarrollo como Arduino, pero la RPi cuenta con el poder de procesamiento y velocidad de una computadora regular. Los puertos GPIO (General Purpose Input and Output) son pines que se pueden utilizar para varios propósitos, como encender o apagar LEDs, trabajar con sensores, mover motores o controlar circuitos electrónicos caseros.

Para demostrar su uso, elaboraremos algunos circuitos básicos sobre la Raspberry Pi que comprueban su capacidad de control sobre los puertos GPIO, utilizaremos una placa de prototipado o solderless breadboard para facilitar la conexión de los circuitos y utilizaremos el lenguaje Python para crear el software que controle los puertos GPIO.

Antes que nada es necesario conocer los pines y el número de puerto GPIO que representan, así como sus funciones especiales. En la siguiente imagen se describe el mapeo completo de los puertos. En resumen, contamos con 2 salidas de 5V, 2 salidas de 3.3V, dos cables para dispositivos que se comunican por el protocolo I2C, 5 cables para dispositivos que se comunican con el protocolo SPI, dos cables para UART y 18 puertos de entrada y salida comunes. Es importante saber diferenciar cuando se está refiriendo a un puerto GPIO o a su número de pin.

Salida básica

Realizaremos un ejercicio básico de salida para encender y apagar un LED, además del LED necesitaremos una resistencia de al menos 270Ohms y cables para las conexiones. Elabora el siguiente circuito, conecta el pin 3 (3.3V) al anodo del LED (patita más larga), la resistencia a continuación en el siguiente extremo del LED y el extremo restante de la resistencia conectada en el pin 6 de la RPi (GND), tal como se muestra en la siguiente imagen:

El LED deberá encender inmediatamente al completar el circuito, lo que indicará que todo está bien, si no, desconecta y revisa la conexión del circuito, recuerda que el LED tiene polaridad, y el extremo positivo o anodo es el que recibe el flujo de la corriente del pin 1. Así estaríamos utilizando a la Raspberry como una batería para alimentar nuestro LED, pero ahora que tenemos este circuito podremos poner el LED a control de la RPi.

Desconecta el anodo del LED del pin 1 de la RPi (cable rojo en la imagen), conecta el anodo del LED en el pin 3, conocido como GPIO2. El LED no encenderá, vamos a activar el puerto a través de software escribiendo unas pocas líneas de código en Python. Abre la consola de la Raspberry Pi y ejecuta el siguiente código:

sudo python

Esto abrirá el intérprete de Python con privilegios de administrador o súper usuario, los privilegios son siempre necesarios para controlar los puertos de la Raspberry. Escribe las siguientes líneas de código:

import RPi.GPIO
import time
RPi.GPIO.setmode(RPi.GPIO.BCM)

Las primeras dos líneas sirven para importar las librerías necesarias, la primera la de control de puertos y la segunda incluye algunas funciones relativas a tiempo, se ocupará más adelante. En la tercera línea estamos especificando que nos referiremos a los puertos por su número de puerto GPIO. Si hubiéramos escrito BOARD en lugar de BCM entonces se indicaría que nos estaríamos refiriendo a los puertos por su número de pin. Escribe la siguiente línea:

RPi.GPIO.setup(2, RPi.GPIO.OUT)

Esto establecerá al puerto GPIO2 (pin 3) como salida. Ahora escribe:

while True:
	RPi.GPIO.output(2, True)
	time.sleep(1)
	RPi.GPIO.output(2, False)
	time.sleep(1)

El LED comenzará a encenderse y apagarse cada 1 segundo, esto indefinidamente hasta presionar control+C para interrumpir la operación actual. Para salir del intérprete escribe exit(), también puedes copiar todo el código en un sólo archivo y ejecutarlo cuantas veces desees escribiendo sudo python nombrearchivo.py e interrumpirlo con control+C.

Entrada Básica

La entrada consiste en saber si el voltaje proveniente de un circuito externo es alto (high) o bajo (low). El ejercicio básico consiste en detectar si un botón o switch es presionado. Construye el siguiente circuito, conectando el puerto GPIO2 a un extremo del interruptor, después una resistencia de 330Ω (para proteger el circuito) y el extremo final a tierra del pin 30 (GND).


Abre de nuevo la terminal de Python o crea un nuevo archivo entrada.py y escribe el siguiente código:

import RPi.GPIO
RPi.GPIO.setmode(RPi.GPIO.BCM)

Establece al puerto GPIO2 como una entrada y activa el resistor interno de la Raspberry Pi para hacer un pull up al circuito, de esta forma:

RPI.GPIO.setup(2, RPI.GPIO.IN, pull_up_down=RPi.GPIO.PUD_PUD)

En un ciclo infinito lee el puerto GPIO2 y al presionar el botón se mostrará un mensaje y se romperá el ciclo:

while True:
	if RPi.GPIO.input(2) == RPi.GPIO.LOW:
		print("Interruptor presionado")
		break
RPi.GPIO.cleanup()

La última línea sirve para limpiar los puertos GPIO y que estos estén en su estado de "no usado", así futuros scripts que controlen los puertos no lanzarán la advertencia de que el puerto ya está en uso. Si no se hiciera un pull up al circuito entonces al leer el valor del puerto este variaría aleatoriamente entre high o low, también existe el pull down, no es necesario ninguno de los dos en circuitos donde se recibe un flujo de voltaje de un módulo o sensor, sólo en este caso para el circuito del botón.

Estos son los conocimientos básicos necesarios para controlar los puertos GPIO de la Raspberry Pi, es posible usar también Python 3 (ejecutando sudo python3) y las instrucciones son las mismas, sin embargo, no todas las librerías están codificadas de acuerdo a Python 3, por lo que se recomienda seguir utilizando Python 2.

Más tutoriales