Hướng dẫn dùng màn hình TM1637 4 chữ số 7 đoạn với ESP32
Thứ Năm,
12/03/2026
Admin

Hướng dẫn sử dụng module màn hình LED 7 đoạn 4 chữ số TM1637 với ESP32 và Arduino IDE. Bài viết bao gồm kết nối phần cứng, cài thư viện, các hàm cơ bản và 2 ví dụ thực tế: đồng hồ số và hiển thị nhiệt độ.
1. Giới thiệu module TM1637
Module TM1637 4 chữ số
Sơ đồ chân TM1637
Module TM1637 là màn hình LED 7 đoạn 4 chữ số, giao tiếp qua 2 dây (CLK + DIO) — không cần nhiều chân GPIO như màn hình thông thường. Đặc điểm:
- 4 chữ số, mỗi chữ số gồm 7 đoạn LED
- Dấu hai chấm (:) ở giữa — phù hợp làm đồng hồ
- Giao tiếp 2 dây đơn giản (CLK + DIO)
- Điều chỉnh 8 mức độ sáng
- Điện áp 3.3V–5V, tương thích ESP32
2. Sơ đồ kết nối
Sơ đồ kết nối ESP32 với TM1637
| TM1637 | ESP32 |
|---|---|
| CLK | GPIO 19 |
| DIO | GPIO 18 |
| VCC | 3.3V hoặc 5V |
| GND | GND |
3. Cài thư viện TM1637

Mở Arduino IDE → Sketch → Include Library → Manage Libraries → tìm "TM1637" → cài thư viện của Avishay Orpaz.
4. Các hàm cơ bản
| Hàm | Mô tả |
|---|---|
setBrightness(n) |
Độ sáng 0–7 |
setSegments(data) |
Bật/tắt đoạn LED thủ công (byte) |
showNumberDec(n) |
Hiển thị số thập phân |
showNumberDecEx(n, mask) |
Hiển thị số + điều khiển dấu hai chấm |
showNumberHexEx(n) |
Hiển thị số thập lục phân |
clear() |
Xóa màn hình |
5. Code kiểm tra cơ bản
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
https://RandomNerdTutorials.com/esp32-tm1637-4-digit-7-segment-display-arduino/
*/
#include <Arduino.h>
#include <TM1637Display.h>
#define CLK 19
#define DIO 18
#define TEST_DELAY 2000
const uint8_t SEG_DONE[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
TM1637Display display(CLK, DIO);
void setup() {}
void loop() {
int k;
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
display.setBrightness(0x0f);
display.setSegments(data); // Tất cả đoạn sáng
delay(TEST_DELAY);
display.showNumberDecEx(1230, 0b01000000); // Hiển thị 12:30
delay(TEST_DELAY);
display.showNumberDec(0, false); // ___0
delay(TEST_DELAY);
display.showNumberDec(0, true); // 0000
delay(TEST_DELAY);
display.showNumberDec(301, false); // _301
delay(TEST_DELAY);
display.showNumberDec(-999); // -999
delay(TEST_DELAY);
// Kiểm tra độ sáng
for(k = 0; k < 7; k++) {
display.setBrightness(k);
display.setSegments(data);
delay(TEST_DELAY);
}
display.setSegments(SEG_DONE);
while(1);
}
Kết quả sau khi upload code test
6. Ví dụ thực tế: Đồng hồ số với ESP32
ESP32 lấy thời gian thực qua WiFi và NTP server, hiển thị giờ:phút trên TM1637 với dấu hai chấm nhấp nháy.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
https://RandomNerdTutorials.com/esp32-tm1637-4-digit-7-segment-display-arduino/
*/
#include <WiFi.h>
#include "time.h"
#include <TM1637Display.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
#define CLK 19
#define DIO 18
TM1637Display display(CLK, DIO);
// Timezone Việt Nam (GMT+7)
const char* TZ_INFO = "ICT-7";
void initWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
}
void initTime() {
configTime(0, 0, "pool.ntp.org");
setenv("TZ", TZ_INFO, 1);
tzset();
}
void displayTime() {
static bool colon = false;
colon = !colon;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
int value = timeinfo.tm_hour * 100 + timeinfo.tm_min;
uint8_t colonMask = colon ? 0b01000000 : 0;
display.showNumberDecEx(value, colonMask, true);
}
void setup() {
Serial.begin(115200);
display.setBrightness(7);
display.clear();
initWiFi();
initTime();
}
void loop() {
displayTime();
delay(1000);
}


💡 Ứng dụng module TM1637
- Đồng hồ số hiển thị giờ:phút
- Hiển thị nhiệt độ từ cảm biến hoặc API thời tiết
- Đếm ngược timer
- Hiển thị điểm số, tốc độ, các số liệu cần theo dõi