Tìm kiếm mã

Thư viện và mã Arduino cho màn hình LCD2004 với I2C

Thư viện và mã Arduino cho màn hình LCD2004 với I2C

Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng màn hình LCD2004 với giao tiếp I2C. Thiết lập này cho phép bạn hiển thị văn bản trên bốn dòng, lý tưởng cho nhiều ứng dụng khác nhau. Chúng ta sẽ đề cập đến cách đấu dây cần thiết, đoạn mã và cách triển khai chức năng một cách hiệu quả.

Chúng ta sẽ sử dụng thư viện LiquidCrystal_I2C để quản lý màn hình LCD. Thư viện này đơn giản hóa việc tương tác với LCD bằng cách xử lý giao tiếp I2C cho bạn. Để hiểu toàn diện, hãy xem video để có hướng dẫn trực quan (trong video tại 00:00).

Phần cứng được giải thích

Thành phần chính cho dự án này là màn hình LCD2004, có 20 cột và 4 hàng để xuất văn bản. Nó giao tiếp bằng I2C, cho phép kết nối ít hơn so với kết nối song song truyền thống. Điều này làm cho nó phù hợp với các dự án có số chân cắm hạn chế trên Arduino.

Giao diện I2C sử dụng hai đường, SDA (đường dữ liệu) và SCL (đường xung nhịp), kết nối với các chân tương ứng trên Arduino. LCD cũng yêu cầu kết nối nguồn và đất. Trong thiết lập này, chúng ta sẽ kết nối màn hình với nguồn 5V, có thể được cung cấp trực tiếp từ Arduino.

Chi tiết từ bảng dữ liệu

Nhà sản xuấtGeneric
Số bộ phậnLCD2004
Điện áp logic/IO5 V
Điện áp cung cấp5 V
Dòng điện đầu ra (mỗi kênh)Thông thường 20 mA
Dòng điện đỉnh (mỗi kênh)Thông thường 40 mA
Hướng dẫn tần số PWMKhông áp dụng
Ngưỡng logic đầu vào0,3 Vcc (thấp), 0,7 Vcc (cao)
Sụt áp / RDS(on) / bão hòaThông thường 0,2 V
Giới hạn nhiệt0°C đến 50°C
Kiểu đóng góiLCD 4x20 tiêu chuẩn
Ghi chú / biến thểCó sẵn với các tùy chọn đèn nền khác nhau

  • Đảm bảo nguồn điện phù hợp để tránh hư hỏng.
  • Sử dụng điện trở kéo lên trên các đường SDA và SCL nếu cần.
  • Kiểm tra địa chỉ I2C; thường là 0x27 cho màn hình này.
  • Giữ các kết nối ngắn để giảm thiểu nhiễu.
  • Xác nhận rằng thư viện đã được cài đặt đúng trước khi tải mã lên.

Hướng dẫn đấu dây

Để đấu dây màn hình LCD2004 với I2C vào Arduino, hãy thực hiện các kết nối sau:

  • Kết nối chân VCC của LCD với chân 5V trên Arduino.
  • Kết nối chân GND của LCD với chân GND trên Arduino.
  • Kết nối chân SDA của LCD với chân A4 trên Arduino.
  • Kết nối chân SCL của LCD với chân A5 trên Arduino.

Nếu bo mạch Arduino của bạn có các chân I2C khác, hãy đảm bảo điều chỉnh các kết nối cho phù hợp. Video cũng trình bày một cấu hình đấu dây thay thế (trong video tại 01:30).

Ví dụ mã & hướng dẫn chi tiết

Hãy xem một ví dụ đơn giản về việc khởi tạo LCD và hiển thị một thông điệp. Đoạn mã sau thiết lập LCD và in "Hello, world!" lên màn hình.

lcd.begin(); // Khởi tạo LCD
lcd.backlight(); // Bật đèn nền
lcd.print("Hello, world!"); // Hiển thị thông điệp

Mã này khởi tạo LCD và kích hoạt đèn nền. Sau đó, nó hiển thị thông điệp trên dòng đầu tiên của LCD. Đèn nền rất cần thiết để nhìn rõ trong điều kiện ánh sáng yếu.

Tiếp theo, chúng ta sẽ xem xét một ví dụ phức tạp hơn hiển thị dữ liệu động, chẳng hạn như số đo điện áp.

lcd.setCursor(0,0); // Đặt con trỏ đến dòng đầu tiên
lcd.print("Voltage: "); // Hiển thị nhãn điện áp
float v = 8.254; // Giá trị điện áp ví dụ
lcd.print(v); // In giá trị điện áp

Trong đoạn trích này, chúng ta đặt vị trí con trỏ đến dòng đầu tiên và in nhãn điện áp theo sau là giá trị điện áp thực tế. Điều này cho phép bạn hiển thị các phép đo thời gian thực ở định dạng thân thiện với người dùng.

Để có thêm chức năng, bạn có thể triển khai đầu vào nối tiếp để cho phép người dùng nhập ký tự qua màn hình nối tiếp và hiển thị chúng trên LCD.

if (Serial.available()) { // Kiểm tra đầu vào nối tiếp
  lastChar = Serial.read(); // Đọc ký tự cuối cùng
  lcd.write(lastChar); // Hiển thị ký tự trên LCD
}

Mã này kiểm tra xem có dữ liệu nào khả dụng trên cổng nối tiếp không. Nếu có, nó đọc ký tự cuối cùng được nhập và hiển thị nó trên LCD. Sự tương tác này nâng cao trải nghiệm người dùng bằng cách cho phép hiển thị động dựa trên đầu vào của người dùng.

