GPIO: todo sobre las conexiones de la Raspberry Pi 4 y 3

Raspberry Pi 4 GPIO

Los pines GPIO de la placa Raspberry Pi 4, la 3, y también de sus predecesores, dotan a la placa SBC de capacidades similares a las que puede tener Arduino, ya que con ellos puedes crear proyectos electrónicos muy interesantes controlados desde el sistema operativo mediante código en distintos lenguajes, como Python.

Eso hace que la placa sea algo más que un simple ordenador barato. Te va a permitir conectar multitud de elementos electrónicos que puedes usar con Arduino, pero que también pueden ser controlados desde la Pi. En esta guía intentaré darte toda la información posible sobre estos pines GPIO para que puedas comenzar a aprovecharlos…

¿Qué es GPIO?

GPIO

GPIO son las siglas de General Purpose Input/Output, es decir, Entrada/Salida de propósito general. Lo pueden tener diferentes productos electrónicos, como los propios chips o ciertas placas PCB como es el caso de esta Raspberry Pi. Como su propio nombre indica, son pines que se pueden configurar para realizar distintas funciones, de ahí que sean de propósito general y no para un uso específico.

Será el usuario en tiempo de ejecución el que pueda configurar estos pines GPIO para que hagan lo que él quiere. Se puede hacer de diferentes formas, como con ciertos códigos o scripts desde la consola o con el programa Python, que es una de las formas más sencillas y preferidas por la cantidad de opciones que tienes a tu disposición.

De esta forma, la Raspberry Pi no solo dispone de una serie de puertos e interfaces para conectar varios dispositivos estándar, sino que agrega estos pines GPIO para que puedas agregar otros dispositivos electrónicos o proyectos makers que tú mismo hayas creado. De la misma forma que lo harías con Arduino y sus pines E/S para el control.

Y no es exclusividad de Arduino o la Raspberry Pi, también lo tienen otras placas SBC similares y productos embebidos.

Funciones de los GPIO

Y entre sus características más destacadas:

  • Pueden ser configurados tanto como entrada como de salida. Tienen esa dualidad como les ocurre a los de Arduino.
  • Los pines GPIO también pueden ser activados y desactivados mediante código. Es decir, pueden ponerse a 1 (alto nivel de voltaje) o a 0 (bajo nivel de voltaje).
  • Por supuesto pueden leer datos binarios, como los unos y ceros, es decir, señal de voltaje o ausencia de ella.
  • Valores de salida de lectura y escritura.
  • Los valores de entrada pueden ser configurados en algunos casos como eventos para que generen algún tipo de acción sobre la placa o sistema. Algunos sistemas embebidos los usan como IRQ. Otro caso es configurar que cuando uno o varios pines estén activos por ciertos sensores realice alguna acción…
  • En cuanto al voltaje e intensidad, debes saber bien las capacidades máximas aceptables por la placa, en este caso la Raspberry Pi 4 o la 3. No debes pasarlos para no dañarla.

Por cierto, cuando se agrupa un grupo de pines GPIO, como es el caso de la Raspberry Pi, se conoce al conjunto como puerto GPIO.

Los pines GPIO de la Raspberry Pi

GPIO Raspberry Pi

Esquema válido para la versión 4, 3, Zero

Las nuevas placas Raspberry Pi 4 y la versión 3 están dotadas con un gran número de pines GPIO. No todas las versiones ofrecen la misma cantidad, ni están numerados de la misma forma, así que hay que tener cuidado con esto para saber bien cómo debes realizar la conexión según el modelo y revisión que tengas.

