#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <string>
#include <ArduinoJson.h>
#define MAX_CHARACTER 50
#define MQTT_SERVER "0.tcp.ap.ngrok.io"
// deklarasi pin-pin sensor
#define PIN_DHT 14
#define PIN_LDR 35
// LED
#define LED_M 19 // Led
#define Relay 4 // Relay
String Relay_switch;
// Batas LED Menyala
int batast = 30; // Batas suhu
int batasmoist = 70; // Batas Moisture
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
char mqtt_topic[] = "IOT/Project";
int mqtt_port = 13555;
WiFiClient espClient;
PubSubClient client(espClient);
// inisialisasi object library
DHTesp dht;
//int moisture = 0;
int temp = 0;
int hum = 0;
void setupWifi(){
Serial.print("Menghubungkan ke ");
Serial.println(ssid);
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("");
}
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);
pinMode(Relay, OUTPUT);
pinMode(LED_M, OUTPUT);
Serial.begin(9600);
}
void loop() {
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.println("===================");
// LED Suhu
if(temp > batast){
digitalWrite(Relay, HIGH);
Serial.println("Relay ON");
Relay_switch = "ON";
}
else {
digitalWrite(Relay, LOW);
Serial.println("Relay Off");
Relay_switch = "OFF";
}
// LED Moisture
if(hum > batasmoist){
digitalWrite(LED_M, HIGH);
Serial.println("Led On");
}
else {
digitalWrite(LED_M, LOW);
Serial.println("Led Off");
}
StaticJsonDocument<200> doc;
doc["temp"] = temp;
doc["moisture"] = hum;
doc["status"]["relay"] = Relay_switch;
String message;
serializeJson(doc, message);
//client publish
client.publish(mqtt_topic, message.c_str());
client.publish(mqtt_topic, "---------------");
delay(3000);
}