ESP32 - Display de 7 Segmentos de 4 Dígitos com 74HC595

Neste projeto, vamos usar um ESP32 para controlar um módulo display de 7 segmentos de 4 dígitos com um registrador de deslocamento 74HC595. O ESP32 oferece Wi-Fi, Bluetooth, dois núcleos e uma boa quantidade de pinos GPIO - o que o torna ideal para projetos de IoT que precisam de um display local.

O que vamos construir:

Display de 7 segmentos de 4 dígitos 74HC595 com ESP32

Display de 7 Segmentos de 4 Dígitos 74HC595 em Detalhes

Este módulo coloca quatro dígitos de 7 segmentos atrás de um registrador de deslocamento 74HC595. Três linhas de dados (SCLK, RCLK, DIO) transportam os sinais de clock serial, de latch e de dados. O registrador de deslocamento converte a entrada serial em saída paralela para os segmentos de LED. A biblioteca faz a multiplexação de cada dígito a cerca de 125 Hz, criando uma exibição estável.

Função Pino Descrição
SCLK (SH_CP) Clock Serial Envia os bits de dados para o registrador a cada pulso de clock
RCLK (ST_CP) Clock do Registrador Trava (latch) os dados deslocados nas saídas
DIO (DS) Entrada de Dados Linha de dados serial
VCC Alimentação 3.3V ou 5V
GND Terra Terra comum

Diagrama de Ligação

Conecte o módulo display ao ESP32:

  • SCLK ao GPIO18
  • RCLK ao GPIO17
  • DIO ao GPIO16
  • VCC ao 3.3V
  • GND ao GND
Diagrama de ligação do ESP32 com o display de 7 segmentos de 4 dígitos 74HC595

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Instalação da Biblioteca

  1. Conecte a placa ESP32 ao seu computador com um cabo USB.
  2. Abra a Arduino IDE e selecione ESP32 Dev Module como placa. Escolha a porta correta.
  3. Clique no ícone Libraries na barra lateral esquerda.
  4. Pesquise "DIYables_4Digit7Segment_74HC595" e encontre a biblioteca da DIYables.
  5. Clique em Install. Selecione a versão 2.0.0 ou mais recente.
Biblioteca do display de 7 segmentos de 4 dígitos 74HC595 para ESP32

Nenhuma dependência extra é necessária - a biblioteca é independente.

Ponto de Partida

Um sketch mínimo para colocar tudo para funcionar:

#include <DIYables_4Digit7Segment_74HC595.h> #define SCLK_PIN 18 #define RCLK_PIN 17 #define DIO_PIN 16 DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); void setup() { display.begin(); display.print(1234); } void loop() { display.loop(); }

begin() configura os pinos GPIO como saídas. loop() controla a multiplexação e deve ser executado com frequência. Defina o conteúdo do display com print(), printTemperature() ou printTime(). Use display.delay() em vez de delay() para manter o display ativo durante as esperas.

Mãos à Obra - Mostrar Números Inteiros

Percorre vários números inteiros e mostra o preenchimento com zeros.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 18 // The ESP32 pin GPIO18 connected to the Serial clock pin of 7-segment display #define RCLK_PIN 17 // The ESP32 pin GPIO17 connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 16 // The ESP32 pin GPIO16 connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); int numbers[] = {0, 42, 1234, -5, -123, 9999}; int numCount = 6; int currentIndex = 0; bool showZeroPad = false; unsigned long lastChange = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Integer Example"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastChange >= 2000) { lastChange = millis(); if (!showZeroPad) { display.print(numbers[currentIndex]); Serial.print("Displaying: "); Serial.println(numbers[currentIndex]); currentIndex++; if (currentIndex >= numCount) { currentIndex = 0; showZeroPad = true; } } else { display.print(42, true); // Shows "0042" Serial.println("Displaying: 0042 (zero-padded)"); showZeroPad = false; } } }

Carregar e Testar

  • Ligue o display ao ESP32 conforme descrito acima.
  • Conecte o ESP32 ao seu computador via USB.
  • Abra a Arduino IDE, selecione a placa e a porta, cole o código e clique em Upload.
  • Abra o Serial Monitor para ver a saída.

O display mostra 0, 42, 1234, -5, -123, 9999 e depois 0042 (preenchido com zeros).

Métodos Principais

Método O Que Faz Exemplo
print(int) Mostra um número inteiro (-999 a 9999) display.print(1234)
print(int, true) Número inteiro com zeros à esquerda display.print(42, true)
loop() Atualiza o display display.loop()

Mãos à Obra - Mostrar Números Decimais

Números de ponto flutuante com casas decimais automáticas e fixas.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 18 // The ESP32 pin GPIO18 connected to the Serial clock pin of 7-segment display #define RCLK_PIN 17 // The ESP32 pin GPIO17 connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 16 // The ESP32 pin GPIO16 connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Float Example"); } void loop() { // Auto decimal placement display.print(1.5); // Shows " 1.5" Serial.println("Auto decimal: 1.5"); display.delay(2000); display.print(12.34); // Shows "12.34" Serial.println("Auto decimal: 12.34"); display.delay(2000); display.print(3.141); // Shows "3.141" Serial.println("Auto decimal: 3.141"); display.delay(2000); display.print(-1.2); // Shows "-1.20" Serial.println("Auto decimal: -1.20"); display.delay(2000); display.print(0.5); // Shows " 0.5" Serial.println("Auto decimal: 0.5"); display.delay(2000); // Fixed decimal places display.print(23.5, 1); // 1 decimal place: shows "23.5" Serial.println("1 decimal place: 23.5"); display.delay(2000); display.print(1.5, 2); // 2 decimal places: shows "1.50" Serial.println("2 decimal places: 1.50"); display.delay(2000); // Zero-padded display.print(1.5, 2, true); // Shows "01.50" Serial.println("2 decimal places, zero-padded: 01.50"); display.delay(2000); }

