GPIO Zero: simplifica el control de prototipos desde Python

El pasado mes de noviembre tuve la oportunidad de grabar un podcast en directo con Diógenes Digital, en el que hablamos largo y tendido de Arduino, Raspberry Pi y niños aprendiendo robótica y programación. En aquel programa discutíamos las diferencias, los usos y enfoques de estas dos plataformas, y una de las cuestiones que comentaba era el control de motores, prototipos y dispositivos comunes a través de los pines GPIO de la Raspberry Pi.

La librería estándar a través de la cual venimos controlando nuestros prototipos desde Raspbian, RPi.GPIO, exige al programador pensar en términos de pines y de tensiones:

  • Configurar un determinado pin como entrada o como salida
  • Poner tal o cual pin a nivel alto (3,3 V) o a nivel bajo (0 V)

Es decir, ofrece una solución de muy bajo nivel en el sentido de que obliga a pensar en esos términos (pines GPIO), en lugar de los componentes que queríamos controlar (LED, pulsador, motor,…). Por lo tanto, la distancia que hay entre manejar los voltajes de los pines que usas en tus proyectos y el efecto final (que un LED se encienda, que un motor haga girar un brazo 90 grados,…) la debes asumir tú y resolver por tus propios medios. Al empezar con estas cosas, cuanto más trabajemos con pines y voltajes en lugar de con motores y componentes, más esfuerzo debemos hacer al diseñar nuestros programas y por lo tanto más riesgo de frustrarnos corremos en nuestro aprendizaje.

En este artículo os voy a introducir una alternativa a RPi.GPIO, aparecida el pasado mes de noviembre, y que os facilitará el trabajo con prototipos: GPIO Zero (inglés). Con ella, podrás enseñar a quien tengas a tu alrededor los fundamentos básicos de la programación relacionada con objetos del mundo real de una forma más amigable que hablándole de pines y tensiones.

GPIO Zero es una librería escrita para Python por Ben Nutall, de la fundación Raspberry Pi, partiendo RPi.GPIO, de Ben Cronston, y con ayuda de Dave Jones (el autor de la librería de la cámara de la Raspberry Pi) y otros. La versión estable es del mes de noviembre de 2015, y trata de proporcionar objetos de Python que modelen el comportamiento de los componentes que usamos en nuestros prototipos, atendiendo a sus montajes más comunes. Por ejemplo, si queremos usar un LED en el pin GPIO número 12, en lugar de configurar el pin como salida primero y después enviarle un nivel alto a dicho pin:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(false)
GPIO.setup(12, GPIO.OUT)

GPIO.output(12, GPIO.HIGH)

Lo que haremos será importar un LED de la librería, declarar que está conectado al pin número 12 y encenderlo, en un lenguaje mucho más directo y natural (aunque en inglés):

from gpiozero import LED

led = LED(12)
led.on()

Esto reduce muchísimo tanto el riesgo de configurar erróneamente un pin, como el código previo de configuración, y además usa características que mejoran el uso del procesador por parte de nuestros programas, como ya veremos más adelante.

Pero, sobre todo y como comenta Ben Nutall en RaspberryPi.org, la librería está escrita con la educación en mente. Un niño aprenderá lo mismo con los dos programas de arriba, pero con el segundo lo hará de una forma mucho más rápida, amigable y progresiva; y si tras aprender conceptos de programación automatizando tareas con LED usando esa semántica tan sencilla, decide ir a un nivel de detalle mucho más bajo y pensar en pines y tensiones para crear sus propios prototipos, podrá hacerlo usando RPi.GPIO.

Además de LED, GPIO Zero proporciona modelos de muchos otros dispositivos:

  • LED, LED multicolor RGB
  • Timbre, o buzzer
  • Motor
  • Pulsador
  • Sensor de movimiento
  • Sensor de luminosidad
  • Conversores analógico a digital MCP3004 y MCP3008

Obtener GPIO Zero

GPIO Zero será un recurso que usaremos mucho en nuestros prototipos a partir de ahora, y está disponible por defecto en las últimas imágenes de Raspbian, la distribución de Linux proporcionada por la fundación Raspberry Pi. Si la tuya no la tiene porque la has instalado antes de noviembre de 2015, puedes obtenerla escribiendo esto en el terminal:

sudo apt-get update
sudo apt-get install python3-gpiozero python-gpiozero

La documentación completa, en inglés, se encuentra en esta web: http://pythonhosted.org/gpiozero/

¿Te animas a probarlo?

Una idea que dejo aquí por si queréis probarlo ya, y no podéis esperar, es que tratéis de reescribir todos los experimentos que hayáis hecho con PItando usando GPIO Zero en lugar de RPI.GPIO como hasta ahora. Iré publicando esas nuevas versiones, así que estad atentos.


Puedes dejarme cualquier comentario en esta misma entrada, o enviándome cualquier comentario a tavés del formulario de contacto, o bien a través de la dirección de correo que allí encontrarás.

4 comentarios en “GPIO Zero: simplifica el control de prototipos desde Python

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *