#include <WiFi.h>
#include <MQTT.h>
#include <DHTesp.h>
const int pin_dht = 33;
const int soilSensorPin = 32; // Pin sensor kelembaban tanah
const char ssid[] = "Wokwi-GUEST"; // Ubah sesuai dengan SSID WiFi Anda
const char pass[] = ""; // Ubah sesuai dengan password WiFi Anda
WiFiClient net;
MQTTClient client;
DHTesp dhtSensor;
void publishDHT() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String temp = String(data.temperature);
String humid = String(data.humidity);
client.publish("okta/Suhu", temp, true, 1);
client.publish("okta/Kelembapan", humid, true, 1);
Serial.println("Published: " + temp + " °C, " + humid + " %");
}
void publishSoilMoisture() {
int soilMoistureValue = analogRead(soilSensorPin); // Membaca nilai dari sensor kelembaban tanah
int soilMoisturePercent = map(soilMoistureValue, 0, 4095, 0, 100); // Konversi nilai ke dalam persentase
String soilMoistureStr = String(soilMoisturePercent);
client.publish("okta/KelembabanTanah", soilMoistureStr, true, 1);
Serial.println("Published Soil Moisture: " + soilMoistureStr + " %");
}
void connect() {
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void connectMQTT() {
Serial.println("Connecting to MQTT...");
String clientId = "ESP32Client-" + String(random(0xffff), HEX); // Generate unique client ID
while (!client.connect(clientId.c_str())) { // Convert String to const char* using .c_str()
delay(1000);
Serial.print(".");
}
Serial.println("Connected to MQTT");
}
void setup() {
Serial.begin(115200);
dhtSensor.setup(pin_dht, DHTesp::DHT22); // Setup DHT22 sensor
WiFi.begin(ssid, pass); // Start WiFi connection
connect(); // Connect to WiFi
client.begin("broker.emqx.io", net); // Initialize MQTT client
connectMQTT(); // Connect to MQTT broker
}
void loop() {
publishDHT(); // Publish temperature and humidity data
publishSoilMoisture();
delay(5000);
if (!client.connected()) { // Reconnect if MQTT is disconnected
connectMQTT();
}
client.loop(); // Ensure MQTT client stays connected
}