ESP8266 Màn hình 7 đoạn 4 chữ số TM1637

Bài hướng dẫn này hướng dẫn bạn cách sử dụng ESP8266 với màn hình 7 đoạn 4 chữ số, mô-đun TM1637. Cụ thể, chúng ta sẽ tìm hiểu:

màn hình 7 đoạn 4 chữ số tm1637 ESP8266 NodeMCU

Trong bài hướng dẫn này, chúng ta sẽ sử dụng một module màn hình 7 đoạn 4 chữ số có dấu hai chấm phân cách. Nếu bạn muốn hiển thị số thực (float), hãy tham khảo bài hướng dẫn ESP8266 - 74HC595 Màn hình 7 đoạn 4 chữ số.

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×TM1637 4-digit 7-segment Display
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về màn hình 7 đoạn 4 chữ số TM1637

Màn hình 7 đoạn gồm 4 chữ số được sử dụng phổ biến cho đồng hồ, bộ hẹn giờ và bộ đếm, hiển thị nhiệt độ... Tuy nhiên nó thường yêu cầu 12 kết nối. Mô-đun TM1637 đơn giản hóa việc này bằng cách chỉ cần 4 kết nối: 2 cho nguồn và 2 để điều khiển các đoạn.

Một mô-đun TM1637 thường gồm bốn đèn LED 7 đoạn và một trong các tùy chọn sau:

  • Một đèn LED hình hai chấm ở giữa: Nó lý tưởng để hiển thị thời gian ở định dạng giờ và phút, hoặc phút và giây, hoặc điểm số của hai đội.
  • Bốn đèn LED hình dấu chấm cho mỗi chữ số: Nó lý tưởng để hiển thị nhiệt độ hoặc bất kỳ giá trị thập phân nào.

Sơ đồ chân cho màn hình 7 đoạn 4 chữ số TM1637

Mô-đun hiển thị 7 đoạn 4 chữ số TM1637 có bốn chân:

  • Chân CLK: là một chân đầu vào đồng hồ (clock), nên được kết nối với bất kỳ chân số nào trên ESP8266.
  • Chân DIO: là một chân Data I/O (dữ liệu vào/ra), nên được kết nối với bất kỳ chân số nào trên ESP8266.
  • Chân VCC: được dùng để cấp nguồn cho module và nên được kết nối với nguồn cấp 3.3V–5V.
  • Chân GND: là chân đất, nên được nối với đất (Ground) của ESP8266.
sơ đồ chân của module tm1637

Sơ đồ đấu dây

Để kết nối TM1637 với ESP8266, cần bốn dây: hai dây cấp nguồn và hai dây điều khiển màn hình. Mô-đun có thể được cấp nguồn từ nguồn 5V của ESP8266. Các chân CLK và DIO nên được kết nối với bất kỳ chân số nào trên Arduino; ví dụ, các chân 2 và 3. Nếu sử dụng các chân khác, các số chân trong mã phải được chỉnh sửa.

sơ đồ nối dây cho mô-đun ESP8266 NodeMCU tm1637

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

Cài đặt thư viện

Để lập trình dễ dàng cho màn hình 7 đoạn 4 chữ số TM1637, chúng ta cần cài đặt thư viện TM1637Display do Avishay Orpaz phát triển. Hãy làm theo các bước dưới đây để cài đặt thư viện:

  • Nhấn vào biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “TM1637”, sau đó tìm thư viện TM1637Display của Avishay Orpaz
  • Nhấn nút Cài đặt.
thư viện hiển thị 7 đoạn 4 chữ số tm1637 cho Arduino

Cách Lập Trình Cho TM1637 4 Chữ Số 7-Segment Bằng ESP8266

  • Bao gồm thư viện
#include <TM1637Display.h>
  • Chỉ định các chân ESP8266 được kết nối với CLK và DIO của mô-đun hiển thị. Ví dụ: D2 và D1.
#define CLK D2 #define DIO D1
  • Tạo một đối tượng TM1637Display.
TM1637Display display = TM1637Display(CLK, DIO);
  • Sau đó bạn có thể hiển thị các số, số có thập phân, số có dấu âm hoặc chữ cái. Trong trường hợp là chữ cái, bạn cần xác định dạng chữ cái. Hãy xem xét từng loại một cách riêng biệt.
  • Hiển thị các số: xem các ví dụ dưới đây, '_' trong mô tả dưới đây tượng trưng cho một chữ số không được hiển thị trong thực tế:
