#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// Setting Awal MQTT
String mqttServer = "broker.emqx.io";
int mqttPort = 1883;
String myClientID = "001";
String Topic_1 = "iqbal/iot/2024";
//Membuat Object MQTT Client dan Jenis Koneksi
WiFiClient wifi;
PubSubClient mqttClient(wifi);
#define PIN_TRIG 27
#define PIN_ECHO 26
// Sensor DHT
#define DHTPIN 25 // Pin data DHT
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT11 atau DHT22 atau DHT21)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
WiFi.mode(WIFI_STA); // Agar ESP32 menjadi mode Station
WiFi.begin("Wokwi-GUEST", ""); // Meminta ESP untuk connect
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println("WiFi connected");
// Memerintahkan EPS untuk tahu alamat broker
mqttClient.setServer(mqttServer.c_str(), mqttPort);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
dht.begin();
}
void loop() {
// put your main code here, to run repeatedly:
if (mqttClient.connected()) {
//memulai sensor jarak
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
//menghitung jarak
int duration = pulseIn(PIN_ECHO, HIGH);
int jarak = (duration / 58);
// Membaca data suhu dan kelembaban dari sensor DHT
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Mengecek apakah pembacaan suhu dan kelembaban berhasil
if (isnan(temperature) || isnan(humidity)) {
Serial.println("gagal membaca sensor DHT");
return;
}
// Membuat string untuk pesan yang akan dikirimkan ke MQTT
String message = "Jarak yang terukur adalah: " + String(jarak) + " cm. Suhu: " + String(temperature) + "°C, Kelembaban: " + String(humidity) + "%";
// Mengirimkan pesan ke broker MQTT
mqttClient.publish(Topic_1.c_str(), message.c_str());
Serial.println("Data terkirim: " + message);
delay(1000); //kecepatan kirim
}
else {
// Jika koneksi ke broker MQTT terputus, coba untuk terhubung kembali
reconnect();
}
}
void reconnect() {
// Loop sampai terkoneksi kembali ke broker MQTT
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection...");
// Buat nama klien unik dengan menggunakan ID klien ditambah waktu
String clientId = "ESP32Client-" + String(myClientID) + String(random(0xffff), HEX);
// Coba terkoneksi ke broker MQTT
if (mqttClient.connect(clientId.c_str())) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" try again in 5 seconds");
// Tunggu 5 detik sebelum mencoba kembali
delay(5000);
}
}
}