Está en la página 1de 12

Diplomado Visión Artificial e

Inteligencia Artificial

Modulo II: Raspberry y Python

Pines GPIO en Raspberry Pi

M.C.I. Victor Manuel Mora Romo


Hay que tener en cuenta que dependiendo del modelo de la Raspberry Pi encontramos
una cantidad de pines diferentes, por ejemplo, en la versión 1 de Raspberry Pi se tienen 26
pines GPIO mientras que a partir de la versión 2 de Raspberry Pi el número de pines aumentó
a 40. Sin embargo la compatibilidad es total, puesto que los 26 primeros pines mantienen su
función original.

Primeramente hay que actualizar el sistema por si no llegara a leer el GPIO:

sudo apt update

sudo apt full-upgrade

¿Qué es 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:
M.C.I. Victor Manuel Mora Romo
 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

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:

M.C.I. Victor Manuel Mora Romo


 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:
o 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.
o 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)
o 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).
o 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 en cuenta 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…

M.C.I. Victor Manuel Mora Romo


Diferencias de los GPIO entre versiones

No en todos los modelos son los mismos pines, aquí se puede 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 tengan
en su 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.

M.C.I. Victor Manuel Mora Romo


¿Qué puedo conectar en los GPIO?

No solo se podrá 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.
Como los hats o sombreros y plates. 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 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í, hay que asegurar la versión
de placa compatible con cada hat, ya que el puerto GPIO es diferente.

Introducción al uso de GPIO en la Raspberry Pi

M.C.I. Victor Manuel Mora Romo


Fuente: Raspberry Pi

Para comenzar, en Raspbian, se puede abrir la consola y teclear el comando pinout, lo que va a


devolver es una imagen en el terminal con los pines GPIO disponibles en tu placa y para qué sirve cada

M.C.I. Victor Manuel Mora Romo


uno. Algo muy práctico para tenerlo siempre presente en el momento de trabajo para que no te
confundas.
Primer proyecto: hacer (blink )titilar un LED con los GPIO

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 se pueda ver cómo funcionan. En este caso, se ha
conectado a GND y el otro al pin 17, aunque se puede elegir otro de los pines normales.
Nota de caracteres
Para usarlos en Linux es bastante sencillo, solo se debe presionar Ctrl+Shift y la tecla U
seguida del código ASCII pero en Hexadecimal, al comienzo con estos códigos se nos puede
complicar el uso porque estamos acostumbrados a la combinación de teclas Alt + (número
decimal) en Windows, pero todo es cuestión de costumbre, y pues teniendo las tablas a la
mano realmente se puede ahorrar tiempo valioso al momento de requerir símbolos
especiales.

A continuación, Les dejo la tabla ASCII:

M.C.I. Victor Manuel Mora Romo


Una vez conectados, se puede controlar 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

M.C.I. Victor Manuel Mora Romo


Si quieres pasar a otro proyecto y borrar la entrada creada, puedes hacerlo de esta manera:
echo 17 > /sys/class/gpio/unexport

Programación en Python
En primer lugar, se importa la librería GPIO y time. Vamos a utilizar el pin situado en su posición
de la placa 7. La siguiente instrucción será la inicialización del pin, es decir, los pines pueden ser
utilizados como entradas o salidas. Por último, solamente nos quedará activar (True) o desactivar
(False) el pin seleccionado. Para ello, se va a situar el código dentro de un bucle infinito.

import RPi.GPIO as GPIO


import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)

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

NOTA: se hace referencia al pin del gpio no del nombre del gpio.

M.C.I. Victor Manuel Mora Romo


Entradas digitales
El interruptor lo declaramos de tipo entrada y en la condición se puede observar que al pulsar
sobre el botón se encenderá el led situado en la posición 7 de nuestro pin GPIO y en caso contrario se
apagará.

import RPi.GPIO as GPIO


import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(3, GPIO.IN)
GPIO.setup(7, GPIO.OUT)

while True:
if GPIO.input(3):
GPIO.output(7, False)
else:
GPIO.output(7, True)

M.C.I. Victor Manuel Mora Romo


M.C.I. Victor Manuel Mora Romo

También podría gustarte