#define BLYNK_TEMPLATE_ID "TMPL6bXkVyulu"
#define BLYNK_TEMPLATE_NAME "Test Temp And Humid"
#define BLYNK_AUTH_TOKEN "xfqDA1aAatuEomggNGyg403UZ8UGnBFz" // Thay bằng Auth Token của bạn
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Thông tin WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Cấu hình DHT
#define DHTPIN 4 // Chân kết nối cảm biến DHT22
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Cấu hình chân LED RGB (sử dụng analogWrite cho PWM)
#define LED_R_PIN 17 // Chân GPIO hỗ trợ PWM (màu đỏ)
#define LED_G_PIN 16 // Chân GPIO hỗ trợ PWM (màu xanh lá)
#define LED_B_PIN 2 // Chân GPIO hỗ trợ PWM (màu xanh dương)
// Cấu hình chân relay
#define RELAY_PIN 12 // Chân điều khiển relay (bật/tắt quạt)
// Kết nối Wi-Fi
BLYNK_WRITE(V2) { // Điều khiển bật/tắt quạt từ Blynk
int fanControl = param.asInt(); // 0 hoặc 1 (tắt hoặc bật quạt)
if (fanControl == 1) {
// Khi bật quạt, điều khiển LED RGB sáng lên (mô phỏng quạt bật)
analogWrite(LED_R_PIN, 255); // Màu đỏ (tùy chọn)
analogWrite(LED_G_PIN, 255); // Màu xanh lá
analogWrite(LED_B_PIN, 255); // Màu xanh dương
digitalWrite(RELAY_PIN, HIGH); // Bật relay (quạt)
Blynk.virtualWrite(V2, 1); // Cập nhật trạng thái Blynk
Serial.println("Fan On");
} else {
// Khi tắt quạt, tắt LED RGB (mô phỏng quạt tắt)
analogWrite(LED_R_PIN, 0); // Tắt màu đỏ
analogWrite(LED_G_PIN, 0); // Tắt màu xanh lá
analogWrite(LED_B_PIN, 0); // Tắt màu xanh dương
digitalWrite(RELAY_PIN, LOW); // Tắt relay (quạt)
Blynk.virtualWrite(V2, 0); // Cập nhật trạng thái Blynk
Blynk.virtualWrite(V3, 0); // Đặt tốc độ quạt về 0 trên Blynk
Serial.println("Fan Off");
}
}
BLYNK_WRITE(V3) { // Điều khiển tốc độ quạt (điều chỉnh độ sáng LED RGB)
int speed = param.asInt(); // 0 đến 255 (tốc độ quạt)
// Nếu tốc độ là 0, tắt quạt và đặt trạng thái Blynk về 0
if (speed == 0) {
analogWrite(LED_R_PIN, 0); // Tắt màu đỏ
analogWrite(LED_G_PIN, 0); // Tắt màu xanh lá
analogWrite(LED_B_PIN, 0); // Tắt màu xanh dương
digitalWrite(RELAY_PIN, LOW); // Tắt relay (quạt)
Blynk.virtualWrite(V2, 0); // Cập nhật trạng thái quạt tắt
} else {
// Điều chỉnh màu sắc của LED tùy thuộc vào tốc độ
analogWrite(LED_R_PIN, 255 - speed); // Điều chỉnh màu đỏ (giảm sáng khi tăng tốc độ)
analogWrite(LED_G_PIN, speed); // Điều chỉnh màu xanh lá (tăng sáng khi tăng tốc độ)
analogWrite(LED_B_PIN, 255 - speed); // Điều chỉnh màu xanh dương (giảm sáng khi tăng tốc độ)
digitalWrite(RELAY_PIN, HIGH); // Bật relay (quạt)
}
// Cập nhật tốc độ quạt lên Blynk
Blynk.virtualWrite(V3, speed); // Cập nhật trạng thái tốc độ quạt
}
void setup() {
Serial.begin(115200);
// Kết nối Wi-Fi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("WiFi connected");
// Kết nối Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Khởi tạo cảm biến DHT
dht.begin();
// Cấu hình PWM cho các chân LED
pinMode(LED_R_PIN, OUTPUT);
pinMode(LED_G_PIN, OUTPUT);
pinMode(LED_B_PIN, OUTPUT);
// Cấu hình chân relay
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Đảm bảo relay ở trạng thái tắt khi khởi động
}
void loop() {
// Cập nhật nhiệt độ và độ ẩm mỗi 2 giây
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C");
Serial.print("\tHumidity: ");
Serial.print(humidity);
Serial.println(" %");
// Cập nhật giá trị nhiệt độ và độ ẩm lên Blynk
Blynk.virtualWrite(V0, temperature); // Gửi nhiệt độ lên Virtual Pin V0
Blynk.virtualWrite(V1, humidity); // Gửi độ ẩm lên Virtual Pin V1
}
Blynk.run(); // Chạy Blynk
delay(2000); // Đọc cảm biến mỗi 2 giây
}