ESP8266 Màn hình LCD

Hướng dẫn này chỉ cho bạn cách sử dụng màn hình LCD với ESP8266, cách lập trình cho ESP8266 để hiển thị văn bản và các ký tự đặc biệt trên LCD.

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×LCD I2C
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ề LCD I2C 16x2

LCD I2C là một lựa chọn tốt hơn cho LCD tiêu chuẩn. Với chỉ 4 chân, nó làm cho việc kết nối với ESP8266 trở nên dễ dàng. Một biến trở tích hợp giúp dễ dàng điều chỉnh độ tương phản của LCD.

Bố trí chân I2C cho LCD

Màn hình LCD I2C sử dụng giao diện I2C để kết nối với ESP8266. Nó có 4 chân:

  • Chân GND: Cần được kết nối với GND (0V).
  • Chân VCC: Đây là nguồn cấp điện cho LCD và nên được kết nối với VCC (5V).
  • Chân SDA: Đây là tín hiệu dữ liệu I2C.
  • Chân SCL: Đây là tín hiệu đồng hồ I2C.
bố trí chân lcd i2c

Tọa độ LCD

Màn hình LCD I2C 16x2 có tổng cộng 16 cột và 2 hàng. Các cột và hàng được đánh số bắt đầu từ 0.

tọa độ ESP8266 NodeMCU lcd i2c

Sơ đồ đấu dây

sơ đồ nối dây lcd i2c cho ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

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

LCD I2C ESP8266
Vin Vin
GND GND
SDA D2 (GPIO4)
SCL D1 (GPIO5)

Cách Lập Trình cho LCD I2C

Thư viện LiquidCrystal_I2C cần được thêm vào để có thể sử dụng màn hình LCD.

  • Cài đặt LCD:

Màn hình LCD phải được cài đặt trước khi có thể được sử dụng.

  • Ghi lên màn hình LCD:

Việc ghi lên LCD được thực hiện một cách đơn giản nhờ thư viện LiquidCrystal_I2C.

#include <LiquidCrystal_I2C.h> // Library for LCD
  • Khai báo một đối tượng của lớp LiquidCrystal_I2C, chỉ định địa chỉ I2C, số cột và số hàng.
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
  • Khởi động màn hình LCD.
lcd.init(); //initialize the lcd lcd.backlight(); //open the backlight
  • Đặt con trỏ tại vị trí mong muốn (chỉ số cột, chỉ số hàng)
lcd.setCursor(column_index, row_index);
  • Hiển thị một thông điệp trên màn hình LCD.
lcd.print("Hello World!");

Khám phá những khả năng có thể đạt được với LCD bằng cách xem phần "Làm được nhiều hơn với LCD".

※ Lưu ý:

Địa chỉ của màn hình LCD có thể khác nhau tùy thuộc vào nhà sản xuất. Trong mã của chúng tôi, chúng tôi đã sử dụng 0x27, được quy định bởi nhà sản xuất DIYables.

