#include <DHT.h>
#include <WiFi.h>
#include <PubSubClient.h>
// Ganti dengan kredensial WiFi Anda
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Ganti dengan kredensial MQTT Anda
const char* mqtt_server = "broker.emqx.io"; // Contoh broker MQTT
const char* mqtt_topic_temp = "sensor/dht22/temperature"; // Topik untuk suhu
const char* mqtt_topic_hum = "sensor/dht22/humidity"; // Topik untuk kelembapan
// Inisialisasi DHT
#define DHTPIN 4 // Pin yang digunakan untuk DHT22
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
// Menghubungkan ke WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Menghubungkan ke broker MQTT
client.setServer(mqtt_server, 1883);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Membaca suhu dan kelembapan
float h = dht.readHumidity();
float t = dht.readTemperature();
// Memeriksa apakah pembacaan gagal dan keluar lebih awal (NaN)
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Mengirim data suhu ke broker MQTT
client.publish(mqtt_topic_temp, String(t).c_str());
// Mengirim data kelembapan ke broker MQTT
client.publish(mqtt_topic_hum, String(h).c_str());
// Menunggu beberapa detik sebelum pembacaan berikutnya
delay(2000);
}
void reconnect() {
// Loop hingga terhubung kembali
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Mencoba untuk menghubungkan
if (client.connect("DHT22Client")) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" trying again in 5 seconds");
delay(5000);
}
}
}