#include <DHT.h>
#include <WiFi.h>
#include <FirebaseESP32.h>
#define FIREBASE_HOST "https://esp32-dht22-c7861-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "DFMonEvRjYSO7Ynf9mNFEdu8Cc25XSCJi3pD4P7O"
#define DHTPIN 15 // Chân dữ liệu của DHT11, với NodeMCU chân D5 GPIO là 14
#define DHTTYPE DHT22 // DHT22
#define LED1 18
#define BUTTON 14
TaskHandle_t ledTaskHandle;
TaskHandle_t buttonTaskHandle;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
DHT dht(DHTPIN, DHTTYPE);
FirebaseData fbdo;
void ledTask(void* pvParameters) {
TickType_t delay = 100; // Initial delay of 100 milliseconds
while (1) {
digitalWrite(LED1, HIGH); // Turn on the LED
vTaskDelay(delay / portTICK_PERIOD_MS); // Delay for the specified time
digitalWrite(LED1, LOW); // Turn off the LED
vTaskDelay(delay / portTICK_PERIOD_MS); // Delay for the specified time
}
}
void buttonTask(void* pvParameters) {
TickType_t delay = 100; // Initial delay of 100 milliseconds
while (1) {
// Check the button state
if (digitalRead(BUTTON) == HIGH) {
// Button is pressed, so change the delay to 10 milliseconds
delay = 10;
} else {
// Button is not pressed, so revert to the default delay of 100 milliseconds
delay = 100;
}
vTaskDelay(100 / portTICK_PERIOD_MS); // Poll the button state every 100 milliseconds
}
void setup() {
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(BUTTON, INPUT);
delay(100);
WiFi.begin(ssid, pass);
Serial.print("Connecting ...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("Connected !!!");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); delay(100);
dht.begin(); delay(100);
xTaskCreatePinnedToCore(ledTask, "LED Task", 2048, NULL, 1, &ledTaskHandle, 0);
xTaskCreatePinnedToCore(buttonTask, "Button Task", 2048, NULL, 1, &buttonTaskHandle, 1);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature(); // Đọc nhiệt độ theo độ C
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temp: ");
Serial.print(t);
Serial.print(" °C ");
Serial.print("Humi: ");
Serial.print(h);
Serial.println(" %");
Firebase.setFloat(fbdo, "TEMP", t);
Firebase.setFloat(fbdo, "HUMI", h);
delay(500);
}