Mã nguồn ESP8266

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows void setup() { lcd.init(); // Initialize the LCD I2C display lcd.backlight(); } void loop() { lcd.clear(); // clear display lcd.setCursor(0, 0); // move cursor to (0, 0) lcd.print("Arduino"); // print message at (0, 0) lcd.setCursor(2, 1); // move cursor to (2, 1) lcd.print("GetStarted.com"); // print message at (2, 1) delay(2000); // display the above for two seconds lcd.clear(); // clear display lcd.setCursor(3, 0); // move cursor to (3, 0) lcd.print("DIYables"); // print message at (3, 0) lcd.setCursor(0, 1); // move cursor to (0, 1) lcd.print("www.diyables.io"); // print message at (0, 1) delay(2000); // display the above for two seconds }

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.
  • Kết nối các thành phần như được hiển thị trong sơ đồ.
  • Kết nối board 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 board ESP8266 đúng, chẳng hạn như (ví dụ: NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
  • Nhấp vào biểu tượng Libraries ở thanh bên trái của Arduino IDE.
  • Tìm kiếm "LiquidCrystal I2C" và xác định thư viện LiquidCrystal_I2C do Frank de Brabander tạo.
  • Sau đó, nhấp vào nút Install để thêm thư viện.
thư viện liquidcrystal i2c cho ESP8266 NodeMCU
  • Sao chép mã và mở nó trong Arduino IDE.
  • Nhấp nút Tải lên trong Arduino IDE để biên dịch và tải mã lên ESP8266.
  • Xem kết quả trên LCD.
hiển thị văn bản trên lcd bằng ESP8266 NodeMCU
  • Của các hình ảnh
  • Thử nghiệm bằng cách thay đổi từ ngữ và vị trí của các hình ảnh.

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.

Làm được nhiều hơn với LCD

Nhân vật tùy chỉnh

lcd.print() chỉ cho phép ký tự ASCII. Để hiển thị một ký tự đặc biệt hoặc biểu tượng (ví dụ: trái tim, con chim giận dữ), hãy sử dụng bộ sinh ký tự.

Màn hình LCD 16x2 có khả năng hiển thị 32 ký tự. Mỗi ký tự được tạo thành từ 40 điểm ảnh, với 8 hàng và 5 cột.

ESP8266 NodeMCU lcd 16x2 pixel

Trình tạo ký tự cho ra một ký tự có kích thước 40 pixel. Để sử dụng nó, chỉ cần làm theo các bước sau:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // Initialize the LCD I2C display lcd.backlight(); lcd.createChar(0, customChar); // create a new custom character lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char at (2, 0) } void loop() { }

Kết quả được hiển thị trên màn hình LCD là: . Kết quả hiển thị trên màn hình LCD là:

ký tự lcd tùy chỉnh

Nhiều ký tự tùy chỉnh

Chúng ta có thể tạo tối đa 8 ký tự tùy chỉnh, được đánh số từ 0 đến 7. Ví dụ sau đây tạo và hiển thị ba trong số chúng.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // Initialize the LCD I2C display lcd.backlight(); lcd.createChar(0, customChar0); // create a new custom character (index 0) lcd.createChar(1, customChar1); // create a new custom character (index 1) lcd.createChar(2, customChar2); // create a new custom character (index 2) lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char 0 at (2, 0) lcd.setCursor(4, 0); // move cursor to (4, 0) lcd.write((byte)1); // print the custom char 1 at (4, 0) lcd.setCursor(6, 0); // move cursor to (6, 0) lcd.write((byte)2); // print the custom char 2 at (6, 0) } void loop() { }

Kết quả được hiển thị trên màn hình LCD là: . Kết quả được hiển thị trên LCD là:

nhiều ký tự tùy chỉnh trên lcd

Tóm tắt: cách sử dụng ký tự tùy chỉnh trên LCD

  • Sử dụng công cụ tạo ký tự để sinh mã nhị phân cho ký tự tùy chỉnh của bạn.
  • Sao chép mã nhị phân được tạo từ bước trước và khai báo nó.
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Định nghĩa một ký tự do bạn tự thiết kế trong hàm setup() và gán cho nó một giá trị số từ 0 đến 7.
lcd.createChar(index, customChar);
  • Hiển thị ký tự tùy chỉnh trên LCD bất cứ lúc nào, có thể trong hàm setup() hoặc loop().
lcd.setCursor(column, row); // move cursor to a desired position lcd.write((byte)index); // print the custom char at the desired position

Các chức năng khác

  • In "Hello World"

Chèn các hàm sau vào hàm loop() lần lượt:

  • Xóa màn hình LCD
  • Trì hoãn 5000 mili giây
  • In "Hello World"
lcd.clear();
  • Đặt con trỏ ở góc trên bên trái của màn hình LCD.
lcd.home();
  • Đặt con trỏ ở một cột và một hàng cụ thể.
lcd.setCursor(column, row);
  • Hiển thị con trỏ trên màn hình LCD.
lcd.cursor();
  • Ẩn con trỏ LCD.
lcd.noCursor();
  • Hiển thị con trỏ LCD nhấp nháy.
lcd.blink()
  • Vô hiệu hóa nhấp nháy của con trỏ LCD.
lcd.noBlink()

Thách thức bản thân

Sử dụng LCD để thực hiện một trong các dự án sau:

Khắc phục sự cố trên LCD I2C

  1. Điều chỉnh độ tương phản của LCD bằng cách vặn biến trở ở mặt sau LCD.
  2. Tùy theo nhà sản xuất, địa chỉ I2C của LCD có thể khác nhau. Thông thường, địa chỉ I2C mặc định của LCD là 0x27 hoặc 0x3F. Hãy thử lần lượt các giá trị này. Nếu không thành công, hãy chạy đoạn mã dưới đây để xác định địa chỉ I2C.
// I2C address scanner program #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for (address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); Serial.println(" !"); nDevices++; } else if (error == 4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("No I2C devices found"); else Serial.println("done"); delay(5000); // wait 5 seconds for next scan }

Đầu ra được hiển thị trên Serial Monitor là: .

Hiệu ứng có thể nhìn thấy trên Serial Monitor là: .

Những gì xuất hiện trên Serial Monitor là:

COM6
Send
Scanning... I2C device found at address 0x3F ! done Scanning... I2C device found at address 0x3F ! done
Autoscroll Show timestamp
Clear output
9600 baud  
Newline