Để có mã hoàn chỉnh, vui lòng tham khảo chương trình đầy đủ được tải bên dưới bài viết.

Trình diễn / Điều gì sẽ xảy ra

Khi bạn chạy mã, bạn sẽ thấy thông điệp ban đầu được hiển thị trên LCD, theo sau là các số đo điện áp và bất kỳ ký tự nào được nhập qua màn hình nối tiếp. Đảm bảo các kết nối chắc chắn để tránh các vấn đề hiển thị. Nếu LCD không hiển thị gì, hãy kiểm tra lại dây nối và địa chỉ I2C (trong video tại 02:15).

Hình ảnh

LCD2004_display-3
LCD2004_display-3
LCD2004_display-1
LCD2004_display-1
LCD2004_display-2
LCD2004_display-2
121-Arduino code for LCD2004 with I2C: Hello World sketch
Ngôn ngữ: C++
/*
 *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 *  
 *  Updated by Ahmad Shamshiri on July 8, 2018 at 19:14 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup()
{
	// initialize the LCD
	lcd.begin();

	// Turn on the backlight and print a message.
	lcd.backlight();
	lcd.print("Hello, world!");
}

void loop()
{
	// Do nothing here...
}
122-Arduino code for LCD2004 with I2C RoboJax custom sketch
Ngôn ngữ: C++
/*
 * 
 * *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 * This code is basic usage of an LCD2004 display with I2C.
 * It will display text in 4 lines, each with 20 characters.
 * It displays multiple float values and text on the same line.
 * 
 * 
 * 
 * Updated by Ahmad Shamshiri on July 08, 2018 at 09:20 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 

 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {

  // initialize the LCD, 
  lcd.begin();
  // Turn on the backlight and print a message.
  lcd.backlight();
  lcd.clear();
   lcd.setCursor (0,0); //
   lcd.print("Robojax LCD2004 Test"); 
   lcd.setCursor (0,1); //   
 
   lcd.print("Please Wait - 3");  
   lcd.setCursor (0,1); // 
   delay(1000);        
   lcd.print("Please Wait - 2");  
   delay(1000); 
   lcd.setCursor (0,1); //      
   lcd.print("Please Wait - 1");  
   delay(1000);       
}

void loop() {

    // Robojax.com LCD2004 with I2C custom code
  lcd.clear();// clear previous values from screen
  lcd.setCursor (0,0); //character zero, line 1
  lcd.print("LCD2004 I2C Example"); // print text  

  lcd.setCursor (4,1); //character 4, line 2
  lcd.print("Robojax.com"); // print text   

  lcd.setCursor (0,2); //character 0, line 3
  lcd.print("Voltage: "); // print text 
  float v = 8.254;// define or get voltage
  char VoltageStr[5];
  dtostrf(v, 5, 3, VoltageStr );
  lcd.setCursor (9,2); //character 9, line 3  
  lcd.print(VoltageStr); // print voltage
  lcd.setCursor (14,2); //character 14, line 3
  lcd.print("V"); // print V at the end of voltage  

  lcd.setCursor (0,3); //character 0, line 4
  lcd.print("X: "); // print x
  float xdeg = -123.87;// define or get x degree (just example)
  lcd.setCursor (3,3); //character 8, line 3  
  lcd.print(xdeg); // print xdeg value

  
  lcd.setCursor (12,3); //character 12, line 4
  lcd.print("Y: "); // print Y
  float ydeg = 32.8;// define or get y degree (just example)
  lcd.setCursor (15,3); //character 15, line 4  
  lcd.print(ydeg); // print ydeg value
      
                     
   delay(100);

}// loop end
123-Arduino code for LCD2004 with I2C: blinking sketch
Ngôn ngữ: C++
/*
 * 
 *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 * This code is basic usage of an LCD2004 display with I2C 
 * It will display a blinking cursor on the screen 
 * 

 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 

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

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup()
{
	// initialize the LCD
	lcd.begin();
}

void loop()
{
	bool blinking = true;
	lcd.cursor();

	while (1) {
		if (blinking) {
			lcd.clear();
			lcd.print("No cursor blink");
			lcd.noBlink();
			blinking = false;
		} else {
			lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Your name: ");
      lcd.blink();
			blinking = true;
		}
		delay(4000);
	}
}
124-Arduino code for LCD2004 with I2C serial monitor sketch
Ngôn ngữ: C++
/*
 * 
 *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 * This code is basic usage of an LCD2004 display with I2C.
 * This code will allow you to enter a character on the serial monitor and display it on the screen.
 * 

 * Updated by Ahmad Shamshiri on July 08, 2018 at 09:20 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

char lastChar ='_';
void setup()
{
	lcd.begin();
	lcd.backlight();
  lcd.print("Robojax.com Test");
	// Initialize the serial port at a speed of 9600 baud
	Serial.begin(9600);
}

void loop()
{

      lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Enter Letter: ");

      lcd.setCursor(13,1);  
	// If characters arrived over the serial port...
	if (Serial.available()) {
		// Wait a bit for the entire message to arrive
		delay(100);


		// Write all characters received via the serial port to the LCD.
		while (Serial.available() > 0) {
      lastChar =Serial.read();
      Serial.print("Entered: ");
      Serial.println(lastChar);
		}//while end
	}// if end

  lcd.write(lastChar);// display last entered character
  delay(1000);


}// loop end

Tài nguyên & tài liệu tham khảo

Tập tin📁

Thư viện Arduino (tệp nén)