ESP32 - Display de 7 Segmentos de 4 Dígitos TM1637

Neste projeto, vamos usar um ESP32 para controlar um módulo display de 7 segmentos de 4 dígitos TM1637. 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 numérico.

O que vamos construir:

Display de 7 segmentos de 4 dígitos TM1637 com ESP32

Módulo Display TM1637 em Detalhes

O chip TM1637 cuida da multiplexação e do acionamento de quatro dígitos de 7 segmentos por meio de um protocolo serial simples de 2 fios. Depois que os dados dos dígitos são gravados no TM1637, ele guarda os dados na memória interna e mantém o display aceso sem precisar de nenhum outro comando do microcontrolador.

Recursos do módulo:

  • 4 dígitos com 7 segmentos e pontos decimais
  • Separador de dois-pontos entre o dígito 1 e o dígito 2
  • 8 níveis de brilho
  • Interface de 2 fios (CLK + DIO)
  • Tensão de operação: 3.3V a 5V
Função Pino
CLK Sinal de clock
DIO Entrada/saída de dados
VCC 3.3V ou 5V
GND Terra

O TM1637 funciona com 3.3V, compatível com o nível lógico do ESP32. Nenhum conversor de nível lógico é necessário.

Diagrama de Ligação

Conecte o TM1637 ao ESP32:

  • CLK ao GPIO 21
  • DIO ao GPIO 22
  • VCC ao 3.3V
  • GND ao GND
Diagrama de ligação do ESP32 com o display de 7 segmentos de 4 dígitos TM1637

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_TM1637" e encontre a biblioteca da DIYables.
  5. Clique em Install.
Biblioteca do display de 7 segmentos de 4 dígitos TM1637 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_TM1637.h> #define CLK_PIN 21 #define DIO_PIN 22 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { display.begin(); display.print(1234); } void loop() { }

Passe os números dos pinos GPIO de CLK e DIO para o construtor, chame begin() e você já pode mostrar dados.

Mãos à Obra - Exibição de Números Inteiros

Mostra vários números inteiros, incluindo valores negativos e números preenchidos 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-tm1637-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 21 #define DIO_PIN 22 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Integer Example"); } void loop() { // Display various integers int numbers[] = {0, 42, 1234, -5, -123, 9999}; int count = sizeof(numbers) / sizeof(numbers[0]); for (int i = 0; i < count; i++) { display.print(numbers[i]); Serial.print("Displaying: "); Serial.println(numbers[i]); delay(2000); } // Display with zero padding display.print(42, true); // Shows "0042" Serial.println("Displaying: 0042 (zero-padded)"); delay(2000); }

Carregar e Testar

  • Ligue o módulo TM1637 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 percorre 0, 42, 1234, -5, -123, 9999 e "0042" preenchido com zeros.

Métodos Principais

Método O Que Faz Exemplo
print(int) Mostra um número inteiro display.print(1234)
print(int, true) Mostra com zeros à esquerda display.print(42, true)
clear() Limpa o display display.clear()

Mãos à Obra - Texto e Temperatura

Mostra textos e a temperatura formatada com o símbolo de grau.

