Mở đầu
- Mọi người chắc hẳn cũng đã quen thuộc với cách sử dụng Lcd 16×2 cùng Module I2C trên những bo mạch Arduino Uno rồi đúng không. Hòa cùng xu thế IOT toàn câu, việc sử dụng các bo mạch tích hợp WiFi như ESP8266 là điều vô cùng phổ biến. Tuy đều có thể viết code và nạp trên trình biên dịch Arduino IDE, nhưng cách dùng LCD16x2 có module I2C lại có đôi chút khác biệt giữa 2 bo mạch Arduino Uno và Esp8266. Vậy nó là gì, hãy cùng xem ngay nhé!
Chuẩn bị
Phần cứng | |
---|---|
ESP8266 NodeMCU v1.0 | x1 |
Phần mềm | |
Arduino IDE | |
Thư viện | |
LiquidCrystal I2C |
Mạch chuyển đổi I2C cho LCD
- LCD có quá nhiều chân gây khó khăn trong quá trình kết nối và chiếm dụng nhiều chân của vi điều khiển? Module chuyển đổi I2C cho LCD sẽ giải quyết vấn đề này cho bạn, thay vì sử dụng tối thiểu 6 chân của vi điều khiển để kết nối với LCD (RS, EN, D7, D6, D5 và D4) thì với module chuyển đổi bạn chỉ cần sử dụng 2 chân (SCL, SDA) để kết nối. Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 1602, LCD 2004, … )
Thông số kỹ thuật
Điện áp hoạt động | : 2.5-6 VDC |
Hỗ trợ màn hình: | : LCD1602,1604,2004 (driver HD44780) |
Giao tiếp | :I2C |
Địa chỉ mặc định | : 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2) |
Kích thước | : 41.5x19x15.3 mm |
Trọng lượng | : 5g |
Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt | |
Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD |
Sơ đồ chân
Ghép nối với LCD
Cài đặt thư viện LiquidCrystal I2C
-
Tải thư viện trên Github
- Tải thư viện trên Github
- Chọn Sketch → Include Library → Add .ZIP Library
- Chọn thư viện vừa tải
Tải thư việc trực tiếp trên Library Manager
- Chọn Sketch → Include Library →Manager Library
- Gõ vào ô tìm kiếm liquidcrystal i2c, sau đó kéo xuống, tới LiquidCrystal I2C thì ra chọn Install
Sơ đồ đấu nối với ESP8266
Lưu ý: Nguồn vào bạn phải cắm vào Vin và GND. Vì đó là nguồn 5V từ cáp USB đưa vào, nếu cắm vào nguồn 3.3V, Lcd sẽ sáng yếu và có thể không hoạt động đúng.
Lập trình LCD I2C
Một số hàm thông dụng
lcd.init() | : Khởi tạo màn hình lcd |
lcd.clear() | : Xóa màn hình, đưa con trỏ về vị trí 0,0 |
lcd.home() | : Đưa con trỏ về vị trí 0 |
lcd.setCursor(x,y) | : Đưa con trỏ về vị trí cột thứ x, hàng thứ y |
lcd.noDisplay() | : Không hiển thị gì trên màn hình cả |
lcd.display() | : Hiển thị lên màn hình |
lcd.noBlink() | : Không nhấp nháy con trỏ |
lcd.blink() | : Nhấp nháy con trỏ |
lcd.scrollDisplayLeft() | : Cuộn màn hình bên trái |
lcd.scrollDisplayRight() | : Cuộn màn hình bên phải |
lcd.leftToRight() | : Kí tự sẽ hiển thị từ phía bên trái sang phải |
lcd.rightToLeft() | : Kí tự sẽ hiển thị từ phía phải sang trái |
lcd.noBacklight() | : Tắt đèn nền |
lcd.backlight() | : Có đèn nền |
lcd.write(x) | : Lcd sẽ in ra kí tự thứ x trong ô nhớ từ 0-7 của CGRAM |
lcd.createChar(location,charmap[]) | : Hiển thị một kí tự charmap[] bất kì |
Code mẫu
#include <LiquidCrystal_I2C.h> #include <Wire.h> // Set the LCD address to 0x27 for a 16 chars and 2 line display LiquidCrystal_I2C lcd(0x27, 16, 2); byte heart[8] = { // Mình đã tạo một mảng byte hình trái tim ở đây nhé 0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 }; void setup() { Serial.begin(9600); Wire.begin(2, 0); //Bắt đầu 2 chân SDA và SCK của I2C // Khởi tạo LCD lcd.init(); //Bắt đầu màn hình lcd.backlight(); // Bật đèn nền lcd.home(); //Đưa con trỏ về vị trí 0,0 lcd.print("Hello World"); lcd.display(); // Hiển thị lên màn hình. lcd.blink(); // Nhấp nháy con trỏ ở vị trí cuối cùng lcd.createChar(0, heart); // Mình đã tạo một ô chứa ở vị trí 0, có hình trái tim. } void loop() { //Giờ chúng ta sẽ sử dụng một số hàm hay dùng ở trong lcd nhé. lcd.setCursor(2,0); //Đưa con trỏ về cột thứ 2, hàng 0. lcd.print("Hi,I'm Sofial"); delay(2000); // Delay trong thời gian 2s lcd.setCursor(15,0) //Đưa con trỏ về cột thứ 15, dòng 0. lcd.write(byte(0)); //Mình sẽ in ra cái mảng hình trái tim nhé lcd.blink(); //Nhấp nháy con trỏ tại vị trí cuối cùng. delay(2000); lcd.clear(); // Xóa màn hình delay(4000); // delay trong khoảng thời gian 4s rồi sẽ lặp lại chu kì }