Manejar GPIO Raspberry Pi

En este punto https://aprendiendoarduino.wordpress.com/2020/03/01/gpio-raspberry-pi/ ya hemos visto las características físicas del GPIO de Raspberry Pi

Para controlar GPIO con Python, primero debes importar una librería de código escrito previamente. El más común y difundido es el Rpi.GPIO, utilizado para crear miles de proyectos desde los primeros días de la Raspberry Pi.

Ben Croston creó una biblioteca de Python llamada RPi.GPIO, que utilizó como parte de su proceso de elaboración de cerveza. Esto permitió a las personas controlar los pines GPIO desde sus programas Python, y se convirtió en un éxito tanto en educación como en proyectos personales. Lo usamos en muchos de nuestros recursos de aprendizaje gratuitos.

Web:

GPIO en Python: https://www.raspberrypi.com/documentation/computers/os.html#gpio-in-python 

Más recientemente, se ha introducido otra biblioteca, llamada GPIO Zero, que ofrece una experiencia más fácil para aquellos que son nuevos en Python y en la electrónica básica. GPIO Zero es una librería creada por Raspberry Pi para que sea más accesible y fácil de usar que RPi.GPIO

Web: https://pypi.org/project/gpiozero/

Documentación: https://gpiozero.readthedocs.io/en/stable/

Versión 1.5: https://www.raspberrypi.org/blog/gpio-zero-v1-5/

GPIO Zero creada por Raspberry Pi: https://www.raspberrypi.org/blog/gpio-zero-a-friendly-python-api-for-physical-computing/

Migrar de GPIO Zero desde RPi.GPIO https://gpiozero.readthedocs.io/en/stable/migrating_from_rpigpio.html

Linea de comandos gpiozero: https://gpiozero.readthedocs.io/en/stable/cli_tools.html

El módulo gpiozero siempre usa la numeración Broadcom GPIO para identificar un GPIO.

El módulo RPi.GPIO puede usar la numeración física de pin (BOARD) o la numeración Broadcom GPIO (BCM).

Ambas bibliotecas están preinstaladas en el sistema operativo Raspbian. En cuanto a la nomenclatura de los pines GPIO, hay varias maneras de identificarlos; el método más simple y obvio es definitivamente el que se refiere a su ubicación física. Empezando por la parte superior izquierda del GPIO, y con esto nos referimos al pin más cercano a la ranura de la micro SD, tenemos el pin físico 1 que proporciona alimentación 3v3. A la derecha de ese pin se encuentra el pin físico de 2 que proporciona 5v de potencia. El número de pines seguirá creciendo a medida que desciendas por las columnas, como habrás entendido a la izquierda encontraremos todos los pines con números impares y a la derecha los pares. 

Hay otro método utilizado, y es la numeración de pines de Broadcom (BCM) (numeración de pines GPIO) que, sin embargo, para el usuario medio puede parecer caótica, con GPIO17, 22 y 27 siguiéndole unos a otros con lo que parecería una pequeña reflexión sobre la numeración lógica. En realidad, el mapeo de pines BCM se refiere a los pines GPIO que estaban conectados directamente al SoC del Raspberry Pi.

La mayoría de los tutoriales de Raspberry Pi que verás utilizan este esquema de numeración, también porque es el que cuenta con el apoyo oficial de la Fundación Raspberry Pi. También ten en cuenta que los números de pin BCM y GPIO se refieren al mismo esquema. Por ejemplo, GPIO17 es lo mismo que BCM17. Por último, algunos pines GPIO también tienen funciones secundarias que les permiten interactuar con diferentes tipos de dispositivos que utilizan los protocolos I2C, SPI o UART; por ejemplo, los pines GPIO3 y GPIO4 también son pines SDA y SCL I2C utilizados para conectar dispositivos a través del protocolo I2C

Más información: https://descubrearduino.com/pines-gpio-de-la-raspberry-pi-4/

Pines GPIO Zero

Uso de los pines:

PWM con RPi: http://www.instructables.com/id/RaspberryPi-Pulse-Width-Modulation-Demonstration/?ALLSTEPS

Ejemplos de Uso

Blink Led

Antes de empezar recordar comprobar la posición de los pines porque en caso de error podemos dañar la Raspberry Pi ya que los GPIO no tienen ninguna protección.

  • Cuando conectes cables a los GPIO procura no equivocarte y fíjate bien.
  • Usa cables con recubrimiento del tipo Dupont Macho-hembra por ejemplo, y no acerques cables sin proteger a tus GPIO (Y mucho menos un destornillador) porque puedes hacer un corto con facilidad.
