#include <MQTT.h>
#include <WiFi.h>
#include <NusabotSimpleTimer.h>
#include <DHT.h>
WiFiClient net;
MQTTClient client;
NusabotSimpleTimer timer;
#define DHTPIN 25
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
const int pinPot = 32;
int readPot;
int lastReadPot = 0;
float lastReadSuhu = 0;
float lastReadKelembaban = 0;
void setup() {
Serial.begin(9600);
dht.begin();
WiFi.begin(ssid, pass);
pinMode(pinPot, INPUT);
client.begin("broker.emqx.io", net);
connect();
// Set interval sekali saat setup
timer.setInterval(2000, []() {
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
readPot = analogRead(pinPot);
// Cek apakah data suhu valid
if (!isnan(suhu) && suhu != lastReadSuhu) {
lastReadSuhu = suhu;
publish(String("Suhu: ") + String(suhu));
}
// Cek apakah data kelembaban valid
if (!isnan(kelembaban) && kelembaban != lastReadKelembaban) {
lastReadKelembaban = kelembaban;
publish(String("Kelembaban: ") + String(kelembaban));
}
// Cek apakah pembacaan potensiometer berubah
if (readPot != lastReadPot) {
lastReadPot = readPot;
publish(String("Potensiometer: ") + String(readPot));
}
});
}
void loop() {
client.loop(); // Pastikan client MQTT tetap aktif
timer.run(); // Jalankan fungsi timer setiap loop
delay(10);
// Periksa apakah client terputus dari broker, jika ya maka coba sambungkan kembali
if (!client.connected()) {
connect();
}
}
void connect() {
Serial.print("Menghubungkan ke WiFi ");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println(" Terhubung ke WiFi");
client.setWill("ruang/fadhil/rabbani", "Belum terhubung", true, 1);
while (!client.connect("unix id")) {
Serial.print(".");
delay(500);
}
Serial.println("Terhubung ke broker MQTT");
}
void publish(String text) {
client.publish("ruang/fadhil/rabbani", text, true, 1);
}