/***********************************************************************
SMART GORA
Created by: Muhammad Zulfikri, M.T
**********************************************************************/
#include <WiFi.h>
#include <WiFiClient.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
#define MQTT_SERV "io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME "smartgora"
#define MQTT_PASS "aio_oUbK833LrzfhKidMCx56s5q1WF1r"
//Relays for switching appliances
#define Relay 17 //Pin Number for Light
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS);
Adafruit_MQTT_Subscribe Light = Adafruit_MQTT_Subscribe(&mqtt, MQTT_NAME "/feeds/Light");
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//Connect to WiFi
Serial.print("\n\nConnecting Wifi... ");
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
Serial.println("OK!");
// initialize the LED pin as an output
pinMode(Relay, OUTPUT);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&Light);
}
void MQTT_connect()
{
int8_t ret;
if (mqtt.connected())
{
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) // connect will return 0 for connected
{
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0)
{
while (1);
}
}
Serial.println("MQTT Connected!");
}
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000)))
{
if (subscription == &Light)
{
Serial.print("Light: ");
Serial.println((char*) Light.lastread);
if (!strcmp((char*) Light.lastread, "ON"))
{
digitalWrite(Relay, HIGH);
delay(2000);
}
else
{
digitalWrite(Relay, LOW);
delay(2000);
}
}
}
}