display.showNumberDec(-12); // displayed _-12 display.showNumberDec(-999); // displayed -999 display.showNumberDec(42); // displayed __42 display.showNumberDec(42, false); // displayed __42 display.showNumberDec(42, false, 2, 0); // displayed 42__ => display 2 digit at position 0 display.showNumberDec(42, true); // displayed 0042 => zero padding display.showNumberDec(14, false, 2, 1); // displayed _14_ display.showNumberDec(-5, false, 3, 0); // displayed _-5_ display.showNumberDec(1234); // displayed 1234
  • Hiển thị số với dấu hai chấm hoặc dấu chấm:
// displayed 15:30 in the colon-separated module, or 15.30 in the colon-separated module display.showNumberDecEx(1530, 0b11100000, false, 4, 0);

Bạn có thể tìm thêm thông tin liên quan đến các chức năng ở phần cuối của bài hướng dẫn này.

Mã ESP8266

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-tm1637-4-digit-7-segment-display */ #include <TM1637Display.h> // define the connections pins #define CLK D2 // The ESP8266 pin connected to the CLK pin of TM1637 Display #define DIO D1 // The ESP8266 pin connected to the DIO pin of TM1637 Display // create a display object of type TM1637Display TM1637Display display = TM1637Display(CLK, DIO); // an array that sets individual segments per digit to display the word "dOnE" const uint8_t 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 }; // degree celsius symbol const uint8_t celsius[] = { SEG_A | SEG_B | SEG_F | SEG_G, // Degree symbol SEG_A | SEG_D | SEG_E | SEG_F // C }; void setup() { display.clear(); display.setBrightness(7); // set the brightness to 7 (0:dimmest, 7:brightest) } void loop() { // show counter 0-9 int i; for (i = 0; i < 10; i++) { display.showNumberDec(i); delay(500); display.clear(); } display.showNumberDec(-91); // displayed _-91 delay(2000); display.clear(); display.showNumberDec(-109); // displayed -109 delay(2000); display.clear(); display.showNumberDec(21, false); // displayed __21 delay(2000); display.clear(); display.showNumberDec(21, true); // displayed 0021 delay(2000); display.clear(); display.showNumberDec(28, false, 2, 1); // displayed _28_ delay(2000); display.clear(); display.showNumberDec(-9, false, 3, 0); // displayed _-9_ delay(2000); display.clear(); // displayed 15:30 display.showNumberDecEx(1530, 0b11100000, false, 4, 0); delay(2000); display.clear(); // displayed 23°C int temperature = 23; // or read from temperature sensor display.showNumberDec(temperature, false, 2, 0); display.setSegments(celsius, 2, 2); delay(2000); display.clear(); // displayed letters: dOnE display.setSegments(done); delay(2000); display.clear(); }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem ESP8266 - Cài đặt phần mềm nếu đây là lần đầu bạn sử dụng ESP8266.
  • Nối các thành phần như được thể hiện trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp, chẳng hạn như NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.
  • Sao chép mã và mở nó bằng Arduino IDE.
  • Nhấn nút Tải lên để tải mã lên ESP8266.
  • Kiểm tra trạng thái của màn hình 7 đoạn.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Tài liệu tham khảo về hàm

Dưới đây là các tham khảo cho:

  • Display.clear() → Xóa màn hình
  • Display.showNumberDec() → Hiển thị số thập phân
  • Display.showNumberDecEx() → Hiển thị số thập phân mở rộng
  • Display.setSegments() → Thiết lập các đoạn hiển thị
  • Display.setBrightness() → Thiết lập độ sáng

display.clear()

Mô tả

Chức năng này xóa màn hình. Nó tắt tất cả các đèn LED.

Hiển thị số thập phân

Mô tả

Màn hình 7 đoạn được sử dụng để hiển thị một số thập phân. Chức năng này được sử dụng cho mục đích đó.

Cú pháp

void showNumberDec(int num, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0);

Tham số

  • num: là giá trị hiển thị trên màn hình 7-segment, có phạm vi từ -9999 đến 9999.
  • leading_zero: tham số tùy chọn với giá trị mặc định là false, xác định xem có hiển thị các chữ số 0 ở đầu hay không.
  • length: tham số tùy chọn khác với giá trị mặc định là 4, thiết lập số chữ số được hiển thị.
  • pos: cũng là tham số tùy chọn với giá trị mặc định là 0, xác định vị trí của chữ số có giá trị lớn nhất.

