#include <WiFi.h>
#include <MQTTClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// WiFi dan MQTT
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
WiFiClient net;
MQTTClient client;
// LCD dan Sensor
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int soilSensorPin = 34; // Pin sensor kelembaban tanah
int threshold = 2600; // Ambang batas kelembaban
void connect() {
Serial.print("Menghubungkan ke WiFi...");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("Terhubung ke WiFi!");
client.begin("system-internet-of-things.cloud.shiftr.io", net);
Serial.print("Menghubungkan ke broker MQTT...");
while (!client.connect("ESP32Publisher", "system-internet-of-things", "LqSqWk5Vox8oxlyF")) {
Serial.print(".");
delay(1000);
}
Serial.println("Terhubung ke broker MQTT!");
client.publish("soil/status", "online"); // Kirim status online
}
void setup() {
Wire.begin(23, 22);
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(soilSensorPin, INPUT);
connect(); // Hubungkan WiFi dan MQTT
}
void loop() {
client.loop(); // Jalankan proses MQTT
// Baca data kelembaban tanah
int soilMoistureValue = analogRead(soilSensorPin);
// Tampilkan kelembaban tanah di LCD
lcd.setCursor(0, 0);
lcd.print("Soil: ");
lcd.print(soilMoistureValue);
// Kirim data kelembaban tanah ke topik MQTT
client.publish("soil/soilMoisture", String(soilMoistureValue));
// Kontrol pompa dan kirim perintah ke topik MQTT
if (soilMoistureValue < threshold) {
client.publish("soil/pump", "on"); // Kirim pesan untuk menyalakan pompa
} else {
client.publish("soil/pump", "off"); // Kirim pesan untuk mematikan pompa
}
// Jika terputus, lakukan reconnect
if (!client.connected()) {
connect();
}
delay(1000); // Delay 1 detik
}