Hướng dẫn sử dụng màn hình LCD 1602 I2C với Arduino Uno

Hướng dẫn nối màn hình LCD 1602 I2C với Arduino Uno, cài thư viện LiquidCrystal_I2C, chạy code hiển thị và quét địa chỉ I2C 0x27/0x3F.

LCD 1602 có thể hiển thị 16 ký tự trên mỗi dòng và gồm hai dòng. Khi gắn backpack I2C, màn hình chỉ cần bốn dây: VCC, GND, SDA và SCL; trong đó SDA và SCL là hai dây tín hiệu.

1. Linh kiện cần chuẩn bị

  • Arduino Uno và cáp USB dữ liệu.
  • Màn hình LCD 1602 có backpack I2C, thường dùng PCF8574.
  • Dây jumper.
  • Arduino IDE và một thư viện LiquidCrystal_I2C tương thích với ví dụ bên dưới.

2. Đấu nối LCD 1602 I2C với Arduino Uno

Đấu nối LCD 1602 I2C với Arduino Uno
LCD I2C Arduino Uno Chức năng
GND GND Mass chung
VCC 5V Nguồn cho module LCD thông dụng; kiểm tra nhãn module trước khi cấp
SDA A4 / SDA Dữ liệu I2C
SCL A5 / SCL Xung clock I2C

Trên Arduino Uno R3, cặp chân SDA/SCL gần AREF được nối chung với A4/A5; không phải một bus I2C thứ hai. Hãy ngắt nguồn trước khi thay đổi dây nối. Không sao chép kết nối VCC = 5 V này sang ESP32/ESP8266: GPIO của các bo đó dùng mức 3,3 V và không được để bus kéo lên 5 V.

Sơ đồ đấu nối màn hình LCD 1602 I2C với Arduino Uno
Sơ đồ đấu nối LCD 1602 I2C với Arduino Uno.

3. Quét địa chỉ I2C

Backpack dùng PCF8574 có dải địa chỉ 0x20–0x27; loại PCF8574A có dải 0x38–0x3F. Các chân A0–A2 chọn một địa chỉ trong dải tương ứng, vì vậy hãy quét bus thay vì mặc định 0x27 hoặc 0x3F. Nạp chương trình sau và mở Serial Monitor ở 115200 baud:

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(100000);
  Serial.println("Scanning I2C...");

  for (uint8_t address = 1; address < 127; ++address) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {
      Serial.print("Found: 0x");
      if (address < 16) Serial.print('0');
      Serial.println(address, HEX);
    }
  }
}

void loop() {}

4. Cài thư viện LiquidCrystal_I2C

  1. Mở Tools > Manage Libraries trong Arduino IDE.
  2. Tìm LiquidCrystal I2C và cài một thư viện có ví dụ cho constructor LiquidCrystal_I2C(address, columns, rows). Mã dưới đây là ví dụ tĩnh, chưa được biên dịch với một package/version cụ thể.
  3. Nếu thư viện bạn chọn dùng begin() thay cho init(), hãy theo đúng ví dụ của phiên bản đó; các thư viện trùng tên không hoàn toàn có cùng API.

5. Chương trình hiển thị mẫu

Thay 0x27 bằng địa chỉ vừa tìm thấy nếu kết quả quét khác:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

constexpr uint8_t LCD_ADDRESS = 0x27;
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);

void setup() {
  Wire.begin();
  Wire.setClock(100000);
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Hello, Pyworld!");
  lcd.setCursor(0, 1);
  lcd.print("LCD 1602 I2C");
}

void loop() {}

6. Xử lý lỗi thường gặp

  • Không tìm thấy địa chỉ: kiểm tra nguồn, GND, dây SDA/SCL và mối hàn backpack.
  • Có đèn nền nhưng không thấy chữ: xoay nhẹ biến trở tương phản trên backpack.
  • Ký tự sai: kiểm tra kích thước 16 × 2, địa chỉ và API của đúng thư viện.
  • Quét thấy địa chỉ nhưng LCD vẫn sai: ánh xạ các chân PCF8574 sang HD44780 trên backpack có thể không khớp với thư viện.
  • Bus chập chờn: rút ngắn dây, kiểm tra đầu nối và tránh đi song song với dây công suất.

Xem thêm cách dùng OLED SSD1306 với ESP8266 hoặc kết hợp LCD với HX711 và load cell.


Tin tức liên quan

Hướng dẫn dùng màn hình OLED SSD1306 với ESP8266
Hướng dẫn dùng màn hình OLED SSD1306 với ESP8266

1540 Lượt xem

Hướng dẫn nối OLED SSD1306 với ESP8266, quét địa chỉ I2C, cài thư viện và hiển thị thời gian bằng mã Arduino mẫu.

Hướng dẫn ESP32 điều khiển module relay 4 kênh an toàn
Hướng dẫn ESP32 điều khiển module relay 4 kênh an toàn

3843 Lượt xem

Hướng dẫn ESP32 điều khiển relay 4 kênh: chọn GPIO an toàn, cấp nguồn 5 V phù hợp, xác định active LOW và lưu ý khi đóng cắt tải.


Bình luận
Đã thêm vào giỏ hàng