Xin lưu ý rằng hàm sẽ không hiển thị gì nếu số nằm ngoài phạm vi hoặc nếu giá trị độ dài lớn hơn 4.

showNumberDecEx()

Mô tả

Chức năng này là một bản nâng cấp của showNumberDec(), cung cấp nhiều sự kiểm soát hơn đối với việc hiển thị một số thập phân trên màn hình 7 đoạn. Nó có khả năng điều khiển riêng từng điểm hoặc dấu hai chấm của mỗi chữ số.

Cú pháp

void showNumberDecEx(int num, uint8_t dots, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0);

Tham số

  • num1: Đây là số cần hiển thị trên màn hình 7-segment. Nó nên nằm trong phạm vi từ -9999 đến 9999.
  • dots: Tham số này được dùng để xác định những phần nào của màn hình nên được bật thành các dấu chấm. Mỗi bit của giá trị tương ứng với một chữ số trên màn hình. Các giá trị có thể là:
    • 0b10000000 để hiển thị dấu chấm đầu tiên (0.000)
    • 0b01000000 để hiển thị dấu chấm thứ hai (00.00), hoặc dấu hai chấm (00:00). Tùy thuộc vào loại module.
    • 0b00100000 để hiển thị dấu chấm thứ ba (000.0)
  • leading_zero: Đây là một tham số tùy chọn với giá trị mặc định là false. Nếu được đặt thành true, các số 0 ở đầu sẽ được hiển thị.
  • length: Đây là một tham số tùy chọn với giá trị mặc định là 4. Nó xác định số chữ số được hiển thị trên màn hình 7-segment.
  • pos: Đây là một tham số tùy chọn với giá trị mặc định là 0. Nó đặt vị trí của chữ số có chữ số lớn nhất của số.

Ví dụ, nếu bạn sử dụng display.showNumberDecEx(1530, 0b01000000), nó sẽ hiển thị:

  • Hiển thị số 15:30 trên màn hình 7 đoạn nếu mô-đun có LED hình dấu hai chấm.
  • Hiển thị số 15.30 trên màn hình 7 đoạn nếu mô-đun có LED hình chấm.

Xin lưu ý rằng hàm sẽ không hiển thị gì nếu số nằm ngoài phạm vi hoặc nếu giá trị của độ dài vượt quá 4.

Thiết lập các phân đoạn()

Mô tả

Chức năng cho phép người dùng thiết lập trực tiếp các đoạn của màn hình 7 đoạn. Nó có thể được dùng để hiển thị chữ cái, ký tự đặc biệt, hoặc để tắt tất cả các đoạn LED.

Cú pháp

void setSegments(const uint8_t segments[], uint8_t length = 4, uint8_t pos = 0);

Tham số

  • segments: Tham số này thiết lập các phân đoạn của màn hình hiển thị 7 phân đoạn, là một mảng các byte. Mỗi byte đại diện cho các phân đoạn của từng chữ số và mỗi phân đoạn được đại diện bởi một bit trong byte.
  • length: Đây là một tham số tùy chọn với giá trị mặc định là 4. Nó xác định số chữ số được hiển thị trên màn hình 7 phân đoạn.
  • pos: Đây là một tham số tùy chọn với giá trị mặc định là 0. Nó xác định vị trí của chữ số có giá trị cao nhất của số.

Chức năng này hữu ích khi bạn cần hiển thị các ký tự hoặc ký hiệu không có sẵn trên màn hình 7 đoạn tiêu chuẩn. Bạn có thể tạo bất kỳ mẫu nào bạn muốn bằng cách thiết lập trực tiếp các đoạn.

Xin lưu ý rằng chức năng sẽ không hiển thị gì nếu số đó nằm ngoài phạm vi hoặc giá trị của độ dài lớn hơn 4.

Thiết lập độ sáng()

Mô tả

Độ sáng của màn hình 7 đoạn có thể được điều chỉnh bằng hàm này.

Cú pháp

void setBrightness(uint8_t brightness, bool on = true);

Tham số

  • brightness: Tham số này điều chỉnh độ sáng của màn hình 7 đoạn. Giá trị nên nằm trong khoảng từ 0 đến 7, với số lớn hơn sẽ làm màn hình sáng hơn.
  • on: Đây là một tham số tùy chọn, với giá trị mặc định là true. Nó được dùng để bật hoặc tắt màn hình. Nếu được đặt thành false, màn hình sẽ bị vô hiệu hóa.