Phần 2: Kết nối và lập trình cảm biến
1. Giới thiệu về các cảm biến cần sử dụng: DHT11/DHT22, cảm biến độ ẩm đất, cảm biến ánh sáng BH1750, cảm biến mưa, 2. Sơ đồ kết nối các cảm biến với ESP32, 3. Lập trình để đọc dữ liệu từ các cảm biến, 4. Kiểm tra và hiển thị dữ liệu cảm biến qua Serial Monitor, 5. Xử lý lỗi và khắc phục sự cố.
Phần 2: Kết nối và lập trình cảm biến
1. Giới thiệu về các cảm biến cần sử dụng
Trong dự án trạm thời tiết IoT cho trang trại, chúng ta sẽ sử dụng các cảm biến sau để đo các thông số môi trường:
- Cảm biến nhiệt độ và độ ẩm DHT11/DHT22: Cảm biến này có khả năng đo nhiệt độ và độ ẩm không khí với độ chính xác cao. DHT22 có độ chính xác tốt hơn và dải đo rộng hơn so với DHT11.
- Cảm biến độ ẩm đất: Cảm biến này giúp đo độ ẩm của đất, giúp xác định tình trạng ẩm ướt của đất, từ đó có thể điều chỉnh tưới nước cho cây trồng một cách hợp lý.
- Cảm biến ánh sáng BH1750: Cảm biến này có khả năng đo cường độ ánh sáng với độ chính xác cao, giúp theo dõi điều kiện ánh sáng cho cây trồng.
- Cảm biến mưa: Cảm biến này giúp phát hiện sự có mặt của nước, từ đó có thể cảnh báo khi trời mưa, giúp bảo vệ trang trại khỏi các tác động bất lợi.
2. Sơ đồ kết nối các cảm biến với ESP32
Dưới đây là sơ đồ kết nối các cảm biến với ESP32-S3:
DHT11/DHT22:
- VCC -> 3.3V
- GND -> GND
- DATA -> GPIO 23
Cảm biến độ ẩm đất:
- VCC -> 3.3V
- GND -> GND
- SIGNAL -> GPIO 34
BH1750:
- VCC -> 3.3V
- GND -> GND
- SDA -> GPIO 21
- SCL -> GPIO 22
Cảm biến mưa:
- VCC -> 3.3V
- GND -> GND
- SIGNAL -> GPIO 35
Chúng ta sẽ sử dụng các chân GPIO của ESP32 để kết nối các cảm biến này. Hãy chắc chắn rằng bạn đã kết nối đúng các chân trước khi tiến hành lập trình.
3. Lập trình để đọc dữ liệu từ các cảm biến
Để lập trình đọc dữ liệu từ các cảm biến, chúng ta sẽ sử dụng thư viện Arduino cho từng cảm biến. Dưới đây là mã nguồn mẫu để đọc dữ liệu từ các cảm biến:
#include <DHT.h>
#include <Wire.h>
#include <BH1750.h>
#define DHTPIN 23
#define DHTTYPE DHT22
#define SOIL_MOISTURE_PIN 34
#define RAIN_SENSOR_PIN 35
DHT dht(DHTPIN, DHTTYPE);
BH1750 lightSensor;
void setup() {
Serial.begin(115200);
dht.begin();
lightSensor.begin();
}
void loop() {
// Đọc dữ liệu từ cảm biến DHT
float h = dht.readHumidity();
float t = dht.readTemperature();
// Đọc dữ liệu từ cảm biến độ ẩm đất
int soilMoisture = analogRead(SOIL_MOISTURE_PIN);
// Đọc dữ liệu từ cảm biến ánh sáng
uint16_t lightLevel = lightSensor.readLightLevel();
// Đọc dữ liệu từ cảm biến mưa
int rainSensor = digitalRead(RAIN_SENSOR_PIN);
// Hiển thị dữ liệu lên Serial Monitor
Serial.print("Nhiệt độ: ");
Serial.print(t);
Serial.print(" °C, Độ ẩm: ");
Serial.print(h);
Serial.print(" %, Độ ẩm đất: ");
Serial.print(soilMoisture);
Serial.print(", Cường độ ánh sáng: ");
Serial.print(lightLevel);
Serial.print(", Cảm biến mưa: ");
Serial.println(rainSensor == HIGH ? "Không mưa" : "Có mưa");
delay(2000); // Chờ 2 giây trước khi đọc lại
}
4. Kiểm tra và hiển thị dữ liệu cảm biến qua Serial Monitor
Sau khi tải mã nguồn lên ESP32, bạn hãy mở Serial Monitor trong Arduino IDE để kiểm tra dữ liệu từ các cảm biến. Đảm bảo rằng tốc độ truyền dữ liệu (baud rate) được đặt là 115200.
Khi ESP32 chạy, bạn sẽ thấy các giá trị nhiệt độ, độ ẩm, độ ẩm đất, cường độ ánh sáng và trạng thái cảm biến mưa được hiển thị liên tục trên Serial Monitor. Nếu có vấn đề với việc đọc dữ liệu, hãy kiểm tra lại kết nối của các cảm biến.
5. Xử lý lỗi và khắc phục sự cố
Trong quá trình lập trình và kết nối, có thể xảy ra một số lỗi như không đọc được dữ liệu, dữ liệu không chính xác hoặc không hiển thị trên Serial Monitor. Hãy kiểm tra kết nối, đảm bảo các chân GPIO được kết nối đúng và cảm biến được cấp nguồn đầy đủ.
Dưới đây là một số lỗi thường gặp và cách khắc phục:
- Dữ liệu từ cảm biến DHT không chính xác: Kiểm tra xem cảm biến có được kết nối đúng và có hoạt động không. Có thể thử thay đổi giữa DHT11 và DHT22 nếu có.
- Cảm biến độ ẩm đất không đọc được: Đảm bảo rằng cảm biến độ ẩm đất được gắn vào đất ẩm và không bị bám bẩn.
- Cảm biến ánh sáng BH1750 không hoạt động: Kiểm tra kết nối SDA và SCL, đảm bảo rằng chúng được kết nối đúng với ESP32.
- Cảm biến mưa không phản hồi: Đảm bảo rằng cảm biến mưa được lắp đặt đúng cách và không bị che khuất.
Đến đây, bạn đã hoàn thành việc kết nối và lập trình các cảm biến cho trạm thời tiết IoT của mình. Hãy tiếp tục khám phá và tối ưu hóa hệ thống của bạn để có những dữ liệu chính xác hơn!