cables M-F
  • Una vez que conectes un cable hembra protegido, vuelve a mirar y asegúrate de que lo has conectado al pin que querías y no al de al lado.
  • Especial cuidado con los pines que uses para sacar 3V o 5V de tu Raspi. No dejes el otro extremo al aire: Asegúrate de conectarlo a algún sitio.
  • NO CONECTES NADA DE 5V si no estás seguro. Tu Raspberry funciona a 3.3V y meterle 5V en un pin puede suponer quemar el procesador central. 

Instalar las librerías para el uso de los pines GPIO desde Python, asegurandonos de tener actualizado Raspbian:

  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install python3-dev
  • sudo apt-get install pyton3-rpi.gpio

Tened en cuenta que en esta ocasión vamos a alimentar el LED con 3.3V (Que es lo que proporciona un pin de la Raspi) y que la intensidad que obtendremos será: 3.3 / 220 Ω = 15 mA.

Esquema de GPIO:

Conectamos GND al pin 6 de la Raspberry y vamos a usar el pin 12 (GPIO 18) como control del encendido mediante una resistencia intermedia. El esquema de conexión es:

Abrir el IDLE de Python 3 para empezar nuestro programa:

Y copiar código:

import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BOARD)
gpio.setup(12, gpio.OUT)

for  x in range ( 0, 10):

    gpio.output(12, True)
    time.sleep(0.5)
    gpio.output(12, False)
    time.sleep(0.5)

print "Ejecución finalizada"

Guardar el fichero con el nombre blink.py en /home/pi y ejecutarlo pulsando F5

Bucle infinito: https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio01-Blink/rpi_led.py

Más información:

Botón

Leer estado de un pulsador:

Código: https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio04-Pulsador/rpi_pushbutton_test.py

Código con detección de flanco: https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio04-Pulsador/rpi_pushbutton_block.py

GPIO.cleanup() – limpia el estado de in out y pull up down para que no se quede.

GPIO.setwarnings(false) – deshabilita warnings

Con eventos https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio04-Pulsador/rpi_pushbutton_detect.py

Multithread mucho más eficiente si uso con más procesamiento: https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio04-Pulsador/rpi_pushbutton_threaded.py

En un hilo de ejecución ejecuto el script que lo pone a dormir y en otro hilo ejecuta la función de callback.

PWM

Cambio de intensidad LED.

Código: https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio05-PWM/rpi_led_pwm.py

Tutoriales GPIO Oficiales

Inicio GPIO: https://projects.raspberrypi.org/en/projects/physical-computing/0

Recetas básicas: https://gpiozero.readthedocs.io/en/stable/recipes.html

Más información

Tutorial Adafruit: https://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi/overview

Remote GPIO

Remote gpio: Se agregó para permitir el acceso remoto a los pines GPIO desde otro Pi en la red, usando el demonio pigpio, ya que esto es posible usando la biblioteca Python GPIO Zero.

Ver con más detalle: http://bennuttall.com/whats-new-gpio-zero-v1-3/ 

GPIO con Node-RED

Otra forma de manejar el GPIO de Raspberry Pi es usando Node-RED con el nodo https://flows.nodered.org/node/node-red-node-pi-gpio que es el módulo que viene instalado por defecto

Aunque hay más nodos para manejar el GPIO:

Más información: https://nodered.org/docs/faq/interacting-with-pi-gpio

Node-Red no viene instalado en Raspberry Pi pero se puede hacer desde add/remove software.

La forma recomendada es desde Menú – Preferencias – Software Recomendado. Si se instala de esta manera, se puede actualizar usando sudo apt-get upgrade.

Luego se puede ejecutar manualmente con el comando “node-red-star” o :

Para iniciar Node-RED en el arranque de Raspberry Pi de forma automática usar:

  • sudo systemctl enable nodered.service

Más información https://nodered.org/docs/hardware/raspberrypi

Para comprobar que funciona abrir en un navegador http://ip-raspberry:1880

pantalla node-red

Documentación del nodo: https://flows.nodered.org/node/node-red-node-pi-gpio

Tutoriales básicos Node-RED:

Getting started con Node-RED: https://projects.raspberrypi.org/en/projects/getting-started-with-node-red

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.