Tutorial ESP32 33/55 - Dados digitales utilizando el kit de aprendizaje IoT ESP32 de SunFounder
En este tutorial, crearemos un dado digital utilizando una pantalla de siete segmentos y el ESP32 del kit de aprendizaje IoT de SunFounder. El proyecto te permitirá lanzar un dado virtual, generando números del 1 al 6 al presionar un botón. Esta es una forma fantástica de explorar las capacidades del ESP32 mientras aprendes sobre la interfaz con pantallas y botones. Para mayor claridad, asegúrate de revisar el video (en el video a las 0:00).
Hardware Explicado
Los componentes principales de este proyecto incluyen el microcontrolador ESP32, un registro de desplazamiento 74HC595, una pantalla de siete segmentos y un botón pulsador. El ESP32 es un microcontrolador potente que integra Wi-Fi y Bluetooth, lo que lo hace adecuado para aplicaciones de IoT. El registro de desplazamiento 74HC595 nos permite controlar la pantalla de siete segmentos utilizando menos pines que conectando directamente cada segmento.
El display de siete segmentos muestra números y se controla enviando datos desde el registro de desplazamiento. El botón pulsador se utiliza para activar la tirada de dados, generando un número aleatorio que se mostrará. Cuando se presiona, el botón se conecta al pin 13 en el ESP32, que tiene una resistencia pull-up interna para mantenerlo en un estado alto cuando no está presionado.
Detalles de la hoja de datos
| Fabricante | Texas Instruments |
|---|---|
| Número de pieza | 74HC595 |
| Voltaje de lógica/entrada y salida | 2 V a 6 V |
| Tensión de alimentación | 4.5 V a 5.5 V |
| Corriente de salida (por canal) | 6 mA máx |
| Corriente de pico (por canal) | 35 mA máx |
| Orientación sobre la frecuencia PWM | No aplicable |
| Umbrales de lógica de entrada | VIH≥ 2 V, VIL≤ 0.8 V |
| Caída de tensión / RDS(on)saturación | 0.5 V máx |
| Límites térmicos | 150 °C |
| Paquete | DIP-16 |
| Notas / variantes | Comúnmente utilizado en pantallas digitales |
- Asegúrese de los niveles de voltaje adecuados (4.5 V a 5.5 V) para un funcionamiento confiable.
- Limite la corriente de salida para evitar dañar el registro de desplazamiento.
- Utiliza capacitores de desacoplamiento cerca de los pines de alimentación para estabilizar el voltaje.
- Conecta correctamente el display de siete segmentos para evitar la mala representación de los números.
- Verifique el cableado en busca de conexiones sueltas que puedan provocar un comportamiento inesperado.
Instrucciones de cableado

Para cablear los dados digitales, comienza configurando las conexiones de energía. Conecta la tierra (línea azul) en tu placa de pruebas al pin de tierra en el ESP32 y asegúrate de que todos los puntos de tierra estén interconectados. A continuación, conecta un pin de 3.3V del ESP32 a la pista de energía (línea roja) en la placa de pruebas.
Para el registro de desplazamiento 74HC595, asegúrate de que el pin 1 esté conectado al riel de 3.3V y el pin 8 a tierra. Conecta el pin de salida de datos (DS) al pin 25 del ESP32, el pin de reloj de desplazamiento (SHCP) al pin 26, y el pin de reloj de almacenamiento (STCP) al pin 27. El botón de presión debe estar conectado entre el pin 13 del ESP32 y tierra, permitiendo que baje el pin cuando se presiona.
Ejemplos de código y guía paso a paso
En el código, primero definimos los pines utilizados para el registro de desplazamiento y el botón. El pin del botón se define comobuttonPiny está conectado al pin 13 en el ESP32. El array de datosdatArraycontiene las representaciones binarias de los números 0-9 para el display de siete segmentos.
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP
const int DS = 25; //DS
const int buttonPin = 13;
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
En elsetup()función, configuramos el pin del botón en modo de entrada y los pines del registro de desplazamiento en modo de salida. Esto prepara los pines para leer la entrada del botón y para enviar datos a la pantalla.
void setup ()
{
pinMode(buttonPin,INPUT);
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
La lógica principal del programa se encuentra en elloop()función. Verifica si se presiona el botón, genera un número aleatorio y llama a lashow_number()función para mostrar el número en el display de siete segmentos.
void loop()
{
if(digitalRead(buttonPin) == LOW)
{
int diceNumber = random(1, 7);
show_number(diceNumber);
delay(50);
}
}
Elshow_number()la función envía el valor apropiado del array de datos al registro de desplazamiento, que luego controla los segmentos de la pantalla para mostrar el número generado. Esta función es crucial para la retroalimentación visual cuando se presiona el botón.
Demostración / Qué Esperar
Cuando la configuración esté completa y el código esté cargado, presionar el botón generará un número aleatorio entre 1 y 6, que se mostrará en la pantalla de siete segmentos. Si todo está conectado correctamente, la pantalla debería mostrar un número cada vez que se presione el botón. Ten cuidado con las entradas flotantes; asegúrate de que el botón esté correctamente conectado a tierra para evitar un comportamiento errático (en el video a las 1:30).
Marcas de tiempo del video
- 00:00 Comienzo
- 1:48 Introducción al proyecto
- 3:40 Explicación del cableado para dados digitales
- Código Arduino para dados digitales explicado
- 19:19 Seleccionando la placa ESP32 y el puerto COM en el Arduino IDE
- 21:00 Demostración de Dados Digitales
- 22:15 Corrigiendo el código de Arduino
/*
* // Definir los pines utilizados para el 74hc595 y el botón
*/
const int STcp = 27; // ST_CP
const int SHcp = 26; // SH_CP
const int DS = 25; // DS
const int buttonPin = 13;
// Define un array de valores para mostrar números en una pantalla de 7 segmentos.
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int buttonState = false;
void setup ()
{
// Configura el pin del botón en modo de entrada.
pinMode(buttonPin,INPUT);
// Configura los pines a 74hc595
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
// Verifica si el botón está presionado.
if(digitalRead(buttonPin) == LOW)
{
// Genera un número aleatorio entre 1 y 6.
int diceNumber = random(1, 7);
// Muestra el número en la pantalla de 7 segmentos.
show_number(diceNumber);
// Retraso de 50 milisegundos
delay(50);
}
}
// Función para mostrar un número en una pantalla de 7 segmentos.
void show_number(int num)
{
// Conecte ST_CP a tierra y manténgalo bajo mientras esté transmitiendo.
digitalWrite(STcp, LOW);
// Envíe los datos del número al registro de desplazamiento.
shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
// Tira del ST_CP para guardar los datos.
digitalWrite(STcp, HIGH);
}
Common Course Links
Common Course Files
Recursos y referencias
-
DocumentaciónTutorial ESP32 33/55 - Página doc de SunFounder para dados digitalesdocs.sunfounder.com
Archivos📁
No hay archivos disponibles.