Pines y GPIO de la Raspberry

Este es uno de los capítulos del tutorial Raspberry Pi 400. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

El capítulo anterior de este tutorial trataba sobre el Sense HAT, un dispositivo que se relacionaba con tu Raspberry a través de los GPIO, sin embargo, ni siquiera hablamos sobre ellos. Particularmente, estos pines me tienen particularmente enamorado, porque me permiten interactuar con otros dispositivos y sobre todo con sensores con relativa sencillez. Esta facilidad que tienes a tu alcance, unida con unas pequeñas pinceladas de programación abren todo un mundo de posibilidades.

Así, este capítulo del tutorial trata sobre los GPIO de las Raspberry, que son los GPIO, y que posibilidades te ofrecen. Por supuesto, también como puedes interactuar con ellos, para sacarles el máximo provecho posible.

Pines y GPIO de la Raspberry

Pines y GPIO de la Raspberry

¿Que son los GPIO de la Rasbperry?

Los GPIO son esa fila de pines que encontrarás en un uno de los lados de tu Raspberry, que en el caso de la Raspberry Pi 400, se encuentran en el lado mas elevado del propio teclado. Se trata de entradas y salidas de propósito general (General-Purpose Input/Output). En general, se trata de 40 pines, pero esta cantidad puede variar en función del modelo.

El esquema de GPIO en la Raspberry

Antes de seguir, abre un terminal y conectate a la Raspberry vía SSH, para ejecutar las siguientes instrucciones e instalar una herramienta que te será de gran utilidad.

El primer paso es instalar pip3 un gestor de paquetes de Python, que seguro que exprimes al máximo. Para instalar esta herramienta ejecuta,

sudo apt install python3-pip

Ahora, de nuevo en el terminal, ya puedes instalar gpiozero, un interfaz muy sencillo para relacionarte con los GPIO de la Raspberry. Para esto, ejecuta,

pip3 install --user gpiozero

El hecho de instalarlo utilizando --user hace que solo se instale para tu usuario. Si quieres instalarlo para todos los usuarios de la Raspberry, puedes hacerlo con sudo pip3 install gpiozero. En este caso, necesitas utilizar sudo, porque necesitas derechos de administrador para hacerlo.

Una vez instalado, lo puedes ejecutar con pinout, si te da un error, esto es porque ~/.local/bin no se encuentra en el PATH. Para añadirlo al PATH, de nuevo ejecuta las siguientes instrucciones,

echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc

Ahora ya tienes pinout en el PATH, y lo puedes ejecutar desde donde quieras. Al hacerlo te mostrará el siguiente esquema,

GPI

Con la siguiente información,

J8:
   3V3  (1) (2)  5V    
 GPIO2  (3) (4)  5V    
 GPIO3  (5) (6)  GND   
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND   
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND   
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8 
   GND (25) (26) GPIO7 
 GPIO0 (27) (28) GPIO1 
 GPIO5 (29) (30) GND   
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND   
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21

POE:
TR01 (1) (2) TR00
TR03 (3) (4) TR02

Fíjate que tienes dos numeraciones distintas. Por un lado la que ves entre paréntesis que es correlativa, y por otro la que acompaña a cada uno de los pines. Así por ejemplo en la posición (3) tienes el GPIO2, por mencionarte alguno.

GPIO

Te recomiendo que le des un vistazo a la página de Raspberry Pi Pinout, donde encontrarás información exhaustiva sobre cada uno de los pines.

Además en esta página podrás encontrar como puedes combinar diferentes hat para tu Raspberry.

GPIO

Tensiones

En la Raspberry encontrarás dos tensiones o voltajes. Dos pines de 5 voltios (el 2 y el y 4) y 2 de 3,3 voltios (el 1 y el 17), así como 8 de tierra (todos los que están marcados como GND en el esquema anterior).

El resto de pines son pines de 3,3 voltios de propósito general. Es decir, entrada o salida, con el voltaje indicado. Es decir que los puedes poner a 3,3 o a 0V.

Por otro lado, además tienes los pines GPIO2 y GPIO3 que están diseñados como pines de entra, son embargo, como te he indicado anteriormente, cualquier pin salvo los de salida y tierra, los puedes utilizar tanto de entrada como de salida, de forma completamente indiferente.

