Raspberry Pi GPIO Explicación para principiantes + Programación (Parte 2)

Una de las características especiales de Raspberry Pi son los pines de entrada y salida programables. Estos llamados GPIO se pueden cambiar fácilmente a través de un programa, que veremos en este tutorial. Para ello escribiremos un programa en Python, por un lado registramos las entradas y por otro cambiamos los pines GPIO de la Raspberry Pi para que podamos cambiar otros módulos y sensores. Además, también explicaré cómo funciona una placa de pruebas.

Si no has leído la primera parte y todavía tienes problemas con los conceptos básicos, te aconsejo que leas esa primera. Para aquellos que ya tienen experiencia en programación pero aún no han trabajado con los GPIO, pueden comenzar con esto directamente.

Por cierto: Sería genial para las otras partes si tienes alguna sugerencia o lo que más te interese. Intentaré incorporar eso en el futuro.

Piezas de hardware requeridas

En este tutorial, necesitaremos algunos bloques de construcción de hardware. Estos son entre otros:

Por cierto, estos componentes siempre son necesarios. Si desea construir más proyectos de hardware, definitivamente necesitará estos accesorios.

¿Cómo funciona una placa de pruebas?

Una placa de prueba es útil ya que al usarla uno puede configurar circuitos rápidamente sin tener que soldarlos cada vez. Ofrece grandes ventajas especialmente a la hora de probar y diseñar. Hay protoboards de diferentes tamaños, pero la estructura suele ser la siguiente:

Las conexiones están marcadas en el siguiente dibujo esquemático. Las líneas muestran cuáles de los agujeros están conectados. En la parte superior e inferior, puede ver dos barras horizontales, a las que normalmente se conectan los polos positivo y negativo de un dispositivo.

Las conexiones en los pines del medio son verticales. Aquí, por ejemplo, se puede insertar un LED en dos columnas una al lado de la otra. Pero más sobre esto en un momento.

Descripción general de Raspberry Pi GPIO

Desde el modelo B+, las Raspberry Pi tienen un cabezal de 40 pines. No todos se pueden leer o conectar, ya que también hay algunas conexiones de voltaje y tierra. El siguiente gráfico enumera los pines completos, incluidas las funciones y la numeración. El lado izquierdo (verde) debe simbolizar la placa de la Raspberry Pi. Asignación de pines GPIO de Raspberry Pi

Todos los pines que tienen «GPIO» en sus nombres se pueden programar. También está «Tierra» (= conexión a tierra) y los pines de voltaje (3.3V y 5V).

Como puede ver, hay dos asignaciones de pines: primero la asignación de pines ascendente (comenzando en 1 en la parte superior izquierda) y luego la numeración bastante aleatoria de los GPIO. Esto es importante porque puede dirigirse a un GPIO a través de ambos números.

Pin 15 = GPIO 22, por ejemplo. Siempre preste atención a si se usa pin o GPIO. La mayoría de los tutoriales no utilizan la numeración de pines, sino el número GPIO.

Preparación

Como antes, abrimos el editor de Python a través del menú Inicio > Programación.

En la consola de Python abierta primero ingresamos lo siguiente:

import RPi.GPIO as GPIO

Estamos importando una biblioteca con la que podemos programar los pines GPIO de Raspberry Pi. Esta biblioteca ya contenía todas las funciones requeridas, por lo que no tenemos que escribir ninguna función adicional para ella.

También importamos una biblioteca con la que podemos detener el script por un corto tiempo. Esto será interesante después.

import time

Luego indicamos si queremos direccionar los GPIO a través de números de placa (1-40) o a través de su número GPIO. Como queremos esto último, el comando es:

GPIO.setmode(GPIO.BCM)

Cambiar pines GPIO de Raspberry Pi – Salida

En primer lugar, queremos cambiar algunos LED simples usando los GPIO. Construimos los LEDs según el siguiente gráfico. Como conexión entre la Raspberry Pi y la placa de prueba, puede usar los cables de puente y el cable simple para todas las demás conexiones. Los colores son irrelevantes y solo están destinados a una mejor diferenciación.

