#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
String devID="2305062";
const char* ID="";
const char* action="";
String msg;
int R[7]={0};
int relay1=2;
int relay2=15;
int relay3=12;
int relay4=14;
int relay5=27;
int relay6=28;
int relay7=25;
int relay8=4;
// WiFi settings
const char* ssid = "Wokwi-GUEST"; // Replace with your WiFi name
// MQTT Broker settings
const char* mqtt_broker = "broker.emqx.io"; // EMQX broker endpoint
const char* mqtt_topic = "diot/#"; // Subscribe to all topics starting with "diot/"
const char* mqtt_username = ""; // No username required for EMQX public broker
const char* mqtt_password = ""; // No password required for EMQX public broker
const int mqtt_port = 1883; // MQTT port (TCP)
WiFiClient espClient;
PubSubClient mqtt_client(espClient);
void connectToWiFi();
void connectToMQTTBroker();
void mqttCallback(char* topic, byte* payload, unsigned int length);
void setup() {
Serial.begin(115200);
connectToWiFi();
mqtt_client.setServer(mqtt_broker, mqtt_port);
mqtt_client.setCallback(mqttCallback);
connectToMQTTBroker();
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
pinMode(relay4,OUTPUT);
pinMode(relay5,OUTPUT);
pinMode(relay6,OUTPUT);
pinMode(relay7,OUTPUT);
pinMode(relay8,OUTPUT);
}
void connectToWiFi() {
WiFi.begin(ssid);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
}
void connectToMQTTBroker() {
while (!mqtt_client.connected()) {
String client_id = WiFi.macAddress();
Serial.printf("Connecting to MQTT Broker as %s.....\n", client_id.c_str());
if (mqtt_client.connect(client_id.c_str())) {
Serial.println("Connected to MQTT broker");
mqtt_client.subscribe(mqtt_topic);
} else {
Serial.print("Failed to connect to MQTT broker, rc=");
Serial.print(mqtt_client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void mqttCallback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message received on topic: ");
Serial.println(topic);
Serial.print("Message:");
for (unsigned int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
msg=msg+String(payload[i]);
}
Serial.println();
Serial.println("-----------------------");
json(msg);
}
void json(String str){
StaticJsonDocument<256> doc;
DeserializationError error = deserializeJson(doc, str);
// {"ID":2305062,"R1":0,"R2":0,"R3":0,"R4":0,"R5":0,"R6":0,"R7":0,"R8":0}
ID = doc["ID"];
action=doc["action"];
R[0]=doc["R1"];
R[1]=doc["R2"];
R[2]=doc["R3"];
R[3]=doc["R4"];
R[4]=doc["R5"];
R[5]=doc["R6"];
R[6]=doc["R7"];
R[7]=doc["R8"];
Serial.println(String(action));
if(String(ID)==devID){
if(String(action) == "control"){
digitalWrite(relay1,R[0]);
digitalWrite(relay2,R[1]);
digitalWrite(relay3,R[2]);
digitalWrite(relay4,R[3]);
digitalWrite(relay5,R[4]);
digitalWrite(relay6,R[5]);
digitalWrite(relay7,R[6]);
digitalWrite(relay8,R[7]);
}
else if(String(action) == "state"){
mqtt_client.publish(mqtt_topic, "{\"ID\":2305062,\"action\":\"feedback\",\"type\":\"state\",\"state\":1}");
}
else if(String(action) == "monitoring"){
mqtt_client.publish(mqtt_topic, "{\"ID\":2305062,\"action\":\"feedback\",\"type\":\"monitoring\",\"suhu\":1,\"monitoring\":1}");
}
}
}
void loop() {
if (!mqtt_client.connected()) {
connectToMQTTBroker();
}
mqtt_client.loop();
}