#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"

// Cấu hình DHT
#define DHTPIN 4         // GPIO4 cho cảm biến DHT
#define DHTTYPE DHT11    // Hoặc DHT22 nếu bạn sử dụng cảm biến DHT22
DHT dht(DHTPIN, DHTTYPE);

// Cấu hình LED
#define LEDPIN 5         // GPIO5 cho đèn LED

// Thông tin WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";

// URL API server
String serverNameDHT = "https://ozfihfqi5i.sharedwithexpose.com/ptiot/dht_history.php";
String serverNameLED = "https://ozfihfqi5i.sharedwithexpose.com/ptiot/led_history.php";

void setup() {
  Serial.begin(115200);
  dht.begin();
  pinMode(LEDPIN, OUTPUT);

  // Kết nối WiFi
  Serial.print("Connecting to WiFi");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected!");

  delay(2000); // Thời gian khởi động cảm biến
}

void loop() {
  // Đọc dữ liệu từ cảm biến DHT
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // Kiểm tra dữ liệu hợp lệ
  if (isnan(temperature) || isnan(humidity)) {
      Serial.println("Failed to read from DHT sensor!");
      return; // Không gửi dữ liệu nếu cảm biến trả về lỗi
  }

  Serial.printf("Temp: %.2f°C, Humidity: %.2f%%\n", temperature, humidity);

  // Gửi dữ liệu cảm biến DHT lên server
  HTTPClient httpDHT;
  String urlDHT = serverNameDHT + "?temperature=" + String(temperature) + "&humidity=" + String(humidity);
  httpDHT.begin(urlDHT);
  int httpResponseCodeDHT = httpDHT.GET();
  if (httpResponseCodeDHT > 0) {
      Serial.println("DHT Data sent successfully!");
  } else {
      Serial.println("Error sending DHT data.");
  }
  httpDHT.end();

  // Lấy trạng thái LED từ server và điều khiển
  HTTPClient httpLED;
  httpLED.begin(serverNameLED);
  int httpResponseCodeLED = httpLED.GET();
  if (httpResponseCodeLED > 0) {
      String payload = httpLED.getString();
      Serial.println("Server Response: " + payload);

      if (payload.indexOf("ON") >= 0) {
          digitalWrite(LEDPIN, HIGH); // Bật đèn
          Serial.println("LED is ON");
      } else if (payload.indexOf("OFF") >= 0) {
          digitalWrite(LEDPIN, LOW); // Tắt đèn
          Serial.println("LED is OFF");
      }
  } else {
      Serial.println("Error getting LED state from server.");
  }
  httpLED.end();

  delay(5000); // Gửi và kiểm tra mỗi 5 giây
}