#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// ===================== KONFIGURASI =====================
#define DHTPIN 4 // Pin data DHT22 (ubah sesuai wiring)
#define DHTTYPE DHT22
const char* ssid = "Wokwi-GUEST"; // Ganti dengan SSID WiFi
const char* password = ""; // Ganti dengan password WiFi
const char* mqtt_server = "test.mosquitto.org";
const int mqtt_port = 1883;
const char* mqtt_client_id = "esp32-dht22-001"; // Harus unik
// Topic MQTT
const char* topic_suhu = "esp32/azrial/suhu";
const char* topic_kelembaban = "esp32/azrial/kelembaban";
const char* topic_status = "esp32/azrial/status";
// Interval kirim data (ms)
const long interval = 5000; // 5 detik
// =======================================================
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long previousMillis = 0;
// ------------------- Koneksi WiFi -------------------
void setupWiFi() {
Serial.print("Menghubungkan ke WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi terhubung!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
// ------------------- Callback MQTT -------------------
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Pesan masuk [");
Serial.print(topic);
Serial.print("]: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
// ------------------- Koneksi MQTT -------------------
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT broker...");
if (client.connect(mqtt_client_id)) {
Serial.println("Terhubung!");
client.publish(topic_status, "ESP32 Online");
// Subscribe jika perlu menerima perintah
// client.subscribe("esp32/dht22/perintah");
} else {
Serial.print("Gagal, rc=");
Serial.print(client.state());
Serial.println(" - Coba lagi dalam 3 detik...");
delay(3000);
}
}
}
// ------------------- Setup -------------------
void setup() {
Serial.begin(115200);
delay(100);
dht.begin();
setupWiFi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
// ------------------- Loop -------------------
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
if (isnan(suhu) || isnan(kelembaban)) {
Serial.println("Gagal membaca sensor DHT22!");
client.publish(topic_status, "ERROR: Sensor DHT22 gagal dibaca");
return;
}
// Konversi ke string
char bufSuhu[10], bufKelembaban[10];
dtostrf(suhu, 4, 2, bufSuhu);
dtostrf(kelembaban, 4, 2, bufKelembaban);
// Publish ke MQTT
client.publish(topic_suhu, bufSuhu);
client.publish(topic_kelembaban, bufKelembaban);
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" °C | Kelembaban: ");
Serial.print(kelembaban);
Serial.println(" %");
}
}Loading
esp32-devkit-c-v4
esp32-devkit-c-v4