ESP32 Cảm Biến Nhiệt Độ Độ Ẩm LCD

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 để đọc giá trị nhiệt độ và độ ẩm từ các cảm biến DHT11/DHT22, và hiển thị trên LCD I2C.

Linh Kiện Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×LCD I2C 16x2
1×Cảm Biến Nhiệt Độ và Độ Ẩm DHT11
1×(Tùy chọn) Cảm Biến Nhiệt Độ và Độ Ẩm DHT22
1×breadboard
1×Dây Jumper
1×(Tùy chọn) DC Power Jack
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về DHT11, DHT22 và LCD

Chúng tôi có các hướng dẫn chi tiết về cảm biến nhiệt độ DHT11, DHT22 và LCD. Mỗi hướng dẫn chứa thông tin chi tiết và hướng dẫn từng bước về pinout phần cứng, nguyên lý hoạt động, kết nối dây với ESP32, code ESP32... Tìm hiểu thêm tại các liên kết sau:

Sơ Đồ Đấu Nối

Trong một số trường hợp, ESP32 có thể không cung cấp đủ nguồn cho màn hình LCD. Nếu LCD không hiển thị gì, hãy cấp nguồn cho LCD bằng nguồn ngoài. Dưới đây là sơ đồ đấu nối cho một số trường hợp sử dụng. Lưu ý rằng cảm biến DHT22 có thể hoạt động với 5V hoặc 3.3V, nên bạn có thể kết nối chân VCC của DHT22 với chân 3.3V hoặc chân 5V.

Đấu Nối ESP32 - Module DHT11 - LCD I2C

  • Sơ đồ đấu nối với breadboard, cấp nguồn ESP32 qua cổng USB, cấp nguồn LCD qua board ESP32
ESP32 dht11 sensor lcd sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

  • Nếu cấp nguồn ESP32 qua chân Vin và LCD với nguồn ngoài
ESP32 dht11 module lcd sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

  • Nếu cấp nguồn ESP32 qua cổng USB và cấp nguồn LCD bằng nguồn ngoài
ESP32 dht11 lcd i2c sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Đấu Nối ESP32 - Module DHT22 - LCD I2C

  • Sơ đồ đấu nối với breadboard, cấp nguồn ESP32 qua cổng USB, cấp nguồn LCD qua board ESP32
ESP32 dht22 sensor lcd sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

  • Nếu cấp nguồn ESP32 qua chân Vin và LCD với nguồn ngoài
ESP32 dht22 module lcd sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

  • Nếu cấp nguồn ESP32 qua cổng USB và cấp nguồn LCD bằng nguồn ngoài
ESP32 dht22 lcd i2c sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Code ESP32 - Cảm Biến DHT11 - LCD I2C

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-temperature-humidity-sensor-lcd */ #include <DHT.h> #include <LiquidCrystal_I2C.h> #define DHT_SENSOR_PIN 23 // ESP32 pin GPIO23 connected to DHT11 sensor #define DHT_SENSOR_TYPE DHT11 LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows DHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE); void setup() { dht_sensor.begin(); // initialize the DHT sensor lcd.init(); // initialize the lcd lcd.backlight(); // open the backlight } void loop() { float humi = dht_sensor.readHumidity(); // read humidity float tempC = dht_sensor.readTemperature(); // read temperature lcd.clear(); // check whether the reading is successful or not if (isnan(tempC) || isnan(humi)) { lcd.setCursor(0, 0); lcd.print("Failed"); } else { lcd.setCursor(0, 0); // display position lcd.print("Temp: "); lcd.print(tempC); // display the temperature lcd.print("°C"); lcd.setCursor(0, 1); // display position lcd.print("Humi: "); lcd.print(humi); // display the humidity lcd.print("%"); } // wait a 2 seconds between readings delay(2000); }

※ Lưu ý:

Địa chỉ LCD I2C có thể khác nhau tùy theo từng nhà sản xuất. Trong code, chúng tôi sử dụng địa chỉ 0x27 được chỉ định bởi nhà sản xuất DIYables

Các Bước Thực Hiện

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện đấu nối theo sơ đồ trên.
  • Kết nối board ESP32 với PC của bạn qua cáp micro USB
  • Mở Arduino IDE trên PC.
  • Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Nhấp vào biểu tượng Libraries ở thanh bên trái của Arduino IDE.
  • "DHT" vào ô tìm kiếm, sau đó tìm thư viện DHT sensor của Adafruit
  • Cài đặt thư viện bằng cách nhấp vào nút Install.
ESP32 dht sensor thư viện
  • Một cửa sổ xuất hiện yêu cầu bạn cài đặt các dependency cho thư viện
  • Cài đặt tất cả dependency cho thư viện bằng cách nhấp vào nút Install All.
ESP32 adafruit unified sensor thư viện
  • "LiquidCrystal I2C" vào ô tìm kiếm, sau đó tìm thư viện LiquidCrystal_I2C của Frank de Brabander
  • Nhấp vào nút Install để cài đặt thư viện LiquidCrystal_I2C.
ESP32 liquidcrystal i2c thư viện
  • Sao chép code trên và dán vào Arduino IDE.
  • Biên dịch và tải code lên board ESP32 bằng cách nhấp vào nút Upload trên Arduino IDE
  • Làm cho cảm biến lạnh hơn hoặc nóng hơn. Ví dụ, đặt cảm biến gần một cốc cà phê nóng
  • Xem kết quả trên LCD

Nếu LCD không hiển thị gì, hãy xem Khắc phục sự cố trên LCD I2C

Code ESP32 - Cảm Biến DHT22 - LCD I2C

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-temperature-humidity-sensor-lcd */ #include <DHT.h> #include <LiquidCrystal_I2C.h> #define DHT_SENSOR_PIN 23 // ESP32 pin GPIO23 connected to DHT22 sensor #define DHT_SENSOR_TYPE DHT22 LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows DHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE); void setup() { dht_sensor.begin(); // initialize the DHT sensor lcd.init(); // initialize the lcd lcd.backlight(); // open the backlight } void loop() { float humi = dht_sensor.readHumidity(); // read humidity float tempC = dht_sensor.readTemperature(); // read temperature lcd.clear(); // check whether the reading is successful or not if (isnan(tempC) || isnan(humi)) { lcd.setCursor(0, 0); lcd.print("Failed"); } else { lcd.setCursor(0, 0); // display position lcd.print("Temp: "); lcd.print(tempC); // display the temperature lcd.print("°C"); lcd.setCursor(0, 1); // display position lcd.print("Humi: "); lcd.print(humi); // display the humidity lcd.print("%"); } // wait a 2 seconds between readings delay(2000); }

Hai đoạn code trên chỉ khác nhau một dòng.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Bình Luận