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:
GPIO | Descripció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:
Para trabajar con los bloques gráficos y los GPIOs hemos creado los siguientes bloques disponibles en la categoría Raspberry Pi (E/S):
Bloque | Descripció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.
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:
A continuación se muestra el video de explicación para trabajar con GPIOs.
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:
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:
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.
Secuencia | LED1 (GPIO 17) | LED2 (GPIO 27) | LED3 (GPIO 22) | LED4 (GPIO 10) |
---|---|---|---|---|
1 | 1 | 0 | 0 | 0 |
2 | 1 | 1 | 0 | 0 |
3 | 1 | 1 | 1 | 0 |
4 | 1 | 1 | 1 | 1 |
5 | 0 | 0 | 0 | 0 |
En este caso los pasos para realizar el algoritmo son los siguientes:
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:
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.
Secuencia | LED1 (GPIO 17) | LED2 (GPIO 27) | LED3 (GPIO 22) | LED4 (GPIO 10) |
---|---|---|---|---|
1 | 1 | 0 | 0 | 0 |
2 | 1 | 1 | 0 | 0 |
3 | 1 | 1 | 1 | 0 |
4 | 1 | 1 | 1 | 1 |
5 | 0 | 0 | 0 | 0 |
En este caso los pasos para realizar el algoritmo son los siguientes:
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: