// Konfigurasi pin
byte pinRedLed = 2;
byte pinGreenLed = 4;
byte pinRelay = 26;
byte pinBuzzer = 27;
#include <ArduinoJson.h>
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi & MQTT Parameter
WiFiClient espClient;
PubSubClient mqtt(espClient);
const char* wifiSSID = "Wokwi-GUEST";
const char* wifiPass = "";
const char* mqttPubTopic = "egrotek/pub/APPFq3jMwvaFc5HlihKzG/DEVVsZIxMkw2kE9ebZnax";
const char* mqttSubTopic = "egrotek/sub/APPFq3jMwvaFc5HlihKzG/DEVVsZIxMkw2kE9ebZnax";
const char* mqttID = "DEVVsZIxMkw2kE9ebZnax";
const char* mqttUser = "mswUEUEsvXMAxHAwgD";
const char* mqttPass = "YBS8tb2ZhlG7dnIYE9";
const char* mqttBroker = "iot.egrotek.id";
uint16_t mqttPort = 1883;
uint8_t uplinkInterval = 5; // Interval dalam detik
bool redState = false;
bool greenState = false;
bool relayState = false;
bool buzzerState = false;
void setup() {
Serial.begin(9600);
pinMode(pinRedLed, OUTPUT);
pinMode(pinGreenLed, OUTPUT);
pinMode(pinRelay, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
// WiFi setup
wifiSetup();
// MQTT setup
mqttSetup();
}
void loop() {
mqttCheck();
mqtt.loop();
static unsigned long prevSend = 0;
if (millis() - prevSend > uplinkInterval * 1000) {
String data = "{\"set_redled\":\"" + String(redState ? "1" : "0") + "\",\"greenLed\":\"" + String(greenState ? "1" : "0") + "\",\"relay\":\"" + String(relayState ? "1" : "0") + "\",\"buzzer\":\"" + String(buzzerState ? "1" : "0") + "\"}";
sendData_Mqtt(data);
prevSend = millis();
}
}
void wifiSetup() {
// Menghubungkan ke jaringan WiFi
Serial.println();
Serial.print("Connecting to ");
Serial.println(wifiSSID);
WiFi.begin(wifiSSID, wifiPass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.print("WiFi connected - ESP IP address: ");
Serial.println(WiFi.localIP());
}
// MQTT
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 > 100) {
if (!mqtt.connected()) {
Serial.println("Status : Reconnecting to MQTT");
if (mqtt.connect(mqttID, mqttUser, mqttPass)) {
Serial.println("Status : Reconnected to MQTT");
mqtt.subscribe(mqttSubTopic);
} else {
Serial.println("Status : Failed to Connect MQTT");
}
}
lastCheck = millis();
}
}
void callback(char* topic, byte* message, unsigned int length) {
String messageTemp;
for (int i = 0; i < length; i++) {
messageTemp += (char)message[i];
}
Serial.println("Topic :" + String(topic));
Serial.println("Message :" + messageTemp);
executeJson(messageTemp);
}
void executeJson(String data) {
StaticJsonDocument<100> doc;
DeserializationError error = deserializeJson(doc, data);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
if (doc.containsKey("redled")) {
redState = doc["redled"];
digitalWrite(pinRedLed, redState);
Serial.println("Red LED State : " + String(redState ? "1" : "0"));
}
if (doc.containsKey("greenled")) {
greenState = doc["greenled"];
digitalWrite(pinGreenLed, greenState);
Serial.println("Green LED State : " + String(greenState ? "1" : "0"));
}
if (doc.containsKey("relay")) {
relayState = doc["relay"];
digitalWrite(pinRelay, relayState);
Serial.println("Relay State : " + String(relayState ? "1" : "0"));
}
if (doc.containsKey("buzzer")) {
buzzerState = doc["buzzer"];
digitalWrite(pinBuzzer, buzzerState);
Serial.println("Buzzer State : " + String(buzzerState ? "1" : "0"));
}
}
void sendData_Mqtt(String msg) {
char finalDataChar[msg.length() + 1];
msg.toCharArray(finalDataChar, msg.length() + 1);
mqtt.publish(mqttPubTopic, finalDataChar);
Serial.println("Send Data : " + String(finalDataChar)); // Debug
}