Funciones alternativas

Además de lo indicado anteriormente, existen algunos pines que tienen una funcionalidad alternativa:

  • PWM modulación por pulsos. Vía hardware puedes utilizar GPIO12, GPIO13, GPIO18 y GPIO19. Mientras que vía software puedes utilizar cualquiera de los GPIO, salvo los que tienen una funcionalidad específica.
  • Buses SPI. Los buses SPI los puedes utilizar para conectar a diferentes periféricos
    • SPI0: MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8), CE1 (GPIO7)
    • SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18); CE1 (GPIO17); CE2 (GPIO16)
  • I2C, Inter Itegrated Circuit. Permiten comunicación por 2c cables con una gran variedad de sensores externos y dispositivos. En general estos dispositivos no deberías de utilizarlos como de propósito general.
    • Data: (GPIO2); Clock (GPIO3)
    • EEPROM Data: (GPIO0); EEPROM Clock (GPIO1)
  • UART, Universal Asynchronous Receiver/Transmitter, es un protocolo de comunicación serie. Este protocolo te puede ser de utilidad para controlar la Raspberry de forma remota.
    • TX (GPIO14); RX (GPIO15)

Programando los GPIO

Y por fin llegamos al momento interesante, el momento de programar los GPO. Existen diferentes lenguajes, empezando por Scratch, continuando con Python, y continuando con C y C++, sin olvidarme de Rust. Al final de este capítulo, puedes encontrar algunos enlaces de interés.

En mi caso, para lo que te voy a contar a continuación, me voy a decantar por Python. Se trata de un lenguaje de programación realmente amigable, y que aunque no tengas conocimientos de programación es verdaderamente sencillo de comprender.

Antes de lanzarte a programar es necesario que te des permisos para poder utilizar los GPIO. Para esto, tienes que ejecutar la siguiente instrucción en un terminal,

sudo usermode -aG gpio <username>

sustituyendo <username> por tu nombre de usuario como ya te habías imaginado

gpiozero

Para poder empezar a utilizar los GPIO con Python, lo tienes fácil, porque anteriormente en este capítulo, ya instalaste la librería que necesitas utilizar.

Algunas recetas para utilizar la librería que seguro te resultarán tremendamente interesantes lo puedes encontrar en las recetas con gpiozero. Aquí puedes desde lo mas sencillo que es iluminar un LED hasta recetas mas complejas donde conttrolar un robot.

Así, por ejemplo el del LED es tan sencillo como el que te muestro a continuación,

from gpiozero import LED
from time import sleep

red = LED(17)

while True:
    rend.on()
    sleep(1)
    red.off()
    sleep(1)

Una cuestión interesante es que a los GPIO los puedes llamar por su número como por su nombre GPIO. Es decir, cualquiera de las opciones que indicio a continuación es totalmente equivalente,

>>> led = LED(17)
>>> led = LED("GPIO17")
>>> led = LED("BCM17")
>>> led = LED("BOARD11")
>>> led = LED("WPI0")
>>> led = LED("J8:11")

Además de la clase LED, tienes otras clases interesantes como Button, LightSensor, RotaryEncoder, solo por citarte algunas.

Adafruit

Pero no es la única librería Python que tienes a tu disposición. También puedes utilizar un módulo de Python implementado por Adafruit, con el que puedes medir tanto temperatura como humedad relativa. Algo tan sencillo como,

#!/usr/bin/python
import sys
import Adafruit_DHT as dht

sensor = dht.DHT22
pin = 4
humidity, temperature = dht.read_retry(sensor, pin)
print('Temp={0:0.1f} *C,  Hum={1:0.1f} %'.format(temperature, humidity))
sys.exit(0)

En este caso, te recomiendo que le des una escucha al episodio número 98 del podcast en el que hablo sobre medir humedad y temperatura con la Raspberry.

Conclusión

Como ves, las posibilidades que te ofrece la Rasbperry y los GPIO son brutales. Solo tienes que investigar un poco y dar rienda suelta a tu imaginación para disfrutar al máximo de la Rasbperry.


Más información,

Imagen de portada de Hector Bermudez

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *