#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* FIREBASE_HOST = "tt-iot-qa-quy-2024-default-rtdb.asia-southeast1.firebasedatabase.app";
const char* FIREBASE_AUTH = "8sZCBNo9TvQRofwj1rx3yXsNXSI2";
const char* databaseURL = "https://tt-iot-qa-quy-2024-default-rtdb.asia-southeast1.firebasedatabase.app/nk1.json";
#define DHT_PIN 4
#define DEN_PIN 13
#define QUAT_PIN 14
#define VOI_NUOC_PIN 26
DHT dht(DHT_PIN, DHT22);
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Connecting to WiFi...");
delay(1000);
}
Serial.println("Connected to WiFi");
pinMode(DEN_PIN, OUTPUT);
pinMode(QUAT_PIN, OUTPUT);
pinMode(VOI_NUOC_PIN, OUTPUT);
dht.begin();
}
void loop() {
bool Pest = digitalRead(27);
float doAm = dht.readHumidity();
float nhietDo = dht.readTemperature();
if (!isnan(doAm) && !isnan(nhietDo)) {
Serial.printf("do am: %.2f%% , nhiet do: %.2fC, con trung: %d\n", doAm, nhietDo, Pest);
String data = String("{\"nhiet do\":") + String(nhietDo) + String(",\"do am\":") + String(doAm) + String(",\"con trung\":") + (Pest ? "true" : "false") + String("}");
// Update device status to Firebase
updateDeviceStatus(data);
} else {
Serial.println("Error: Failed to read sensor data!");
}
readDeviceStatus();
// Delay for 30 seconds before next iteration
delay(30000);
}
void updateDeviceStatus(String data) {
HTTPClient http;
http.begin(databaseURL);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", FIREBASE_AUTH);
int httpResponseCode = http.PATCH(data);
if (httpResponseCode == HTTP_CODE_OK) {
Serial.println("Data updated successfully to Firebase");
} else {
Serial.print("Error updating data to Firebase. HTTP error code: ");
Serial.println(httpResponseCode);
}
http.end();
}
void readDeviceStatus() {
HTTPClient http;
http.begin(databaseURL);
http.addHeader("Authorization", FIREBASE_AUTH);
int httpResponseCode = http.GET();
if (httpResponseCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println("Response from Firebase:");
Serial.println(payload);
// Parse JSON
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
// Get status of devices
bool denStatus = doc["Den"]["status"];
bool quatStatus = doc["Quat"]["status"];
bool voiNuocStatus = doc["Voi nuoc"]["status"];
// Print device statuses
Serial.println("Parsed JSON Data:");
Serial.print("Den Status: ");
Serial.println(denStatus ? "ON" : "OFF");
Serial.print("Quat Status: ");
Serial.println(quatStatus ? "ON" : "OFF");
Serial.print("Voi Nuoc Status: ");
Serial.println(voiNuocStatus ? "ON" : "OFF");
// Control pins based on status
digitalWrite(DEN_PIN, denStatus ? HIGH : LOW);
digitalWrite(QUAT_PIN, quatStatus ? HIGH : LOW);
digitalWrite(VOI_NUOC_PIN, voiNuocStatus ? HIGH : LOW);
} else {
Serial.print("Error getting device status from Firebase. HTTP error code: ");
Serial.println(httpResponseCode);
}
http.end();
}