//2021230022
//Khalingga Bintang Maulia Agustian
//Teknologi Informasi
//Kamis 02 Mei 2024
//UTS PLatform IoT
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <ArduinoJson.h> // Tambahkan library ArduinoJson untuk membuat JSON
// Konfigurasi pin
const int DHT_PIN = 15; // Pin untuk DHT22
const int POT_PIN = 34; // Pin untuk Potentiometer
DHTesp dhtSensor; // Inisialisasi objek sensor DHT22
// Ganti dengan kredensial Wi-Fi Anda
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Ganti dengan kredensial broker MQTT Anda
const char* mqtt_server = "test.mosquitto.org";
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "mqtt-explorer-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("Connected");
// Publish a welcome message
client.publish("Raqhib/Welcome", "ESP32 Connected to MQTT Broker");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Set up potentiometer pin
pinMode(POT_PIN, INPUT);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now - lastMsg > 2000) { // Kirim data setiap 2 detik
lastMsg = now;
// Membaca data dari sensor DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temperature = data.temperature;
float humidity = data.humidity;
int potentiometerValue = analogRead(POT_PIN); // Membaca nilai dari potentiometer
// Membuat objek JSON
DynamicJsonDocument doc(1024);
doc["temperature"] = temperature;
doc["humidity"] = humidity;
doc["potentiometer"] = potentiometerValue;
String jsonString;
serializeJson(doc, jsonString);
// Mencetak data ke serial monitor
Serial.println("Sending data to MQTT broker:");
Serial.println(jsonString);
// Mengirim data JSON ke broker MQTT
client.publish("Raqhib/SensorData", jsonString.c_str()); // Ganti dengan topik yang sesuai
}
}
//Program ini bertujuan untuk membaca suhu dan kelembaban menggunakan sensor DHT22,
//kemudian mengirimkan data tersebut ke server MQTT. Pertama, program akan terhubung
//ke jaringan WiFi yang sudah ditentukan, lalu mencoba terhubung ke server MQTT.
//Setelah berhasil terhubung, program akan terus membaca data dari sensor dan
//mengirimkannya ke server MQTT dengan interval waktu tertentu. Data suhu dan
//kelembaban dikirim dengan menggunakan topik yang telah ditentukan sebelumnya.