ESP8266 - Display de 7 Segmentos e 4 Dígitos com TM1637

Vamos colocar seu ESP8266 para funcionar com um display de 7 segmentos e 4 dígitos TM1637. O ESP8266 é um microcontrolador Wi-Fi compacto e acessível - perfeito para projetos IoT leves que precisam de uma saída numérica simples.

Veja o que vamos abordar:

ESP8266 NodeMCU TM1637 4-Digit 7-Segment Display

Hardware Necessário

1×ESP8266 NodeMCU ESP-12F
1×Alternatively, ESP8266 D1 Mini NodeMCU ESP-12F
1×Alternatively, ESP8266 NodeMCU ESP-12E (Uno-form)
1×Micro USB Cable
1×Alternatively, ESP8266 NodeMCU ESP-12F (SMD-form)
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×Display de 7 segmentos de 4 dígitos TM1637
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para ESP8266

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
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.

Conhecendo o Módulo Display TM1637

O TM1637 é um CI driver dedicado para displays LED de 7 segmentos. Ele se comunica com o microcontrolador por um link serial de 2 fios (CLK e DIO) e cuida de toda a multiplexação dos LEDs internamente. Depois que você envia os dados ao TM1637, o display continua mostrando esses dados até você alterá-los.

O que o módulo oferece:

  • 4 dígitos, cada um com 7 segmentos mais ponto decimal
  • Separador de dois pontos entre o dígito 1 e o 2
  • 8 níveis de brilho, controláveis por software
  • Funciona com 3.3V - perfeito para o nível lógico do ESP8266
  • Não precisa de atualização contínua
Função Pino
CLK Sinal de clock
DIO Dados de E/S
VCC 3.3V ou 5V
GND Terra

Conecte CLK e DIO a quaisquer pinos GPIO disponíveis no ESP8266. Evite GPIO0, GPIO2 e GPIO15, pois eles afetam o modo de boot.

Diagrama de Ligação

Conecte o TM1637 ao ESP8266 NodeMCU:

  • CLK ao D2
  • DIO ao D1
  • VCC ao 3.3V
  • GND ao GND
The wiring diagram between ESP8266 NodeMCU and TM1637 4-Digit 7-Segment Display

This image is created using Fritzing. Click to enlarge image

Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

Adicionando a Biblioteca

  1. Conecte o ESP8266 ao seu computador com um cabo USB.
  2. Abra a Arduino IDE. Selecione NodeMCU 1.0 (ESP-12E Module) como placa e escolha a porta correta.
  3. Vá até a seção Libraries à esquerda.
  4. Procure por "DIYables_4Digit7Segment_TM1637" e encontre a biblioteca da DIYables.
  5. Toque em Install.
ESP8266 NodeMCU TM1637 4-Digit 7-Segment Display library

A biblioteca já vem com tudo o que precisa - sem dependências extras.

Código de Início Rápido

O sketch mais curto para ver resultados:

#include <DIYables_4Digit7Segment_TM1637.h> #define CLK_PIN D2 #define DIO_PIN D1 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { display.begin(); display.print(1234); } void loop() { }

Crie o display com os números dos GPIO para CLK e DIO, chame begin() e comece a exibir dados imediatamente.

Experimente - Exibição de Inteiros

Exibe uma série de inteiros, incluindo números negativos e valores preenchidos com zeros.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - Integer Example * * Displays various integer values on a 4-digit 7-segment display * with TM1637 driver, including zero-padded numbers. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN D2 #define DIO_PIN D1 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); }

Execute o Código

  • Ligue o módulo TM1637 ao ESP8266 como descrito acima.
  • Conecte o ESP8266 ao seu computador via USB.
  • Na Arduino IDE, escolha a placa e a porta, cole o código e pressione Upload.
  • Abra o Serial Monitor para conferir a saída.

O display percorre 0, 42, 1234, -5, -123, 9999 e depois "0042" preenchido com zeros.

Métodos Úteis

Método Finalidade Como Chamar
print(int) Mostrar um inteiro display.print(1234)
print(int, true) Mostrar com zeros à esquerda display.print(42, true)
clear() Limpar o display display.clear()

Experimente - Texto e Temperatura

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

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - TextAndDegree Example * * Displays text strings, special characters, and temperature * on a 4-digit 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN D2 #define DIO_PIN D1 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); }

Execute o Código

  • Ligue e faça o upload. Abra o Serial Monitor.

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

Métodos Úteis

Método Finalidade Como Chamar
print(const char*) Exibir texto display.print("HELP")
printTemperature(int, char) Mostrar temperatura display.printTemperature(25, 'C')
DEGREE Caractere de grau display.DEGREE

Experimente - Hora com Dois Pontos

Mostra a hora no formato HH:MM com os dois pontos piscando a cada 500ms.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - Time Example * * Displays time in HH:MM format with blinking colon separator * on a 4-digit 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN D2 #define DIO_PIN D1 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; }

Execute o Código

  • Faça o upload e veja "12:30" com os dois pontos piscando.

Métodos Úteis

Método Finalidade Como Chamar
printTime(int, int) Exibir HHMM display.printTime(12, 30)
printTime(int, int, bool) Controlar os dois pontos display.printTime(12, 30, false)

Experimente - Efeito de Piscar

Faz o display piscar usando off() e on(), preservando o conteúdo.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - Blink Example * * Blinks integer and text on a 4-digit 7-segment display * using off() and on() to toggle the display. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN D2 #define DIO_PIN D1 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); }

Execute o Código

  • Faça o upload e observe "1234" piscando, depois "HELP" piscando.

Métodos Úteis

Método Finalidade Como Chamar
off() Desligar o display display.off()
on() Ligar o display display.on()
setBrightness(int) Definir o brilho 0-7 display.setBrightness(4)

Experimente - Dígitos Individuais

Define cada dígito de forma independente com números, caracteres e os dois pontos.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - IndividualDigits Example * * Sets individual digits, characters, and colon on a 4-digit * 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN D2 #define DIO_PIN D1 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); }

Execute o Código

  • Faça o upload e veja as combinações de dígitos mudarem.

Métodos Úteis

Método Finalidade Como Chamar
setNumber(int, int) Definir o dígito 0-9 display.setNumber(0, 1)
setChar(int, char) Definir o caractere display.setChar(0, 'H')
setColon(bool) Controlar os dois pontos display.setColon(true)
setSegments(int, uint8_t) Segmentos brutos display.setSegments(0, 0x76)

Se Algo Não Estiver Funcionando

  • Display em branco: Verifique novamente os quatro fios. Confirme que os números dos GPIO de CLK e DIO coincidem entre o código e a ligação física.
  • Saída errada: CLK e DIO podem estar trocados. Troque os dois fios de sinal.
  • Display fraco: Chame setBrightness(7) para o brilho máximo.
  • Falha no upload: Algumas placas ESP8266 exigem que você pressione FLASH durante o upload. Verifique também se a placa e a porta corretas estão selecionadas.

Dica: O ESP8266 tem poucos pinos GPIO. Confira se nenhum dos pinos que você está usando entra em conflito com os modos de boot (GPIO0, GPIO2, GPIO15).

Suporte de Plataformas

A biblioteca usa apenas APIs padrão do Arduino e funciona em todas as plataformas compatíveis com Arduino, incluindo o ESP8266.

※ 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!