• HOME
  • DỰ ÁN & MẠCH ĐIỆN
    • Lập trình
      • ARDUINO PROJECT
      • ESP8266 PROJECT
      • ESP32 PROJECT
      • RASPBERRY PI PROJECT
      • Vi điều khiển
    • Điện tử ứng dụng
      • Audio / Amplifiers
      • Nguồn điện
      • Pin sạc/Acquy và mạch sạc
      • Biến đổi AC và DC
      • Robotic
      • Cảm biến
      • LED
      • LCD
      • Động cơ bước
      • Mạch linh tinh
      • Test & Measurement
      • RF – FM
    • Nixie Clock
    • HOME AUTOMATION
    • Dân dụng
    • Công nghiệp
  • KIẾN THỨC CĂN BẢN
    • Điện tử cơ bản
    • Điện tử số
    • PCB
    • Nixie Tube
    • Raspberry Pi
    • Vi điều khiển
    • Arduino
    • IN 3D
  • DOWNLOAD
    • Phần mềm điện tử
    • Giáo trình
      • Giáo trình Điện – Điện tử
      • Giáo trình Tự Động Hóa
      • Giáo trình Viễn thông
    • Đề tài
      • Đề tài – Điện – Điện Tử
      • Đề tài – Tự Động Hóa
      • Đề tài – Viễn thông
    • Điện tử ứng dụng
    • Tài liệu nước ngoài
    • Hướng dẫn, sửa chữa
    • Sơ đồ, nguyên lý thiết bị
    • Tiêu chuẩn – Đo lường – Thử nghiệm
    • Datasheet
  • LIÊN HỆ
  • SẢN PHẨM

Mạch Điện Lý Thú

Sơ đồ nguyên lý, PCB, đồ án, tài liệu, DIY

Trang chủ » DỰ ÁN & MẠCH ĐIỆN » Lập trình » ARDUINO PROJECT » Hiển thị nhiệt độ, độ ẩm lên LCD 16×2 giao tiếp bằng I2C sử dụng Arduino

Hiển thị nhiệt độ, độ ẩm lên LCD 16×2 giao tiếp bằng I2C sử dụng Arduino

29/07/2025 by admin 2 Bình luận

Đã đượ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 

Mục lục hiện
Hiển thị nhiệt độ, độ ẩm lên LCD 16×2 giao tiếp bằng I2C sử dụng Arduino
Hiển thị nhiệt độ, độ ẩm lên LCD sử dụng I2C
Sơ đồ đấu nối
Các linh kiện cần thiết cho dự án:
Giải thích code
Hàm createChar()
Tạo ký tự
Hàm isnan()
Hàm round()

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é

  • Thư viện Liquidcrystal_I2C. Tải ngay
  • Thư viện DHT.h. Tải ngay

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

  • Chia sẻ lên Facebook
  • Chia sẻ lên Twitter
  • Chia sẻ lên LinkedIn

Thuộc chủ đề:ARDUINO PROJECT, Cảm biến, Kiểm thử và đo đạc Tag với:arduino, code, độ ẩm, lcd, LCD1602, nhiệt độ

Bài viết trước « Đọc nhiệt độ, độ ẩm (DHT11) sử dụng Arduino Uno
Bài viết sau Hướng dẫn thêm mới thư viện trong Arduino IDE »

Reader Interactions

Bình luận

    Để lại một bình luận Hủy

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

  1. Hoàng văn thực viết

    28/08/2021 lúc 13:57

    byte degree[8] = {
    0B01110,
    0B01010,
    0B01110,
    0B00000,
    0B00000,
    0B00000,
    0B00000,
    0B00000
    Đoạn này giải thích ntn ạ em k hiểu ạ

    Bình luận
    • admin viết

      30/08/2021 lúc 09:08

      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/

      Bình luận

Sidebar chính

Zalo hỏi đáp 24/7

Theo dõi qua mạng xã hội

  • Facebook

Bạn đang tìm gì?

Bài viết mới nhất

Đo nhiệt độ dùng cảm biến DS18B20 với Arduino

25/08/2025

Những lưu ý khi sử dụng nguồn tổ ong để được lâu dài

Những lưu ý khi sử dụng nguồn tổ ong để được lâu dài

25/08/2025

Màn hình OLED I2C SSD1306 và Arduino

25/08/2025

Hướng Dẫn Cách Tự Sửa Vợt Muỗi Đơn Giản Mà Hiệu Quả

25/08/2025

Các mạch điện đèn cơ bản trong mạch điện dân dụng

Các mạch điện đèn cơ bản trong mạch điện dân dụng

25/08/2025

Danh mục

  • DỰ ÁN & MẠCH ĐIỆN (241)
    • Công nghiệp (16)
    • Dân dụng (29)
    • Điện tử ứng dụng (178)
      • Audio / Amplifiers (34)
      • Biến đổi AC và DC (24)
      • Cảm biến (40)
      • Động cơ bước (5)
      • Kiểm thử và đo đạc (23)
      • LCD (15)
      • LED (20)
      • Mạch linh tinh (27)
      • Nguồn điện (42)
      • Pin sạc/Acquy và mạch sạc (24)
      • RF – FM (5)
      • Robotic (2)
    • HOME AUTOMATION (23)
    • Lập trình (82)
      • ARDUINO PROJECT (39)
      • ESP32 PROJECT (6)
      • ESP8266 PROJECT (17)
      • RASPBERRY PI PROJECT (9)
      • Vi điều khiển (24)
    • Nixie Clock (3)
  • Kiến thức căn bản (170)
    • Arduino (36)
    • Điện tử cơ bản (77)
    • Điện tử số (9)
    • IN 3D (9)
    • Nixie Tube (13)
    • PCB (18)
    • Raspberry Pi (10)
    • Vi điều khiển (16)

Footer

Bài viết mới nhất

  • Đo nhiệt độ dùng cảm biến DS18B20 với Arduino
  • Những lưu ý khi sử dụng nguồn tổ ong để được lâu dài
  • Màn hình OLED I2C SSD1306 và Arduino
  • Hướng Dẫn Cách Tự Sửa Vợt Muỗi Đơn Giản Mà Hiệu Quả
  • Các mạch điện đèn cơ bản trong mạch điện dân dụng
  • Sơ đồ nguyên lý và cách đấu dây mạch điện quạt trần

Bình luận mới nhất

  • Hà Thêm Phát trong Đo cuộn cảm và tần số cộng hưởng mạch LC bằng Arduino
  • Đặng phú Sơn. trong Cách thay thế transistor tương đương
  • admin trong Nguyên lý cảm biến siêu âm chống nước JSN-SR04T và sơ đồ mạch
  • Rohan trong Nguyên lý cảm biến siêu âm chống nước JSN-SR04T và sơ đồ mạch

Tìm kiếm

Tất cả nội dung trên website chỉ dùng để tham khảo. Chúng tôi không chịu trách nhiệm về thông tin thành viên đăng tải lên website và xóa bài viết khi có vi phạm bản quyền tác giả.