Arduino Nano ESP32 - Display de 7 Segmentos e 4 Dígitos com 74HC595
Bem-vindo a este workshop prático em que conectamos um módulo de display de 7 segmentos e 4 dígitos com 74HC595 a um Arduino Nano ESP32. O Nano ESP32 é construído em torno do chip ESP32-S3, que oferece Wi-Fi, Bluetooth Low Energy e processamento dual-core - tudo isso no já conhecido formato Nano com conector USB-C.
Neste workshop você vai:
Ligar o módulo de display 74HC595 ao Arduino Nano ESP32.
Mostrar inteiros, floats e texto no display.
Exibir leituras de temperatura com o símbolo de grau.
Apresentar a hora no formato HH.MM com um separador piscante.
Or you can buy the following kits:
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Este módulo compacto combina quatro dígitos de 7 segmentos com um registrador de deslocamento 74HC595. Os dados são deslocados em série por 3 pinos e depois travados nos segmentos de LED. A biblioteca cuida da multiplexação dos dígitos automaticamente - você define um valor com print() e o display continua mostrando esse valor.
| Função | Pino | Descrição |
| SCLK (SH_CP) | Clock Serial | Envia os bits de dados para o registrador |
| RCLK (ST_CP) | Clock do Registrador | Trava 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 |
Nota: O Arduino Nano ESP32 opera em 3.3V. O módulo 74HC595 funciona em 3.3V sem problemas.
Conecte o display ao Nano ESP32:
SCLK ao D7
RCLK ao D6
DIO ao D5
VCC ao 3.3V
GND ao GND

This image is created using Fritzing. Click to enlarge image
Conecte o Arduino Nano ESP32 ao seu computador pela porta USB-C.
Abra o Arduino IDE. Escolha Arduino Nano ESP32 na lista de placas e selecione a porta correta.
Clique no ícone Libraries na barra lateral esquerda.
Digite "DIYables_4Digit7Segment_74HC595" no campo de busca. Encontre a entrada da DIYables.
Clique em Install. Selecione a versão 2.0.0 ou posterior.
Biblioteca independente - nada mais para instalar.
O código mínimo necessário para começar:
#include <DIYables_4Digit7Segment_74HC595.h>
#define SCLK_PIN D7
#define RCLK_PIN D6
#define DIO_PIN D5
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. loop() cuida da multiplexação - chame-a com a maior frequência possível. Use display.delay() em vez de delay() para manter o display ativo durante as esperas.
Mostra inteiros de -999 a 9999, incluindo saída preenchida com zeros.
#include <DIYables_4Digit7Segment_74HC595.h>
#define SCLK_PIN D7
#define RCLK_PIN D6
#define DIO_PIN D5
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();
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);
Serial.println("Displaying: 0042 (zero-padded)");
showZeroPad = false;
}
}
}
Ligue o display ao Nano ESP32 como descrito acima.
Conecte o Nano ESP32 ao seu computador via USB-C.
No Arduino IDE, escolha a placa e a porta, cole o código e clique em Upload.
Abra o Serial Monitor para observar os resultados.
O display percorre 0, 42, 1234, -5, -123, 9999 e depois 0042 (preenchido com zeros).
| Método | Ação | Sintaxe |
| print(int) | Mostra um inteiro | display.print(1234) |
| print(int, true) | Inteiro com preenchimento de zeros | display.print(42, true) |
| loop() | Atualiza o display | display.loop() |
Números de ponto flutuante com casas decimais automáticas e fixas.
#include <DIYables_4Digit7Segment_74HC595.h>
#define SCLK_PIN D7
#define RCLK_PIN D6
#define DIO_PIN D5
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() {
display.print(1.5);
Serial.println("Auto decimal: 1.5");
display.delay(2000);
display.print(12.34);
Serial.println("Auto decimal: 12.34");
display.delay(2000);
display.print(3.141);
Serial.println("Auto decimal: 3.141");
display.delay(2000);
display.print(-1.2);
Serial.println("Auto decimal: -1.20");
display.delay(2000);
display.print(0.5);
Serial.println("Auto decimal: 0.5");
display.delay(2000);
display.print(23.5, 1);
Serial.println("1 decimal place: 23.5");
display.delay(2000);
display.print(1.5, 2);
Serial.println("2 decimal places: 1.50");
display.delay(2000);
display.print(1.5, 2, true);
Serial.println("2 decimal places, zero-padded: 01.50");
display.delay(2000);
}
Mostra floats com decimais automáticos, depois com 1 e 2 casas decimais fixas, e preenchidos com zeros.
Textos, símbolo de grau e exibição de temperatura.
#include <DIYables_4Digit7Segment_74HC595.h>
#define SCLK_PIN D7
#define RCLK_PIN D6
#define DIO_PIN D5
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();
if (millis() - lastChange >= 2000) {
lastChange = millis();
if (phase == 0) {
display.print(texts[currentIndex]);
Serial.print("Text: ");
Serial.println(texts[currentIndex]);
currentIndex++;
if (currentIndex >= textCount) {
currentIndex = 0;
phase = 1;
}
} else if (phase == 1) {
display.printTemperature(25, 'C');
Serial.println("Temperature: 25 C");
phase = 2;
} else if (phase == 2) {
display.printTemperature(72, 'F');
Serial.println("Temperature: 72 F");
phase = 3;
} else if (phase == 3) {
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.print("1.2.3.4");
Serial.println("Dots: 1.2.3.4");
phase = 0;
}
}
}
Mostra "HELP", "Hi", "COOL", "done", temperaturas e pontos embutidos.
HH.MM no estilo de relógio com ponto piscante.
#include <DIYables_4Digit7Segment_74HC595.h>
#define SCLK_PIN D7
#define RCLK_PIN D6
#define DIO_PIN D5
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();
if (millis() - lastToggle >= 500) {
lastToggle = millis();
display.printTime(hours, minutes, colonOn);
colonOn = !colonOn;
}
}
Exibe 12.30 com o ponto piscando a cada 500ms.
Pisca o conteúdo do display, ligando e desligando.
#include <DIYables_4Digit7Segment_74HC595.h>
#define SCLK_PIN D7
#define RCLK_PIN D6
#define DIO_PIN D5
DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN);
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();
unsigned long now = millis();
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;
}
}
}
}
}
Pisca 1234, depois 12.34 e depois "HELP" - cinco vezes cada.
| Problema | Causa Possível | Solução |
| Display em branco | Problema na ligação | Verifique as conexões de VCC, GND e dos pinos de dados |
| Caracteres errados | Incompatibilidade de ânodo/cátodo | Passe false ao construtor para cátodo comum |
| Cintilando | delay() bloqueando o loop() | Use display.delay() no lugar |
| Falha no upload | Placa no modo errado | Mantenha o botão BOOT pressionado enquanto pressiona o RESET e tente o upload novamente |
A biblioteca é construída inteiramente sobre as APIs padrão do Arduino e suporta todas as plataformas compatíveis com Arduino (architectures=*).
※ 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!