#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

#define DHTPIN 4        // Pin yang terhubung dengan DHT22
#define DHTTYPE DHT22   // Tipe sensor DHT22

const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com"; // Server MQTT publik

WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);

long lastMsg = 0;
char msg[50];

void setup() {
  Serial.begin(115200);
  dht.begin();

  // Connect to WiFi
  setup_wifi();

  // Connect to MQTT broker
  client.setServer(mqtt_server, 1883);
}

void setup_wifi() {
  delay(10);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
}

void reconnect() {
  while (!client.connected()) {
    if (client.connect("ESP32Client")) {
      Serial.println("Connected to MQTT broker");
    } else {
      delay(5000);
    }
  }
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  long now = millis();
  if (now - lastMsg > 2000) {  // Kirim data setiap 2 detik
    lastMsg = now;

    // Baca data dari DHT22
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // Buat format JSON
    String payload = "{\"temperature\":" + String(t) + ", \"humidity\":" + String(h) + "}";

    // Publish data ke topik MQTT
    client.publish("esp32/dht22", payload.c_str());
    Serial.println("Published: " + payload);
  }
}