El LED tiene dos extremos de diferentes longitudes. El extremo más largo llega al voltaje positivo de 3,3 voltios del GPIO 23 (pin 16). La resistencia elegida es de 330Ω (Ohm).

Ahora vuelve a la consola de Python, donde ingresamos nuestro código. En primer lugar, tenemos que definir el pin como salida:

GPIO.setup(23, GPIO.OUT)

Las funciones de salida para este pin ya están disponibles. Con los siguientes dos comandos podemos primero encender el LED y luego apagarlo de nuevo:

GPIO.output(23, GPIO.HIGH) GPIO.output(23, GPIO.LOW)

Este comando simplemente dice si se debe aplicar un voltaje de 3.3V (ALTO) o 0V (BAJO).

Es bastante fácil, ¿no? Si desea construir un pequeño circuito intermitente, puede, por ejemplo, hacer lo siguiente:

for i in range(5):     GPIO.output(23, GPIO.HIGH)     time.sleep(0.5)     GPIO.output(23, GPIO.LOW)     time.sleep(0.5)

Esto enciende y apaga el LED 5 veces, esperando medio segundo antes de cambiar el estado.

Leer pines GPIO de Raspberry Pi – Entrada

Con los GPIO, las corrientes no solo se pueden cambiar, sino que también se pueden leer. Por lo tanto, ahora estamos ampliando nuestro circuito con un botón. El estado debe leerse y el LED debe encenderse tan pronto como se presione el botón. Si ya no se presiona el botón, el LED también debería dejar de encenderse.

Primero ampliamos el circuito. Además del botón, necesitamos una resistencia de 10 000 Ω, que se conecta a tierra desde un extremo del botón. En el medio, hay una conexión al GPIO 24 (pin 18). El otro extremo del interruptor está conectado al voltaje de 3,3 voltios:

¿Por qué todo el asunto? Mientras no se presione el interruptor, la conexión entre el voltaje de 3,3 V y el GPIO está abierta. Sin embargo, para que se reconozca un estado claro (ya sea 0 V o 3,3 V), la conexión se conecta a tierra a través de una resistencia muy grande.
Tan pronto como se presiona el botón, la conexión se cierra y se conectan 3.3V al GPIO.

Nota: Nunca conecte más de 3,3 V a los GPIO, de lo contrario se pueden romper.

Vayamos al código. Aquí también, primero tenemos que establecer el estado, pero esta vez el pin se define como entrada:

GPIO.setup(24, GPIO.IN)

Ahora ya podemos consultar el estado:

GPIO.input(24)

Esto generará 0 (si no se presionó el botón) o 1 (si se presionó el botón).

En el último paso, ampliamos el programa de la siguiente manera, para que el LED esté siempre encendido cuando se presiona el botón.

# Infinite loop while True:     if GPIO.input(24) == 0:         # Turn off         GPIO.output(23, GPIO.LOW)     else:         # Turn on         GPIO.output(23, GPIO.HIGH)

También puede cancelar el proceso con CTRL + C.

Resumen

En resumen, también está el código de todo el script por si alguien quiere guardarlo en un archivo y llamarlo como un todo.

import RPi.GPIO as GPIO import time  GPIO.setmode(GPIO.BCM)  GPIO.setup(23, GPIO.OUT) GPIO.setup(24, GPIO.IN)  for i in range(5):     GPIO.output(23, GPIO.HIGH)     time.sleep(0.5)     GPIO.output(23, GPIO.LOW)     time.sleep(0.5)  # Infinite loop while True:     if GPIO.input(24) == 0:         # Turn off         GPIO.output(23, GPIO.LOW)     else:         # Turn on         GPIO.output(23, GPIO.HIGH)

Si disfrutó de esta introducción, solo puedo recomendar el mini proyecto de un interruptor de semáforo. Dividido en dos partes, se construye un sistema de semáforos en funcionamiento que consta de semáforos para automóviles y peatones.

Puedes encontrar más información sobre esta estructura aquí.

Con los conocimientos impartidos aquí, ya puedes iniciar pequeños proyectos. Aquí hay una pequeña muestra:

En la siguiente parte, escribiremos nuestra primera GUI (interfaz gráfica de usuario), que también podemos usar para controlar los GPIO.