Đã được đăng vào 11/12/2019 @ 11:55
Hiển thị nhiệt độ, độ ẩm lên LCD 16×2 giao tiếp bằng I2C sử dụng Arduino
Trong bài viết hôm trước mình đã hướng dẫn các bạn làm thế nào để hiển thị các ký tự lên màn hình LCD 16×2 bằng giao tiếp I2C.
Tiếp tục trong chuỗi bài viết về LCD hôm nay mình sẽ hướng dẫn các bạn làm thế nào để hiển thị các thông số của cảm biến nhiệt độ, độ ẩm lên LCD.
Để hiểu hơn về bài viết này các bạn đọc lại 2 bài viết bên dưới rồi chúng ta tiếp tục bài này tiếp nha.
- Đọc thêm: Tổng quan LCD 16×2 và giao tiếp I2C LCD sử dụng Arduino
- Đọc thêm: Đọc nhiệt độ, độ ẩm (DHT11) sử dụng Arduino Uno
Hiển thị nhiệt độ, độ ẩm lên LCD sử dụng I2C
Màn hình LCD I2C | Arduino UNO R3 |
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
Cảm biến nhiệt độ, độ ẩm DHT11 | |
VCC | 5V |
DATA | D4 |
GND | GND |
Sơ đồ đấu nối

Các linh kiện cần thiết cho dự án:
Linh kiện |
Arduino Uno R3 |
Màn hình LCD 16×2 |
Module I2C LCD 16×2 |
Cảm biến nhiệt độ, độ ẩm DHT11 |
Code mẫu
#include <DHT.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F,16,2); const int DHTPIN = 4; const int DHTTYPE = DHT11; DHT dht(DHTPIN, DHTTYPE); byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 }; void setup() { lcd.init(); lcd.backlight(); lcd.print("Nhiet do: "); lcd.setCursor(0,1); lcd.print("Do am: "); lcd.createChar(1, degree); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { } else { lcd.setCursor(10,0); lcd.print(round(t)); lcd.print(" "); lcd.write(1); lcd.print("C"); lcd.setCursor(10,1); lcd.print(round(h)); lcd.print(" %"); } }
Để chương trình có thể nhận được các hàm LCD và DHT các bạn nhớ download thư viện về nhé
Giải thích code
Hàm createChar()
lcd.createChar(1, degree);
Dùng để tạo một ký tự tùy chỉnh để sử dụng trên màn hình LCD.
Tối đa có 8 ký tự được hỗ trợ là 5×8 pixel (được đánh số từ 0 đến 7).
Sự xuất hiện của mỗi ký tự tùy chỉnh được chỉ định bởi một mảng gồm 8 byte, 1 byte cho mỗi hàng.
Để hiển thị một ký tự tùy chỉnh trên màn hình ta dùng hàm write() để viết ra con số đó.
Tạo ký tự
byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000
Đoạn code trên để “Tạo ký tự” trên màn hình LCD. Những ký tự đặc biệt phải dùng cách đó để tạo ra.
Các bạn đọc 2 bài viết dưới đây để hiểu rõ hơn nhé:
https://www.arduino.cc/en/Reference/LiquidCrystalCreateChar
Và
https://www.instructables.com/id/How-to-Create-Custom-Character-for-LCD/
Cú pháp
lcd.createChar(số, dữ liệu)
Thông số
lcd: là một biến của kiểu dư liệu LiquidCrystal.
số: tạo ký tự (0 đến 7).
dữ liệu: dữ liệu của các ký tự là pixel.
Hàm isnan()
if (isnan(t) || isnan(h))
Hàm isnan() là hàm trả về true hoặc false nếu giá trị cần kiểm tra không phải là một biểu thức toán học đúng.
Ở đoạn code trên mình kiểm tra xem thử việc đọc giá trị của nhiệt độ hoặc độ ẩm trả về có bị thất bại hay không.
Cú pháp
isnan(double x) ;
Hàm round()
lcd.print(round(t));
Hàm round() là hàm làm tròn của một giá trị nào từ số thập phân làm tròn tới số nguyên gần nhất.
Nguồn: arduinokit.vn
byte degree[8] = {
0B01110,
0B01010,
0B01110,
0B00000,
0B00000,
0B00000,
0B00000,
0B00000
Đoạn này giải thích ntn ạ em k hiểu ạ
Chào bạn,
Đoạn code đó để “Tạo ký tự” trên màn hình LCD. Những ký tự đặc biệt phải dùng cách đó để tạo ra. Bạn đọc 2 bài viết dưới đây để hiểu rõ hơn nhé:
https://www.arduino.cc/en/Reference/LiquidCrystalCreateChar
Và
https://www.instructables.com/id/How-to-Create-Custom-Character-for-LCD/