Pero lo que sí es más genérico es los tipos de GPIO que puedes encontrar en el puerto de las placas Raspberry Pi. Y eso será lo primero que me gustaría dejar claro, ya que así conocerás los tipos de pines con los que puedes contar para tus proyectos:

  • Alimentación: estos pines sirven para poder conectar las líneas o cableado de alimentación para tus proyectos electrónicos. Se corresponden a pines similares a los que tiene la placa Arduino, y que proveen de voltajes de 5v y 3v3 (3.3v limitados a 50mA de carga). Además, también encontrarás los de tierra (GND o Ground). Si no usas fuentes externas de alimentación como pilas, baterías, o adaptadores, estos pines te pueden servir de gran ayuda para alimentar tu circuito.
  • DNC (Do Not Connect): son pines que hay en algunas versiones y que no tienen función, pero que en las nuevas placas sí que se les ha dado otro fin. Estos solos los encontrarás en modelos más primitivos de la Pi. En las nuevas 3 y 4 estarán marcados como GND por lo general, pudiéndose integrar en el grupo anterior.
  • Pines configurables: son los GPIO normales, y se pueden programar mediante códigos como luego explicaré para hacer lo que necesites.
  • Pines especiales: son algunas conexiones que están destinados a conexiones o interfaces especiales como UART, conexiones serie TXD y RXD, etc., como ocurre con Arduino.  Incluso vas a encontrar algunos como SDA, SCL, MOSI, MISO, SCLK, CE0, CE1, etc. Entre ellos destacan:
    • PWM, que pueden regular el ancho del pulso como ya vimos en un artículo previo. En la Raspberry Pi 3 y 4 son los GPIO12, GPIO13, GPIO18 y GPIO19.
    • SPI es otra interfaz de comunicación que también analicé en otro artículo. E el caso de las nuevas placas de 40-pin, son los pines (con diferentes canales de comunicación como ves):
      • 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 es otra conexión que también he explicado en este blog. Este bus está compuesto por la señal de datos (GPIO2) y el reloj (GPIO3). Además de EEPROM Data (GPIO0) y EEPROM Clock (GPIO1).
    • Serial, otra comunicación muy práctica con pines TX (GPIO14) y RX (GPIO15) como los que puedes encontrar en la placa Arduino UNO.

Recuerda que los GPIO son la interfaz entre la Raspberry Pi y el mundo exterior, pero que tienen sus limitaciones, especialmente eléctricas. Algo que debes tener muy encuenta para no estropear la placa es recordar que estos pines GPIO suelen ser unbuffered, es decir, sin buffer. Esto quiere decir que no disponen de protección, por lo que debes vigilar las magnitudes de voltaje e intensidad aplicada para no terminar con una placa inservible…

Diferencias de los GPIO entre versiones

pines GPIO de Raspberry Pi antiguas

Como he dicho, no en todos los modelos son los mismos pines, te dejo aquí unos esquemas para que puedas ver las diferencias entre modelos y así poder centrarme en los de la Raspberry Pi 4 y 3, que son las más nuevas y la que probablemente tengas en tu poder. Se diferencia entre (todas las de cada grupo comparten los mismos pines):

  • Raspberry Pi 1 Model B Rev 1.0, con 26-pin ligeramente diferente al de la Rev2.
  • Raspberry Pi 1 Model A y B Rev 2.0, ambos modelos con 26-pin.
  • Rapsberry Pi Model A+, B+, 2B, 3B, 3B+, Zero y Zero W, y también los modelos de 4. Todos ellos con un cabezal de 40-pin GPIO.

¿Qué puedo conectar en los GPIO?

Raspberry Pi hat

No solo podrás conectar dispositivos electrónicos como transistores, sensores de humedad/temperatura, termistores, motores paso a paso, LEDs, etc. También se pueden conectar componentes o módulos creados específicamente para la Raspberry Pi y que extienden las capacidades de la placa más allá de lo que incluye de base.

Me estoy refiriendo a los famosos hats o sombreros y plates que puedes encontrar en el mercado. Los hay de muchos tipos, desde los que sirven para controlar motores con drivers, hasta otros para crear un cluster de cómputo, con panel de LEDs controlable, para agregar capacidad de TV DVB, pantalla LCD, etc.

Estos sombreros o hats van montados sobre la placa Raspberry Pi, coincidiendo con los GPIO necesarios para que pueda funcionar. Por tanto, su montaje es bastante simple y rápido. Eso sí, asegurate de la versión de placa compatible con cada hat, ya que el puerto GPIO es diferente como has visto…

Lo digo por si tienes alguna placa más antigua, ya que los hats son compatibles solo con las más nuevas. Como son los modelos Raspberry Pi Model A+, B+, 2, 3, y 4.

