Herramientas de usuario

Herramientas del sitio


recursoseducativosgpio

Recursos educativos (Trabajo con pines de propósito general GPIOs)


1. Aspectos Generales

Para trabajar con los General Purpose I/Os (GPIOs) disponibles en el laboratorio remoto, tener en cuenta los siguientes pines que se encuentran conectados a los Leds de cada nodo o banco de trabajo:

GPIODescripción
GPIO17 Led1
GPIO27 Led2
GPIO22 Led3
GPIO10 Led4

En el laboratorio remoto las conexiones a nivel de hardware en la Raspberry Pi que se usa en cada banco se muestran en la siguiente imagen:

2. Configuración e interacción con pines de salida (GPIOs) mediante bloques gráficos

Para trabajar con los bloques gráficos y los GPIOs hemos creado los siguientes bloques disponibles en la categoría Raspberry Pi (E/S):

BloqueDescripción
Permite configurar el pin (GPIO) seleccionado en modo entrada o salida. Para trabajar con los leds, se debe colocar el bloque en modo salida.
Permite escribir un 1 (Encendido), 0 (Apagado) al GPIO seleccionado. Para poder escribir el GPIO debe estar configurado en modo salida.
Permite crear un retraso del tiempo especificado en segundos.

Con estos bloques la idea es crear nuestro primer algortimo para trabajar con GPIOs.

2.1 Primer programa con bloques GPIOs

Para este ejemplo, supongamos que queremos que un Led oscile cada segundo continuamente. Este Led esta conectado el GPIO17. Como el Led oscila “continuamente” debemos incluir un elemento que nos de esa continuidad en el código, usando para ello un bucle while. Cuando a este bucle en su condición le colocamos True se va a repetir todo lo que pongamos dentro de este bloque. El bucle while lo sacamos de la categoría Bucles en el laboratorio remoto y el True de la categoría Lógico. El ejemplo del algoritmo sería el siguiente:

  • Primero configuramos el GPIO como salida para trabajar con el Led1 (GPIO17).
  • Agregamos el bucle while que da continuidad a la oscilación del Led.
  • Escribimos un valor de 1 al Led (Enceder).
  • Esperamos 1 segundo.
  • Escribimos un valor de 0 al Led (Apagar).
  • Esperamos 1 segundo.

A continuación se muestra el video de explicación para trabajar con GPIOs.


3. Configuración de pines de salida (GPIOs) mediante código en lenguaje Python

Para trabajar con código directamente en Python para interactuar con los pines GPIOs usaremos las siguientes instrucciones en lenguaje de programación Python

Instrucción (Sentencia)Descripción
import RPi.GPIO as GPIO
Permite importar el paquete RPi.GPIO en Python que accede a la configuración y activación de los GPIOs
import time
Incorpora la librería o paquete time para retrasos en el código en segundos.
GPIO.setmode(GPIO.BCM)
Configura los pines de la raspberry pi en modo BCM. En este modo el pin se va a llamar “GPIO17”, “GPIO22”, etc. Esta instrucción debe llamarse antes de configurar el GPIO deseado como entrada o salida.
GPIO.setup(22,GPIO.OUT)
Permite configurar el GPIO en este caso el 22 como “salida”. Si quisieramos el pin como entrada se usaría GPIO.IN.
GPIO.output(22,0)
Escribe un '1' (encender) o un '0' (apagar) en el GPIO seleccionado en este caso el 22.
time.sleep(2)
Crea un retraso en tiempo, en este caso de 2 segundos.

Para trabajar en lenguaje Python, usaremos el siguiente código base que permite que un led (GPIO22) encienda y apague cada segundo.

#Inserta tu codigo de Raspberry Pi aqui (Nota: comentarios sin tildes!)
import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM) #Modo de configuracion BCM
 
#Configuramos el pin GPIO 22 como una salida
GPIO.setup(22,GPIO.OUT)
 
#Configuramos el pin GPIO 22 con un valor de 0V o LOW
GPIO.output(22,0)
 
while True:
    GPIO.output(22,1)
    time.sleep(2)
    GPIO.output(22,0)
    time.sleep(1)