/* * 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-tm1637-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 21 #define DIO_PIN 22 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Text and Degree Example"); } void loop() { // Display text strings const char* texts[] = {"HELP", "Hi", "COOL", "done"}; for (int i = 0; i < 4; i++) { display.print(texts[i]); Serial.print("Displaying: "); Serial.println(texts[i]); delay(2000); } // Display temperature with degree symbol display.printTemperature(25, 'C'); // Shows "25°C" Serial.println("Displaying: 25 degrees C"); delay(2000); display.printTemperature(72, 'F'); // Shows "72°F" Serial.println("Displaying: 72 degrees F"); delay(2000); // Display string with degree constant char buf[5]; buf[0] = '2'; buf[1] = '5'; buf[2] = DIYables_4Digit7Segment_TM1637::DEGREE; buf[3] = 'C'; buf[4] = '\0'; display.print(buf); // Same as printTemperature(25, 'C') Serial.println("Displaying: 25 degrees C (via print)"); delay(2000); }

Carregar e Testar

  • Faça a ligação e carregue o sketch. Abra o Serial Monitor.

Mostra "HELP", "Hi", "COOL", "done" e depois "25°C" e "72°F".

Métodos Principais

Método O Que Faz Exemplo
print(const char*) Mostra texto display.print("HELP")
printTemperature(int, char) Mostra a temperatura display.printTemperature(25, 'C')
DEGREE Caractere de grau display.DEGREE

Mãos à Obra - Hora com Dois-Pontos Piscando

Mostra a hora no estilo de relógio, com os dois-pontos alternando a cada meio segundo.

/* * 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-tm1637-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 21 #define DIO_PIN 22 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); int hours = 12; int minutes = 30; bool colonOn = true; void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Time Example"); Serial.println("Displaying 12:30 with blinking colon"); } void loop() { display.printTime(hours, minutes, colonOn); delay(500); // Toggle colon every 500ms for blinking effect colonOn = !colonOn; }

Carregar e Testar

  • Carregue o código e observe "12:30" com os dois-pontos piscando.

Métodos Principais

Método O Que Faz Exemplo
printTime(int, int) Mostra HHMM display.printTime(12, 30)
printTime(int, int, bool) Controla os dois-pontos display.printTime(12, 30, false)

Mãos à Obra - Efeito de Piscar

Liga e desliga o display alternadamente para criar um efeito de piscar.

/* * 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-tm1637-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 21 #define DIO_PIN 22 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Blink Example"); } void loop() { // Blink an integer display.print(1234); Serial.println("Blinking: 1234"); for (int i = 0; i < 5; i++) { display.off(); delay(300); display.on(); delay(300); } delay(1000); // Blink text display.print("HELP"); Serial.println("Blinking: HELP"); for (int i = 0; i < 5; i++) { display.off(); delay(300); display.on(); delay(300); } delay(1000); }

Carregar e Testar

  • Carregue o código. "1234" pisca cinco vezes e depois "HELP" pisca cinco vezes.

Métodos Principais

Método O Que Faz Exemplo
off() Desliga o display, os dados são mantidos display.off()
on() Liga o display novamente display.on()
setBrightness(int) Define o brilho de 0 a 7 display.setBrightness(4)

Mãos à Obra - Controle Individual dos Dígitos

Define cada dígito separadamente com números, caracteres e os dois-pontos.

/* * 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-tm1637-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 21 #define DIO_PIN 22 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Individual Digits Example"); } void loop() { // Set individual numbers on each digit position display.clear(); display.setNumber(0, 1); display.setNumber(1, 2); display.setNumber(2, 3); display.setNumber(3, 4); Serial.println("Displaying: 1234"); delay(2000); // Turn colon on display.setColon(true); Serial.println("Displaying: 12:34"); delay(2000); // Turn colon off display.setColon(false); Serial.println("Displaying: 1234"); delay(2000); // Set individual characters display.clear(); display.setChar(0, 'H'); display.setChar(1, 'E'); display.setChar(2, 'L'); display.setChar(3, 'P'); Serial.println("Displaying: HELP"); delay(2000); // Mix characters and numbers with colon display.clear(); display.setChar(0, 'A'); display.setNumber(1, 3); display.setChar(2, 'b'); display.setNumber(3, 7); display.setColon(true); Serial.println("Displaying: A3:b7"); delay(2000); // Blinking colon effect display.clear(); display.setNumber(0, 1); display.setNumber(1, 2); display.setNumber(2, 3); display.setNumber(3, 0); Serial.println("Blinking colon: 12:30"); for (int i = 0; i < 5; i++) { display.setColon(true); delay(500); display.setColon(false); delay(500); } delay(1000); }

Carregar e Testar

  • Carregue o código e observe as várias combinações de dígitos e caracteres.

Métodos Principais

Método O Que Faz Exemplo
setNumber(int, int) Define um dígito de 0 a 9 display.setNumber(0, 1)
setChar(int, char) Define um caractere display.setChar(0, 'H')
setColon(bool) Controla os dois-pontos display.setColon(true)
setSegments(int, uint8_t) Dados brutos dos segmentos display.setSegments(0, 0x76)

Solução de Problemas

  1. O display continua apagado - Verifique a ligação. Certifique-se de que CLK e DIO estão ligados aos pinos GPIO corretos do ESP32. Verifique se o VCC está conectado ao 3.3V.
  2. Caracteres errados aparecem - CLK e DIO provavelmente estão invertidos. Troque os dois fios.
  3. Muito fraco - Use setBrightness(7) para o brilho máximo.
  4. O upload falha - Segure o botão BOOT do ESP32 durante o upload se a sua placa exigir isso.

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!