// Bài tập 5: Gửi dữ liệu nhiệt độ và độ ẩm định kỳ qua UART và điều khiển
// LED bằng UART (sử dụng DHT22)
// ESP32 sẽ gửi dữ liệu nhiệt độ và độ ẩm từ DHT22 qua UART định kỳ và nhận lệnh từ UART
// để bật/tắt LED.
// Yêu cầu:
// • - Đọc nhiệt độ và độ ẩm từ DHT22 và gửi dữ liệu định kỳ qua UART.
// • - Nhận lệnh từ UART (ví dụ: "ON"/"OFF") để điều khiển trạng thái của LED.
#include <DHT.h>
#define DHTPIN 12
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int ledPin = 4; // Chân kết nối LED
unsigned long previousMillis = 0;
const long interval = 2000; // Gửi dữ liệu định kỳ sau mỗi 2 giây
bool ledState = false; // Trạng thái của LED (bật/tắt)
void setup() {
pinMode(ledPin, OUTPUT); // Cài đặt chân LED làm OUTPUT
Serial.begin(115200);
dht.begin();
}
void loop() {
unsigned long currentMillis = millis();
// Gửi dữ liệu nhiệt độ và độ ẩm định kỳ
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print("%, Temperature: ");
Serial.print(t);
Serial.println("C");
}
// Kiểm tra nếu có dữ liệu từ Serial
if (Serial.available()) {
String command = Serial.readStringUntil('\n'); // Đọc lệnh từ Serial
// Xử lý lệnh từ Serial
if (command == "ON") {
ledState = true;
digitalWrite(ledPin, ledState); // Bật LED
Serial.println("LED ON");
} else if (command == "OFF") {
ledState = false;
digitalWrite(ledPin, ledState); // Tắt LED
Serial.println("LED OFF");
}
}
}