El código funciona del siguiente modo:

  • Importamos la librería RPi.GPIO para trabajar con los pines GPIO.
  • Importamos la librería time para crear retrasos.
  • Configuramos la raspberry pi en modo BCM para llamar a los pines por nombre “GPIO22, GPIO17”, etc.
  • Configuramos el GPIO22 como salida.
  • Enviamos un cero lógico (apagado) al pin.
  • Colocamos un bucle while True que repetirá todo lo que se ponga dentro de él de manera continua.
  • Enviamos un uno lógico (encendido) al pin.
  • Esperamos 2 segundos
  • Enviamos un cero lógico (apagado) al pin.
  • Esperamos 2 segundos

Como estas últimas instrucciones están dentro del bucle while True se repetirán continuamente. El video de explicación de este código se muestra a continuación:


4. Secuencias con GPIOs en modo gráfico (Bloques)

Para trabajar secuencias mediante el uso de GPIOs usamos los mismos bloques descritos en la sección 2 de esta Wiki. Supongamos que deseamos hacer la siguiente secuencia, donde '1' significa que el led está encendido y '0' que el led está apagado.

SecuenciaLED1 (GPIO 17)LED2 (GPIO 27)LED3 (GPIO 22)LED4 (GPIO 10)
11000
21100
31110
41111
50000

En este caso los pasos para realizar el algoritmo son los siguientes:

  1. Configurar los pines GPIO17 a GPIO10 como salidas para trabajar con Leds.
  2. Escribir un '0' (Apagado) a estos pines (GPIO17-GPIO10) para que el algoritmo inicie con estos pines apagados.
  3. Colocar un bucle infinito (while true) debido a que la secuencia debe repetirse continuamente.
  4. Escribir un '1' (encendido) a cada pin o GPIO, tomando en cuenta la anterior tabla.
  5. Cada vez que se escriba un '1' al pin específico se debe colocar un retraso de 1 segundo para ver la secuencia adecuadamente.

El algoritmo con bloques quedaría de la siguiente manera:

Para el algoritmo, al final de la secuencia se deben apagar todos los pines. El video de explicación se muestra a continuación:


5. Secuencias con GPIOs en modo código

Para trabajar secuencias mediante el uso de GPIOs usamos los mismos bloques descritos en la sección 2 de esta Wiki. Supongamos que deseamos hacer la siguiente secuencia, donde '1' significa que el led está encendido y '0' que el led está apagado.

SecuenciaLED1 (GPIO 17)LED2 (GPIO 27)LED3 (GPIO 22)LED4 (GPIO 10)
11000
21100
31110
41111
50000

En este caso los pasos para realizar el algoritmo son los siguientes:

  1. Configurar los pines GPIO17 a GPIO10 como salidas para trabajar con Leds.
  2. Escribir un '0' (Apagado) a estos pines (GPIO17-GPIO10) para que el algoritmo inicie con estos pines apagados.
  3. Colocar un bucle infinito (while true) debido a que la secuencia debe repetirse continuamente.
  4. Escribir un '1' (encendido) a cada pin o GPIO, tomando en cuenta la anterior tabla.
  5. Cada vez que se escriba un '1' al pin específico se debe colocar un retraso de 1 segundo para ver la secuencia adecuadamente.

Para trabajar en código usaremos las instrucciones disponibles en la sección 3 de esta Wiki. El código en lenguaje Python para realizar la secuencia de la tabla anterior sería el siguiente:

import RPi.GPIO as GPIO #Libreria para trabajar con GPIOS
 
GPIO.setmode(GPIO.BCM) #Modo de configuracion BCM
 
import time #Libreria para retrasos
 
GPIO.setup(17,GPIO.OUT) #GPIO17-GPIO10 en modo salida
GPIO.setup(27,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(10,GPIO.OUT)
GPIO.output(17,0) #GPIO17-GPIO10 apagados
GPIO.output(27,0)
GPIO.output(22,0)
GPIO.output(10,0)
while True: #Bucle infinito, la identacion o tabulacion significa que las instrucciones estan 'dentro' del bucle.
  GPIO.output(17,1) #Activar pines de la secuencia
  time.sleep(1) #Colocar un retraso de 1 segundo entre secuencias
  GPIO.output(27,1)
  time.sleep(1)
  GPIO.output(22,1)
  time.sleep(1)
  GPIO.output(10,1)
  time.sleep(1)
  GPIO.output(17,0)
  GPIO.output(27,0)
  GPIO.output(22,0)
  GPIO.output(10,0)
  time.sleep(1)

El video de explicación para lenguaje Python de acuerdo a lo anterior se muestra a continuación:


recursoseducativosgpio.txt · Última modificación: 2021/12/07 20:21 por admin