Raspberry Pi 4

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:

See the gist on github.

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.

See the gist on github.

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í:

See the gist on github.

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:

See the gist on github.

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:

See the gist on github.

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:

See the gist on github.

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

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

3 días hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

4 días hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

4 días hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

5 días hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

2 semanas hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

2 semanas hace

Esta web usa cookies.