#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 espClient;
PubSubClient mqttClient(espClient);
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
publishData("Suhu: " + String(temperature) + "°C, Kelembaban: " + String(humidity) + "%");
}
delay(5000); // Delay antara pengiriman data
}
void publishData(String data) {
if (!mqttClient.connected()) {
reconnectMQTT();
}
String topicDHT = "radz/iot/2024/data"; // Topik MQTT untuk data suhu dan kelembaban
mqttClient.publish(topicDHT.c_str(), data.c_str());
}
void reconnectMQTT() {
while (!mqttClient.connected()) {
Serial.println("Connecting to MQTT...");
if (mqttClient.connect(clientId, mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT");
}
else {
Serial.print("Failed with state ");
Serial.print(mqttClient.state());
delay(2000);
}
}
}