#define ledPin1 2
#define ledPin2 4
#define dhtPin 25
#define relayPin 26
#define ldrPin 33
#define servoPin 23
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient wifiClient;
PubSubClient mqtt(wifiClient);
#include <ArduinoJson.h>
#include "DHT.h"
#define dhtType DHT11
DHT dht(dhtPin, dhtType);
#include <ESP32Servo.h>
Servo myservo;
const char *wifiSsid = "Egrotek";
const char *wifiPass = "jamurtiram";
const char *mqttPubTopic = "egrotek/pub/APPmI3YgR3vfymCfa04ET/DEVtVHIoX31Z3LxFljM1g";
const char *mqttSubTopic = "egrotek/sub/APPmI3YgR3vfymCfa04ET/DEVtVHIoX31Z3LxFljM1g";
const char *mqttID = "DEVtVHIoX31Z3LxFljM1g";
const char *mqttUser = "ph0CMhmhF1NsPjSDKN";
const char *mqttPass = "RZtPsrEIfXDCFTJRm3";
const char *mqttBroker = "iot.egrotek.id";
uint16_t mqttPort = 1883;
bool led1;
bool led2;
bool relay;
int servo;
void setup() {
Serial.begin(9600);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(relayPin, OUTPUT);
pinMode(ldrPin, INPUT);
WiFi.begin(wifiSsid, wifiPass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("Status : Connected to WiFi");
dht.begin();
myservo.attach(servoPin);
myservo.write(0);
mqttSetup();
}
void loop() {
mqttCheck();
mqtt.loop();
static unsigned long lastUplink = 0;
if (millis() - lastUplink > 5000) {
float tempValue = dht.readTemperature(); //baca suhu
float humiValue = dht.readHumidity(); //baca kelembaban
if (isnan(tempValue) || isnan(humiValue)) {
tempValue = 0.0;
humiValue = 0.0;
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
int ldrValue = analogRead(ldrPin);
sendData_Mqtt("{\"temp\":" + String(tempValue) + ",\"humi\":" + String(humiValue) + ",\"ldr\":" + String(ldrValue) + "}");
lastUplink = millis();
}
}
void mqttSetup() {
mqtt.setServer(mqttBroker, mqttPort);
mqtt.setCallback(callback);
Serial.println("Status : MQTT SetServer Finish");
}
void mqttCheck() {
static unsigned long lastCheck = 0;
if (millis() - lastCheck > 1000) {
if (!mqtt.connected()) {
Serial.println("Status : Reconnecting to MQTT");
mqtt.connect(mqttID, mqttUser, mqttPass); //menghubungkan ulang
if (!mqtt.connected()) {
Serial.println("Status : Failed to Connect MQTT");
mqtt.connect(mqttID, mqttUser, mqttPass); //menghubungkan ulang jika gagal
}
Serial.println("Status : Reconnected to MQTT");
}
mqtt.subscribe(mqttSubTopic);
lastCheck = millis();
}
}
void callback(char *topic, byte *message, unsigned int length) {
String messageTemp;
for (int i = 0; i < length; i++) {
messageTemp += (char)message[i];
}
executeJson(messageTemp);
Serial.println("Topic :" + String(topic));
Serial.println("Message:" + messageTemp);
Serial.println("led1 :" + String(led1));
Serial.println("led2 :" + String(led2));
Serial.println("relay :" + String(relay));
Serial.println("servo :" + String(servo));
}
void executeJson(String data) {
JsonDocument doc;
deserializeJson(doc, data);
if (doc.containsKey("led1")) led1 = doc["led1"];
if (doc.containsKey("led2")) led2 = doc["led2"];
if (doc.containsKey("relay")) relay = doc["relay"];
if (doc.containsKey("servo")) servo = doc["servo"];
if (led1 == true) digitalWrite(ledPin1, 1);
else if (led1 == false) digitalWrite(ledPin1, 0);
if (led2 == true) digitalWrite(ledPin2, 1);
else if (led2 == false) digitalWrite(ledPin2, 0);
if (relay == true) digitalWrite(relayPin, 1);
else if (relay == false) digitalWrite(relayPin, 0);
myservo.write(servo);
}
void sendData_Mqtt(String msg) {
// mqttCheck();
char finalDataChar[msg.length() + 1];
msg.toCharArray(finalDataChar, msg.length() + 1);
mqtt.publish(mqttPubTopic, finalDataChar);
Serial.println("Send Data : " + String(finalDataChar)); //debug
}