Introducción al uso de GPIO en la Raspberry Pi

Salida del comando pinout

Fuente: Raspberry Pi

Para comenzar, en Raspbian, puedes abrir la consola y teclear el comando pinout, lo que te va a devolver es una imagen en el terminal con los pines GPIO disponibles en tu placa y para qué sirve cada uno. Algo muy práctico para tenerlo siempre presente en el momento de trabajo para que no te confundas.

Primer proyecto: hacer titilar un LED con los GPIO

GPIO con LED en Raspberry Pi

La forma más básica de hacer una especie de «hello world» con los GPIO es usar un simple LED conectado a los pines de la Raspberry Pi para que puedas ver cómo funcionan. En este caso, lo he conectado a GND y el otro al pin 17, aunque puedes elegir otro de los pines normales…

Una vez conectados, puedes controlarlos desde Raspbian haciendo uso del terminal. En Linux, se usan unos ficheros específicos como los que hay en el directorio /sys/class/gpio/. Por ejemplo, para crear un fichero con la estructura necesaria para comenzar a trabajar:


echo 17 > /sys/class/gpio/export

Luego lo puedes configurar como una entrada (in) o como una salida (out) ese pin 17 elegido para nuestro ejemplo. Puedes hacerlo muy fácilmente con:


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

En este caso como salida, ya que queremos enviar un pulso eléctrico al LED para encenderlo, pero si se tratase de un sensor, etc., podrías usar in. Ahora, para encender (1) o apagar (0) el LED puedes usar:


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

Si quieres pasar a otro proyecto y borrar la entrada creada, puedes hacerlo de esta manera:


echo 17 > /sys/class/gpio/unexport

Por cierto, también puedes reunir todos los comandos necesarios para tu proyecto, como todos los anteriores, guardarlos en un fichero tipo script de Bash y luego ejecutarlos en paquete de una vez, en vez de teclearlos uno a uno. Esto es práctico cuando repites muchas veces el mismo ejercicio, para no tener que reescribir. Solo ejecutar y listo. Por ejemplo:

nano led.sh

#!/bin/bash
source gpio 
gpio mode 17 out
while true; do 
gpio write 17 1 
sleep 1.3 
gpio write 17 0 
sleep 1.3 done

Una vez terminas, guardas y luego puedes darle los permisos adecuados de ejecución y ejecutar el script para que el LED se encienda, espere 1.3 segundos y se apague así en bucle…

chmod +x led.sh
./led.sh

Programación avanzada

código fuente lenguaje de programación

Evidentemente lo anterior sirve para pequeños proyectos electrónicos con pocos componentes, pero si quieres crear algo más avanzado, en lugar de los comandos, lo que puedes usar son lenguajes de programación para hacer diferentes scripts o códigos fuente que automaticen el funcionamiento.

Se pueden usar diferentes herramientas para programar, con lenguajes muy diversos. Las bibliotecas que ha desarrollado la comunidad te facilitan mucho las cosas, como WiringPi, sysfs, pigpio, etc. Los programas pueden ser de lo más variado, desde Python, que es la opción preferida de muchos, pasando por Ruby, Java, Perl, BASIC, e incluso C#.

De forma oficial, la Raspberry Pi te ofrece muchas facilidades para programar sus GPIO, como:

  • Scratch, para los que no saben programar y quieren usar los bloques tipo puzzle de este proyecto con el que también se puede programar a Arduino, etc. La programación con bloques gráficos es bastante intuitiva y muy práctica para el ámbito de la educación.
  • Python: este sencillo lenguaje de programación interpretado permite crear códigos sencillos y potentes, con multitud de bibliotecas a tu disposición para hacer casi todo lo que imaginas.
  • C/C++/C#: son lenguajes más potentes de programación para crear binarios con los que interactuar con los GPIO. Puedes hacerlo de varias formas, usando la forma estándar o interfaz del kernel vía la bibliotecalibgpiod, pero también mediante una biblioteca de terceros como es pigio.
  • Processing3, similar al de Arduino.

Elige con flexibilidad el que más te guste o sencillo te parezca.


Sé el primero en comentar

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.