Ejercicio No. 3 – Control de LED con interfaz gráfica (Tkinter)

En los ejercicios anteriores aprendimos a controlar hardware desde Python utilizando los pines GPIO de la Raspberry Pi. Primero encendimos un LED y posteriormente construimos un sistema de semáforo basado en estados.

En este tercer ejercicio introducimos un concepto muy importante en muchos sistemas embebidos modernos:

la interacción entre hardware físico y una interfaz gráfica de usuario.

Muchos dispositivos electrónicos actuales integran algún tipo de interfaz visual que permite monitorear o controlar el sistema. Algunos ejemplos incluyen:

  • paneles de control industriales
  • interfaces de monitoreo IoT
  • software de diagnóstico de hardware
  • sistemas de supervisión en robótica

En este ejercicio construiremos una interfaz gráfica simple utilizando Tkinter, que permitirá visualizar el estado de un LED físico conectado a la Raspberry Pi.

El sistema controlará simultáneamente:

  • un LED real conectado al GPIO
  • un LED virtual representado en una ventana gráfica

De esta manera el usuario puede observar en pantalla el estado del hardware en tiempo real.


Objetivo del ejercicio

El objetivo de este programa es sincronizar el control de hardware GPIO con una interfaz gráfica desarrollada en Python.

Durante este ejercicio aprenderemos:

  1. Cómo crear una interfaz gráfica simple con Tkinter.
  2. Cómo representar elementos visuales mediante el objeto Canvas.
  3. Cómo sincronizar el estado de un dispositivo físico con una representación gráfica.
  4. Cómo programar tareas periódicas utilizando el método after().

Este tipo de arquitectura es muy utilizada en aplicaciones de:

  • monitoreo de sensores
  • control industrial
  • interfaces de laboratorio
  • sistemas de adquisición de datos

Funcionamiento del sistema

El sistema controla un LED conectado al GPIO17 y al mismo tiempo muestra un LED virtual dentro de una ventana gráfica.

El comportamiento es el siguiente:

Estado del LED físicoLED virtual
Encendidocírculo rojo
Apagadocírculo gris

El programa alterna automáticamente el estado del LED cada segundo, actualizando simultáneamente el hardware y la interfaz gráfica.

Esto crea una sincronización directa entre el sistema embebido y su representación visual.


Arquitectura del programa

El código está dividido en varias secciones que separan claramente las responsabilidades del sistema.


1. Importación de librerías

El programa utiliza dos librerías principales.

RPi.GPIO

Permite controlar los pines GPIO de la Raspberry Pi.

Tkinter

Es la librería estándar de Python para crear interfaces gráficas.

Tkinter permite construir ventanas, botones, gráficos y otros elementos visuales sin necesidad de instalar software adicional.


2. Configuración del hardware GPIO

El sistema utiliza el pin:

GPIO17

Este pin se configura como salida digital, ya que será utilizado para controlar el LED físico.


3. Variables del sistema

El programa utiliza una variable llamada:

estado_led

Esta variable almacena el estado actual del LED:

  • True → LED encendido
  • False → LED apagado

Esto permite sincronizar el hardware con la interfaz gráfica.


4. Creación del LED virtual

La interfaz gráfica utiliza un Canvas, que es un espacio de dibujo dentro de la ventana.

En este Canvas se crea un círculo, que representará el LED virtual.

Cuando el LED está apagado el círculo se muestra en color:

gris

Cuando el LED está encendido cambia a color:

rojo

Este tipo de representación visual es muy común en interfaces de monitoreo de sistemas electrónicos.


5. Sincronización entre hardware y GUI

La función principal del sistema es:

actualizar_led()

Esta función realiza tres tareas:

  1. Cambia el estado lógico del LED físico.
  2. Actualiza el color del LED virtual.
  3. Programa la siguiente ejecución de la función.

Para esto se utiliza el método:

after()

Este método es fundamental en aplicaciones gráficas porque permite ejecutar tareas periódicas sin bloquear la interfaz.


6. Bucle principal de la aplicación

Las aplicaciones gráficas utilizan un mecanismo llamado event loop.

En Tkinter este bucle se inicia con:

mainloop()

Este bucle mantiene la ventana activa y permite procesar eventos como:

  • actualizaciones gráficas
  • interacción del usuario
  • temporizadores

Diagrama conceptual del sistema

El hardware necesario es el mismo del primer ejercicio.

Componentes

  • Raspberry Pi
  • LED
  • resistencia de 220 Ω o 330 Ω
  • protoboard
  • cables jumper

Conexión

GPIO17 ── Resistencia ── LED ── GND

La diferencia en este ejercicio es que el estado del LED también se refleja en la interfaz gráfica del sistema.


Repositorio del ejercicio

Puedes encontrar el código completo en el repositorio:

Repositorio GitHub

En el repositorio encontrarás:

  • código fuente en Python
  • instrucciones de ejecución
  • diagrama de conexión
  • recursos educativos adicionales

Prompt recomendado para generar el código con IA

Puedes utilizar inteligencia artificial como herramienta de aprendizaje para generar el programa y luego analizar su funcionamiento.

Prompt sugerido:

Actúa como un ingeniero experto en sistemas embebidos con Raspberry Pi.

Escribe un programa en Python para una Raspberry Pi 5 que controle
un LED conectado al GPIO17 y que al mismo tiempo muestre una
interfaz gráfica utilizando Tkinter.

El programa debe:

1. Usar la librería RPi.GPIO.
2. Crear una ventana gráfica con Tkinter.
3. Dibujar un LED virtual usando un Canvas.
4. Cambiar el color del LED virtual a rojo cuando el LED físico esté encendido.
5. Cambiar el color a gris cuando esté apagado.
6. Alternar el estado del LED cada segundo.
7. Utilizar el método after() para actualizar el sistema.
8. Liberar los recursos GPIO al finalizar el programa.

El código debe estar bien comentado para ser utilizado en un curso
educativo de sistemas embebidos.

Lo que aprenderás en el siguiente ejercicio

En el Ejercicio 4 incorporaremos interacción directa del usuario con el hardware.

El sistema incluirá:

  • un botón físico conectado a un GPIO
  • lectura de entradas digitales
  • control del LED mediante eventos externos

Esto permitirá construir sistemas embebidos reactivos, capaces de responder a señales provenientes del mundo físico.

Deja un comentario

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

Scroll al inicio