#include <ArduinoJson.h>
#include <WiFi.h>
#include <PubSubClient.h>
#define LED1 18
#define LED2 5
String ledStatus1 = "ON";
String ledStatus2 = "ON";
const char *ssid = "Wokwi-GUEST";
const char *password = "";
#define MQTT_SERVER "broker.hivemq.com"
#define MQTT_PORT 8884
#define MQTT_USER "OngVang"
#define MQTT_PASSWORD "12345678"
#define MQTT_LED1_TOPIC "ONG_VANG/LED1"
#define MQTT_LED2_TOPIC "ONG_VANG/LED2"
unsigned long previousMillis = 0, interval = 5000;
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void setup_wifi()
{
Serial.print("connecting");
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
}
void connect_to_broker()
{
while((!client.connected()))
{
Serial.print("MQTT connectinon");
String clientID = "esp32";
clientID += String(random(0xffff),HEX);
if(client.connect(clientID.c_str()))
{
Serial.println("connected");
client.subscribe(MQTT_LED1_TOPIC);
client.subscribe(MQTT_LED2_TOPIC);
}
else{
Serial.print("failed");
delay(2000);
}
}
}
void callback(char *topic, byte *payload, unsigned int length)
{
char status[20];
for(int i=0;i<20;i++)
{
status[i] = 0;
}
for(int i=0;i<length;i++)
{
status[i] = payload[i];
}
if(String(topic) == MQTT_LED1_TOPIC)
{
if(String(status) == "OFF")
{
ledStatus1 = "OFF";
digitalWrite(LED1,0);
}
}
if(String(topic) == MQTT_LED1_TOPIC)
{
if(String(status) == "ON")
{
ledStatus1 = "ON";
digitalWrite(LED1,1);
}
}
if(String(topic) == MQTT_LED2_TOPIC)
{
if(String(status) == "OFF")
{
ledStatus2 = "OFF";
digitalWrite(LED2,0);
}
}
if(String(topic) == MQTT_LED2_TOPIC)
{
if(String(status) == "ON")
{
ledStatus1 = "ON";
digitalWrite(LED2,1);
}
}
}
void setup()
{
Serial.begin(9600);
Serial.setTimeout(500);
setup_wifi();
client.setServer(MQTT_SERVER,MQTT_PORT);
client.setCallback(callback);
connect_to_broker();
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
}
void loop()
{
client.loop();
if(!client.connected())
{
connect_to_broker();
}
}