Display 7 segmentos con Python y Raspberry

Python con Raspberry y display 7 segmentos

En este post vamos a ver cómo usar Python, una Raspberry Pi y los puertos GPIO para trabajar con un visualizador de 7 segmentos.

Al final vamos a dibujar los números del 0 al 9 de una manera sencilla.

Display de 7 segmentos: ánodo y cátodo

Es importante recordar que hay 2 tipos de displays, unos son de ánodo común y otros son de cátodo común.

Si es de ánodo común, entonces debes escribir un LOW sobre la entrada que quieres encender. Y en caso de que sea de cátodo común debes escribir un HIGH sobre la entrada.

Además, para ánodo común debes conectar el común a 5 volts, y para cátodo común debes conectar el común a tierra.

Para guiarme siempre me ha servido la siguiente imagen (que no es mía):

Puertos GPIO

Me voy a referir a cada puerto por su número consecutivo, y no por su número GPIO.  En la siguiente imagen puedes ver que el GPIO 25 es el puerto número 22; pues en el código de Python me referiré al consecutivo, que en este caso sería el 22.

Circuito para display de 7 segmentos

Voy a reutilizar el circuito de mi anterior post sobre gpio y display 7 segmentos desde la terminal.

Mis displays son de cátodo común así que el común va conectado a GND. Si, en tu caso, son de ánodo común, entonces el común iría al 5 v.

No olvides que debes usar una resistencia  (de 220 o 47 ohm) por cada letra del display.

Display 7 Segmentos Con Raspberry

Definiendo las letras

Nota: te recomiendo ver mi post sobre GPIO y Python.

Como ves en el circuito de arriba cada letra está conectada a determinado pin. He definido un diccionario para facilitar las cosas:

De este modo, si la conexión cambia, las letras no se ven afectadas.

Dibujo de números

Para dibujar los números debemos encender o apagar determinada terminal del visualizador de 7 segmentos.

Yo los he definido como binarios, en donde un 1 es encender y un 0 es apagar. Todos siguen el orden de las letras, es decir, el primer bit es la A, el segundo la B, etcétera.

Los argumentos

Este script de python va a aceptar el número que se desea dibujar como argumento de línea de comandos, para que se pueda invocar con:

python main.py NUMERO

Así que la lectura de argumentos se hace así:

Gracias a que tenemos un diccionario de números podemos usar el número leído desde la terminal para obtener la representación en binario con:

numero = numeros.get(argumentos.numero)

Dibujando valor en display de siete segmentos con Python

Una vez que tenemos la cadena binaria que vamos a dibujar sobre el display recorremos el diccionario de pines y leemos la cadena binaria; si es un 1 entonces encendemos el led (porque mi visualizador es de cátodo común) y si no, lo apagamos.

El código que los dibuja es:

De este modo nos ahorramos escribir código, pues mientras nuestro diccionario esté bien definido todo saldrá a la perfección.

Código completo

Ahora veamos el código que hace que todo esto sea posible:

Para invocarlo pasa un número del 0 al 9 como primer argumento. Por ejemplo, para dibujar el 0 sería:

python siete_segmentos.py 0

Puedes indicar cualquier número y, mientras esté soportado, funcionará.

Bonus: dibujar números del 0 al 0 de manera recursiva

Podemos hacer que se dibujen los números de manera infinita, invocando al script de Python con bash. Esto es opcional, pues el script ya funciona bien, sin embargo, como demostración podemos usar lo siguiente:

Es un simple ciclo for que va del 0 al 9 e invoca al script de Python con ese número; para después dormir 1 segundo.

Al final del script se vuelve a invocar al mismo, así que estará siempre en ejecución hasta que se presione CTRL + C. Yo lo he probado y se ve así:

Display 7 segmentos con Python y Raspberry
Display 7 segmentos con Python y Raspberry

Espero que el lector disculpe el movimiento de la cámara, pero no se me ocurrió tomarlas en opción burst shoot y al momento de escribir esto ya he desarmado el circuito.

Por cierto, la diferencia en el brillo es porque no he usado resistencias del mismo valor.

Si quieres puedes leer más sobre Raspberry o Python en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario