#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <ArduinoJson.h>
// MQTT Broker dengan mosquitto lokal dan ngrok dengan port baru
#define MAX_CHARACTER 50
#define MQTT_SERVER "0.tcp.ap.ngrok.io"
char mqtt_topic[] = "Jemuran";
int mqtt_port = 13801;
const char * ssid = "Wokwi-GUEST";
const char * password = "";
WiFiClient espClient;
PubSubClient client(espClient);
// deklarasi pin
int PIN_DHT = 14;
int ldr = 34;
int servoPin = 25;
// inisialisasi object lib
DHTesp dht;
Servo jemuran;
//int position = jemuran.read();
//String positionString = String(position);
//jsonObject["servo_postion"] = positionString;
// Batas servo Menyala
int batast = 27; // Batas suhu
int batasmoist = 30; // Batas Moisture
int batasldr = 31; // Batas Cahaya
//int moisture = 0;
int temp = 0;
int hum = 0;
// menghubungkan ke wifi
void setupWifi(){
Serial.print("Menghubungkan ke ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
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("");
}
void setupMqtt(){
while (!client.connected()){
Serial.println("Menghubungkan ke 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("Error: ");
Serial.print(client.state());
Serial.println("Mencoba lagi...");
delay(5000);
}
}
}
void setup() {
Serial.begin(9600);
setupWifi();
client.setServer(MQTT_SERVER, mqtt_port);
if (!client.connected()){
setupMqtt();
}
// inisiasi DHT
dht.setup(PIN_DHT, DHTesp::DHT22);
Serial.begin(9600);
}
void jmrn() {
ldr =map(analogRead(34), 0, 4096, 100,0); // range ldr diubah dari 0-4096 menjadi 0-100
jemuran.attach(servoPin);
// client.loop();
// DHT
TempAndHumidity data = dht.getTempAndHumidity();
// ekstrak data temperature
temp = data.temperature;
// ekstrak data humidity
hum = data.humidity;
// display data ke serial monitor
Serial.println("===================");
Serial.print("Suhu: ");
Serial.println(temp);
Serial.print("Kelembaban: ");
Serial.println(hum);
Serial.print("Cahaya Matahari: ");
Serial.println(ldr);
Serial.println("===================");
if(temp > batast && hum < batasmoist && ldr > batasldr){
jemuran.write(0);
Serial.println("jemuran Buka");
}
else {
jemuran.write(180);
Serial.println("jemuran Tutup");
}
///String message;
//client publish
///client.publish(mqtt_topic, message.c_str());
/// client.publish(mqtt_topic, "---------------");
///delay(3000);
}
void loop() {
client.loop();
// ultra();
jmrn();
Serial.println("--------------------------------------------------------------");
StaticJsonDocument<200> doc;
doc["temp"] = temp;
doc["moisture"] = hum;
doc["cahaya"] = ldr;
doc["jemuran"] = jemuran;
String message;
serializeJson(doc, message);
//client publish
client.publish(mqtt_topic, message.c_str());
client.publish(mqtt_topic, "---------------");
delay(5000);
}