Arduino UNO R4 LCD I2C

Hướng dẫn này sẽ chỉ bạn cách sử dụng LCD 16x2 với giao diện I2C cùng Arduino UNO R4. Cụ thể, chúng ta sẽ học:

Arduino UNO R4 và lcd i2c 16x2

Phần Cứng Cần Thiết

1×Arduino UNO R4 WiFi hoặc Arduino UNO R4 Minima
1×(Tùy chọn) DIYables STEM V4 IoT, tương thích với Arduino Uno R4 WiFi
1×Arduino UNO R4 Minima (Tùy chọn khác)
1×Cáp USB Type-C
1×LCD I2C
1×Dây Nối (Jumper Wires)
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4
1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
1×(Khuyến nghị) Enclosure for Arduino UNO R4
1×(Khuyến nghị) Power Splitter for Arduino UNO R4
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V4 IoT Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về LCD I2C 16x2

LCD I2C 16x2 là một màn hình có 16 cột và 2 hàng. Nó được trang bị giao diện I2C và bao gồm một biến trở để điều chỉnh độ tương phản.

Sơ Đồ Chân

LCD I2C kết nối thông qua giao diện I2C và có 4 chân.

  • Chân GND: kết nối với GND (0 volt).
  • Chân VCC: kết nối với VCC để cấp nguồn (5 volt).
  • Chân SDA: mang tín hiệu dữ liệu I2C.
  • Chân SCL: mang tín hiệu clock I2C.
sơ Đồ chân lcd i2c

Tọa Độ LCD

LCD I2C 16x2 có 16 cột và 2 hàng. Cả cột và hàng đều bắt đầu đánh số từ 0.

tọa Độ lcd i2c Arduino UNO R4

Sơ Đồ Kết Nối

sơ Đồ kết nối Arduino UNO R4 lcd i2c

This image is created using Fritzing. Click to enlarge image

LCD I2C Arduino UNO R4, Nano Arduino Mega
Vin 5V 5V
GND GND GND
SDA A4 20
SCL A5 21

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

Sử dụng thư viện LiquidCrystal_I2C giúp việc xử lý LCD trở nên rất dễ dàng.

  • Khai báo thư viện:
#include <LiquidCrystal_I2C.h>
  • Tạo một đối tượng LiquidCrystal_I2C bằng cách chỉ định địa chỉ I2C, số cột và số hàng của nó.
LiquidCrystal_I2C lcd(0x27, 16, 2); // Khởi tạo LCD với địa chỉ I2C 0x27 cho màn hình 16x2
  • Thiết lập màn hình LCD.
lcd.init(); // Khởi tạo màn hình LCD lcd.backlight(); // Bật đèn nền của LCD
  • Đặt con trở tại vị trí đã chọn (column_index, row_index).
lcd.setCursor(column_index, row_index);
  • Hiển thị thông điệp trên màn hình LCD.
lcd.print("Hello World!");

Chúng ta có thể làm nhiều việc khác với LCD (xem phần 'Làm Thêm Với LCD').

※ Lưu ý:

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

Code Arduino UNO R4

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 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/arduino-uno-r4/arduino-uno-r4-lcd-i2c */ #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 lcd.backlight(); 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) } void loop() { }

Các Bước Nhanh

Thực hiện theo các hướng dẫn từng bước:

  • Mới sử dụng Arduino UNO R4 WiFi/Minima? Hãy tham khảo hướng dẫn Arduino UNO R4 - Cài Đặt Phần Mềm.
  • Kết nối màn hình LCD I2C với Arduino UNO R4 theo sơ đồ được cung cấp.
  • Kết nối board Arduino Uno R4 với máy tính của bạn bằng cáp USB.
  • Khởi chạy Arduino IDE trên máy tính của bạn.
  • Chọn board Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
  • Đi đến biểu tượng Libraries ở phía bên trái của Arduino IDE.
  • Gõ "LiquidCrystal I2C" trong ô tìm kiếm và tìm thư viện LiquidCrystal_I2C của Frank de Brabander.
  • Nhấn nút Install để cài đặt thư viện LiquidCrystal_I2C.
thư viện liquidcrystal i2c Arduino UNO R4
  • Copy code và mở nó trong Arduino IDE
  • Nhấn nút Upload trong Arduino IDE để upload code lên Arduino UNO R4
  • Kiểm tra kết quả trên màn hình LCD
hiển thị lcd i2c Arduino UNO R4
  • Thử thay đổi text và vị trí của 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.

Làm Thêm Với LCD

Ký Tự Tùy Chỉnh

Để hiển thị các ký tự đặc biệt hoặc biểu tượng như trái tim hoặc chú chim giận dữ trên LCD, bạn phải sử dụng trình tạo ký tự vì hàm lcd.print() chỉ có thể hiển thị các ký tự ASCII.

