#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <string>
#include <ArduinoJson.h>
// Deklarasi LED
const int LED_PIN = 4;
// Deklarasi WIFI
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define MAX_CHARACTER 50
#define MQTT_SERVER "0.tcp.ap.ngrok.io"
// Deklarasi Server
char mqtt_topic[] = "jemuran";
int mqtt_port = 14790;
char clientId[50];
WiFiClient espClient;
PubSubClient client(espClient);
// Deklarasi Servo
Servo jemuran;
// deklarasi led (jemuran)
String notif;
// Deklarasi variabel LDR, Hujan, dan Status
int ldr, hujan;
bool status = false;
// Deklarasi Wifi
void setupWifi() {
Serial.print("Connecting [ ");
Serial.print(ssid);
Serial.println(" ]");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(5000);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.print("Terhubung ke ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("");
}
// Cek Mqtt Server
void setupMqtt() {
while (!client.connected()) {
Serial.println("Loading MQTT");
String idClient = "client-";
idClient += String(random(0xffff), HEX);
if (client.connect(idClient.c_str())) {
Serial.println("MQTT terhubung");
Serial.println();
client.publish(mqtt_topic, "Perangkat terhubung...");
client.publish(mqtt_topic, " ");
} else {
Serial.print("Gagal: ");
Serial.print(client.state());
Serial.println(" Mencoba lagi...");
delay(5000);
}
}
}
// Deklarasi Setup Data
void setup() {
Serial.begin(9600);
setupWifi();
client.setServer(MQTT_SERVER, mqtt_port);
if (!client.connected()) {
setupMqtt();
}
// Inisialisasi komponen
jemuran.attach(9); // Assuming the servo is connected to pin 9
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
ldr = map(analogRead(34), 0, 4096, 100, 0);
hujan = map(analogRead(35), 0, 4096, 0, 100);
Serial.print("Nilai LDR: ");
Serial.print(ldr);
Serial.print(" Nilai Hujan: ");
Serial.println(hujan);
char payload[50];
sprintf(payload, "Nilai LDR:%d, Nilai Hujan:%d", ldr, hujan);
if (status == true) {
jemuran.write(0);
} else {
if (ldr < 20 || hujan > 35) {
jemuran.write(180);
client.publish("jemuran", payload);
client.publish("jemuran", "Jemuran Tutup");
digitalWrite(LED_PIN, HIGH);
Serial.println("Jemuran Tutup"); // Assuming LED_PIN is the pin connected to the LED
notif = "OFF";
} else if (ldr > 20 || hujan < 35) {
jemuran.write(0);
client.publish("jemuran", payload);
client.publish("jemuran", "Jemuran Buka");
digitalWrite(LED_PIN, LOW); // Assuming LED_PIN is the pin connected to the LED
Serial.println("Jemuran Buka");
notif = "ON";
}
}
// Publish ke MQTT
// client.publish("jemuran", String(ldr,hujan).c_str());
Serial.println("--------------------------------------------------------------");
StaticJsonDocument<200> doc;
doc["ldr"] = ldr;
doc["hujan"] = hujan;
doc["notif"] = notif;
serializeJson(doc, Serial);
String out;
serializeJson(doc, out);
// client publish
client.publish(mqtt_topic, out.c_str());
client.publish(mqtt_topic, "---------------");
delay(5000);
}