#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// Informasi jaringan Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Informasi broker MQTT
const char* mqtt_server = "mqtt-dashboard.com";
const int mqtt_port = 1883;
// Pin DHT22
#define DHTPIN 4 // Ganti dengan pin data DHT22 yang terhubung ke ESP32
#define DHTTYPE DHT22
// Objek DHT, WiFi, dan MQTT Client
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
// Callback untuk menangani pesan yang diterima
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Pesan diterima di topic: ");
Serial.print(topic);
Serial.print(". Pesan: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
// Fungsi untuk menghubungkan ke broker MQTT
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT...");
if (client.connect("ESP32Client")) { // Client ID unik
Serial.println("Berhasil terhubung!");
// Langganan ke topic jika diperlukan
client.subscribe("sisdig/24/testing");
} else {
Serial.print("Gagal, rc=");
Serial.print(client.state());
Serial.println(" Coba lagi dalam 5 detik...");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
// Hubungkan ke Wi-Fi
Serial.println("Menghubungkan ke Wi-Fi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nTerhubung ke Wi-Fi!");
Serial.print("Alamat IP ESP32: ");
Serial.println(WiFi.localIP());
// Inisialisasi DHT sensor
dht.begin();
// Hubungkan ke broker MQTT
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
// Pastikan ESP32 tetap terhubung ke MQTT
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
// Membaca data dari sensor DHT22
static unsigned long lastMsg = 0;
unsigned long now = millis();
if (now - lastMsg > 1000) { // Kirim data setiap 1 detik (1000 ms)
lastMsg = now;
float suhu = dht.readTemperature(); // Membaca suhu dalam Celsius
float kelembapan = dht.readHumidity(); // Membaca kelembapan
// Cek apakah data valid
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca dari DHT sensor!");
return;
}
// Tampilkan di Serial Monitor
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print("°C, Kelembapan: ");
Serial.print(kelembapan);
Serial.println("%");
// Kirim data ke broker MQTT
String suhuStr = String(suhu);
String kelembapanStr = String(kelembapan);
client.publish("sisdig/24/sensor/suhu", suhuStr.c_str());
client.publish("sisdig/24/sensor/kelembapan", kelembapanStr.c_str());
}
}