#define ledPin1 2
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient wifiClient;
PubSubClient mqtt(wifiClient);
#include <ArduinoJson.h>
// Informasi MQTT
const char* wifiSsid = "Wokwi-GUEST";
const char* wifiPass = "";
const char* mqttBroker = "iot.egrotek.id";
const char* mqttPubTopic = "egrotek/pub/APPFq3jMwvaFc5HlihKzG/DEVds55l4TaXHAw6IomEU";
const char* mqttSubTopic = "egrotek/sub/APPFq3jMwvaFc5HlihKzG/DEVds55l4TaXHAw6IomEU";
const char* mqttID = "DEVds55l4TaXHAw6IomEU";
const char* mqttUser = "mswUEUEsvXMAxHAwgD";
const char* mqttPass = "YBS8tb2ZhlG7dnIYE9";
uint16_t mqttPort = 1883;
bool led = false;
int set_delay = 1;
void setup() {
Serial.begin(115200);
pinMode(ledPin1, OUTPUT);
WiFi.begin(wifiSsid, wifiPass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("Status : Connected to WiFi");
mqttSetup();
}
void loop() {
mqttCheck();
mqtt.loop();
static unsigned long lastChangeState = 0;
static bool lastState = false;
if (millis() - lastChangeState > set_delay*1000) {
if (led == true) {
digitalWrite(ledPin1, lastState);
lastState = !lastState;
} else {
digitalWrite(ledPin1, LOW);
}
sendData_Mqtt("{\"led\":" + String(lastState) + "}");
lastChangeState = 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("led :" + String(led));
Serial.println("set_delay :" + String(set_delay));
}
void executeJson(String data) {
JsonDocument doc;
deserializeJson(doc, data);
if (doc.containsKey("led")) led = doc["led"];
if (doc.containsKey("set_delay")) set_delay = doc["set_delay"];
}
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
}