LCD 16x2 có thể hiển thị 32 ký tự trên 2 dòng, với 16 vị trí trên mỗi dòng. Mỗi ký tự sử dụng 40 ô vuông nhỏ, được sắp xếp thành 8 dòng và 5 cột.

pixel lcd 16x2 Arduino UNO R4

Trình tạo ký tự tạo ra một ký tự (40 pixel). Bạn chỉ cần làm theo các bước sau:

Nhấp vào mỗi pixel để chọn/bỏ chọn


Copy code ký tự tùy chỉnh bên dưới
Thay thế customChar[8] trong code bên dưới
#include <LiquidCrystal_I2C.h> // Initialize the LCD connected via I2C at address 0x27 with 16 columns and 2 rows LiquidCrystal_I2C lcd(0x27, 16, 2); // Define byte array for creating custom character shape byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // Initialize LCD screen lcd.backlight(); // Turn on the backlight lcd.createChar(0, customChar); // Register the custom character on LCD with ID 0 lcd.setCursor(2, 0); // Set cursor to start at column 2, row 0 lcd.write((byte)0); // Display the custom character at the current cursor position } void loop(){ }

Kết quả hiển thị trên màn hình:

ký tự tùy chỉnh lcd

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

Chúng ta có thể tạo tối đa 8 ký tự đặc biệt (đánh số từ 0 đến 7). Ví dụ bên dưới cho thấy cách tạo và hiển thị ba ký tự.

#include <LiquidCrystal_I2C.h> // Create an LCD object, using I2C address 0x27 with 16 columns and 2 rows LiquidCrystal_I2C lcd(0x27, 16, 2); // Define custom character 0 (heart shape) byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; // Define custom character 1 (arrow pointing upwards) byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; // Define custom character 2 (arrow pointing downwards) byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // Initialize the LCD display lcd.backlight(); // Turn on the LCD backlight // Register custom character 0 with index 0 on the LCD lcd.createChar(0, customChar0); // Register custom character 1 with index 1 on the LCD lcd.createChar(1, customChar1); // Register custom character 2 with index 2 on the LCD lcd.createChar(2, customChar2); // Set the cursor to column 2, row 0 lcd.setCursor(2, 0); // Display the custom character 0 at the current cursor position lcd.write((byte)0); // Set the cursor to column 4, row 0 lcd.setCursor(4, 0); // Display the custom character 1 at the current cursor position lcd.write((byte)1); // Set the cursor to column 6, row 0 lcd.setCursor(6, 0); // Display the custom character 2 at the current cursor position lcd.write((byte)2); } void loop() { }

Kết quả hiển thị trên màn hình tinh thể lỏng (LCD):

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

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

  • Sử dụng trình tạo ký tự ở trên để tạo mã nhị phân cho ký tự đặc biệt của bạn.
  • Viết mã nhị phân cho ký tự của bạn (copy từ bước trước).
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Tạo ký tự cá nhân hóa và đặt nó tại một số từ 0 đến 7 trong hàm setup().
lcd.createChar(index, customChar);
  • Hiển thị ký tự đặc biệt trên LCD bất cứ khi nào bạn muốn, có thể trong hàm setup() hoặc loop().
lcd.setCursor(column, row); // Đặt con trỏ tại cột và hàng được chỉ định lcd.write((byte)index); // Hiển thị ký tự tùy chỉnh được lưu tại vị trí 'index'

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

Chèn các hàm sau vào hàm loop() từng cái một, thêm delay(5000) sau mỗi hàm.

  • Xóa màn hình LCD
lcd.clear();
  • Đặt con trỏ ở góc trên-trái của màn hình.
lcd.home();
  • Định vị con trỏ tại vị trí cụ thể (column, row).
lcd.setCursor(column, row);
  • Hiển thị con trỏ màn hình LCD.
lcd.cursor();
  • Tắt con trỏ màn hình LCD.
lcd.noCursor();
  • Hiển thị con trỏ LCD nhấp nháy.
lcd.blink()
  • Dừng con trỏ LCD nhấp nháy.
lcd.noBlink()

Khắc Phục Sự Cố Trên LCD I2C

Nếu văn bản không xuất hiện trên LCD I2C, hãy kiểm tra các vấn đề sau:

  • Thay đổi độ sáng màn hình LCD bằng cách xoay biến trở ở mặt sau của nó.
  • Địa chỉ I2C của LCD có thể khác nhau với các nhà sản xuất khác nhau. Thường là 0x27 hoặc 0x3F. Thử từng địa chỉ này riêng lẻ. Nếu cả hai đều không hoạt động, hãy sử dụng code sau để tìm địa chỉ I2C đúng.
// 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 }

Kết quả hiển thị trên Serial Monitor:

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  

Bình Luận