#include <MQTT.h>
#include <WiFi.h>
#include <NusabotSimpleTimer.h>
#include <DHT.h>
// Konstanta untuk DHT22
#define DHTPIN 15 // Pin yang terhubung ke sensor DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Pin untuk potensiometer
#define POTENTIOMETER_PIN 34 // Pin analog untuk potensiometer (misalnya pin 34)
WiFiClient net;
MQTTClient client;
NusabotSimpleTimer timer;
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
// Tambahkan username dan password untuk MQTT
const char mqttUser[] = "mountainrat662"; // Ganti dengan username MQTT
const char mqttPassword[] = "b0X48fxDejD3HhdU"; // Ganti dengan password MQTT
// Variabel untuk menyimpan nilai terakhir
float lastSuhu = NAN;
float lastKelembaban = NAN;
float lastPotVoltage = NAN;
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, pass);
// Tunggu hingga WiFi terhubung
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("Terhubung ke WiFi");
client.begin("mountainrat662.cloud.shiftr.io", net);
timer.setInterval(15000, publish);
// Inisialisasi DHT22
dht.begin();
connect();
}
void loop() {
client.loop();
timer.run();
if (!client.connected()) {
connect();
}
}
void connect() {
Serial.println("Menghubungkan ke broker MQTT");
// Set Last Will and Testament (LWT)
client.setWill("tes/status", "disconnected", true, 1);
// Cobalah untuk terhubung ke broker MQTT dengan username dan password
while (!client.connect("uniqueClientID", mqttUser, mqttPassword)) {
Serial.print(".");
delay(500);
}
// Publish pesan 'connected' setelah terhubung
client.publish("tes/status", "connected", true, 1);
Serial.println("Terhubung ke broker");
}
void publish() {
if (client.connected()) {
// Membaca suhu dan kelembaban dari sensor DHT22
float suhu = dht.readTemperature(); // Celsius
float kelembaban = dht.readHumidity();
// Membaca nilai dari potensiometer
int potValue = analogRead(POTENTIOMETER_PIN);
float potVoltage = potValue * (3.3 / 4095.0); // Konversi nilai ADC ke voltase
// Memeriksa jika pembacaan gagal
if (isnan(suhu) || isnan(kelembaban)) {
Serial.println("Gagal membaca dari sensor DHT22!");
return;
}
// Cek jika ada perubahan dari data sebelumnya
if (suhu != lastSuhu || kelembaban != lastKelembaban || potVoltage != lastPotVoltage) {
// Simpan nilai baru sebagai nilai terakhir
lastSuhu = suhu;
lastKelembaban = kelembaban;
lastPotVoltage = potVoltage;
// Format pesan sebagai string
String pesan = "Suhu: " + String(suhu) + " C, Kelembaban: " + String(kelembaban) + " %, Potensiometer: " + String(potVoltage) + " V";
// Menerbitkan pesan ke topik MQTT
client.publish("tes/1", pesan, true, 1);
Serial.println("Pesan diterbitkan: " + pesan);
} else {
Serial.println("Tidak ada perubahan, tidak menerbitkan pesan.");
}
} else {
Serial.println("Tidak terhubung ke broker, tidak bisa menerbitkan");
}
}