Carregar e Testar

  • Carregue o código e abra o Serial Monitor.

Mostra números decimais com casas decimais automáticas, depois com 1 e 2 casas decimais fixas, e preenchidos com zeros.

Mãos à Obra - Texto e Temperatura

Textos, símbolo de grau e exibição de temperatura.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 18 // The ESP32 pin GPIO18 connected to the Serial clock pin of 7-segment display #define RCLK_PIN 17 // The ESP32 pin GPIO17 connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 16 // The ESP32 pin GPIO16 connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); const char* texts[] = {"HELP", "Hi", "COOL", "done"}; int textCount = 4; int currentIndex = 0; int phase = 0; unsigned long lastChange = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Text and Degree Example"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastChange >= 2000) { lastChange = millis(); if (phase == 0) { // Display text strings display.print(texts[currentIndex]); Serial.print("Text: "); Serial.println(texts[currentIndex]); currentIndex++; if (currentIndex >= textCount) { currentIndex = 0; phase = 1; } } else if (phase == 1) { // Display temperature 25 degrees C display.printTemperature(25, 'C'); Serial.println("Temperature: 25 C"); phase = 2; } else if (phase == 2) { // Display temperature 72 degrees F display.printTemperature(72, 'F'); Serial.println("Temperature: 72 F"); phase = 3; } else if (phase == 3) { // Display degree symbol using string with DEGREE_CHAR constant char degStr[5]; degStr[0] = '2'; degStr[1] = '5'; degStr[2] = DEGREE_CHAR; degStr[3] = 'C'; degStr[4] = '\0'; display.print(degStr); Serial.println("String with degree: 25 deg C"); phase = 4; } else { // Display string with dots display.print("1.2.3.4"); Serial.println("Dots: 1.2.3.4"); phase = 0; } } }

Carregar e Testar

  • Carregue o código e abra o Serial Monitor.

Mostra "HELP", "Hi", "COOL", "done", temperaturas e pontos no meio do texto.

Mãos à Obra - Exibição de Hora

HH.MM no estilo de relógio com separador piscando.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 18 // The ESP32 pin GPIO18 connected to the Serial clock pin of 7-segment display #define RCLK_PIN 17 // The ESP32 pin GPIO17 connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 16 // The ESP32 pin GPIO16 connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); int hours = 12; int minutes = 30; bool colonOn = true; unsigned long lastToggle = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Time Example"); Serial.println("Displaying 12:30 with blinking dot separator"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastToggle >= 500) { lastToggle = millis(); display.printTime(hours, minutes, colonOn); colonOn = !colonOn; // Toggle dot separator every 500ms for blinking effect } }

Carregar e Testar

  • Carregue o código e abra o Serial Monitor.

Mostra 12.30 com o ponto piscando a cada 500ms.

Mãos à Obra - Piscar

Liga e desliga o display alternadamente.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 18 // The ESP32 pin GPIO18 connected to the Serial clock pin of 7-segment display #define RCLK_PIN 17 // The ESP32 pin GPIO17 connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 16 // The ESP32 pin GPIO16 connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); // States: 0 = blink int, 1 = blink float, 2 = blink text int phase = 0; int blinkCount = 0; bool isOn = true; unsigned long lastAction = 0; unsigned long pauseUntil = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Blink Example"); display.print(1234); Serial.println("Blinking: 1234"); } void loop() { display.loop(); // Must be called frequently to refresh the display unsigned long now = millis(); // Pause between phases if (now < pauseUntil) return; if (now - lastAction >= 300) { lastAction = now; if (isOn) { display.off(); isOn = false; } else { display.on(); isOn = true; blinkCount++; if (blinkCount >= 5) { blinkCount = 0; pauseUntil = now + 1000; phase++; if (phase > 2) phase = 0; switch (phase) { case 0: display.print(1234); Serial.println("Blinking: 1234"); break; case 1: display.print(12.34); Serial.println("Blinking: 12.34"); break; case 2: display.print("HELP"); Serial.println("Blinking: HELP"); break; } } } } }

Carregar e Testar

  • Carregue o código e abra o Serial Monitor.

Pisca 1234, depois 12.34 e depois "HELP" - cinco vezes cada.

Solução de Problemas

  1. Display apagado - Verifique as conexões de VCC, GND e GPIO. Confira se os números dos pinos correspondem ao seu código.
  2. Caracteres errados - O padrão é anodo comum. Use false como 4º argumento para catodo comum.
  3. Cintilação - Evite delay(). Use display.delay() para manter o display sendo atualizado.

Plataformas Suportadas

A biblioteca é construída usando apenas APIs padrão do Arduino e funciona em todas as plataformas compatíveis com Arduino, incluindo o ESP32.

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!