#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHTPIN 4 // Pin data sensor DHT22 terhubung ke GPIO 4
#define DHTTYPE DHT22 // Tipe sensor DHT 22
DHT dht(DHTPIN, DHTTYPE);
// MQTT
const char* mqttServer = "broker.emqx.io"; // Alamat server MQTT
const int mqttPort = 1883; // Port server MQTT
const char* mqttUser = ""; // Nama pengguna MQTT (kosongkan jika tidak ada)
const char* mqttPassword = ""; // Kata sandi MQTT (kosongkan jika tidak ada)
const char* clientId = "Radz"; // ID klien MQTT
const char* ssid = "Wokwi-GUEST"; // SSID WiFi
const char* password = ""; // Kata sandi WiFi (kosongkan karena tidak diperlukan)
WiFiClient wifi;
PubSubClient mqttClient(wifi);
void setup() {
Serial.begin(9600);
// Inisialisasi sensor DHT
dht.begin();
// Setup WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
// Setup MQTT
mqttClient.setServer(mqttServer, mqttPort);
// Memulai koneksi ke MQTT broker
reconnectMQTT();
}
void loop() {
// Membaca suhu dari sensor DHT
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Mengantisipasi data yang dibaca sensor salah
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT!");
} else {
// Tampilkan suhu dan kelembaban di Serial Monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print("°C, Kelembaban: ");
Serial.print(humidity);
Serial.println("%");
// Kirim data suhu dan kelembaban ke topik MQTT
String topic1 = "radz/iot/sensor/suhu";
String topic2 = "radz/iot/sensor/kelembaban";
// Kirim data suhu ke topik MQTT
mqtt_publish(topic1, temperature);
// Kirim data kelembaban ke topik MQTT
mqtt_publish(topic2, humidity);
}
delay(5000); // Delay antara pengiriman data
}
void reconnectMQTT() {
// Loop sampai terhubung ke MQTT broker
while (!mqttClient.connected()) {
Serial.println("Connecting to MQTT..");
if (mqttClient.connect(clientId, mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT!");
} else {
Serial.print("Failed to Connect, Reconnecting..");
Serial.print(mqttClient.state());
delay(2000);
}
}
}
void mqtt_publish(String yourTopic, float sensorData){
char sensorDataString[8];
dtostrf(sensorData, 1, 2, sensorDataString);
mqttClient.publish(yourTopic.c_str(), sensorDataString);
Serial.print(yourTopic);
Serial.print(" ==> ");
Serial.println(sensorData);
}