Skip to content

Instantly share code, notes, and snippets.

@S-M-Salaquzzaman
Created July 20, 2018 07:42
Show Gist options
  • Save S-M-Salaquzzaman/7ad41865a3b505a02e33f4dd9554ae55 to your computer and use it in GitHub Desktop.
Save S-M-Salaquzzaman/7ad41865a3b505a02e33f4dd9554ae55 to your computer and use it in GitHub Desktop.
Internet of Things (IoT) is the network of physical objects, devices, vehicles, buildings and other items embedded with electronics, software, sensors and network connectivity. The internet of things allows objects to be sensed and controlled remotely across existing network infrastructure. Implementation of IoT has paved way for smart cities, s…
Name of Project : To Design an Internet of Things Based Electrical Load Control System to Minimize the Wastage of Electrical Power of Public Places
Target Device : ESP-12E Module
Firmware : NodeMCU 1.0 Firmware
Clock Frequency : 80MHz
UART Baud Rate : 115200
Flash Size : 4M (3M SPIFFS)
Last Update : 4:08PM, 12 May, 2017 (Tested)
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define WLAN_SSID "Access Point"
#define WLAN_PASS "1234567890"
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "mdobaidul36"
#define AIO_KEY "0feececd4d4f82e90203731c6f94"
#define LED_Pin D0 // Status LED Pin
// LCD SCL D1
// LCD SDA D2
#define Relay1Pin D6 // Light 1
#define Relay2Pin D5 // Light 2
#define Relay3Pin D4 // Light 3
#define Relay4Pin D3 // Main Switch
#define Relay5Pin D7 // Fan
#define Relay6Pin D8 // Other
LiquidCrystal_I2C lcd(0x3F, 16, 2); // Set the LCD address to 0x3F for a 16 chars and 2 line display
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish Ping = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Ping");
Adafruit_MQTT_Publish Relay1Pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Relay 1");
Adafruit_MQTT_Publish Relay2Pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Relay 2");
Adafruit_MQTT_Publish Relay3Pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Relay 3");
Adafruit_MQTT_Publish Relay4Pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Relay 4");
Adafruit_MQTT_Publish Relay5Pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Relay 5");
Adafruit_MQTT_Publish Relay6Pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Relay 6");
Adafruit_MQTT_Subscribe Relay1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay 1");
Adafruit_MQTT_Subscribe Relay2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay 2");
Adafruit_MQTT_Subscribe Relay3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay 3");
Adafruit_MQTT_Subscribe Relay4 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay 4");
Adafruit_MQTT_Subscribe Relay5 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay 5");
Adafruit_MQTT_Subscribe Relay6 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay 6");
byte ledState = HIGH;
uint32_t x = 0;
byte Relay1State = 1;
byte Relay2State = 1;
byte Relay3State = 1;
byte Relay4State = 1;
byte Relay5State = 1;
byte Relay6State = 1;
void setup()
{
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Starting...");
delay(10);
//pinMode(LED_Pin, OUTPUT);
pinMode(Relay1Pin, OUTPUT);
pinMode(Relay2Pin, OUTPUT);
pinMode(Relay3Pin, OUTPUT);
pinMode(Relay4Pin, OUTPUT);
pinMode(Relay5Pin, OUTPUT);
pinMode(Relay6Pin, OUTPUT);
delay(10);
//digitalWrite(LED_Pin, LOW);
digitalWrite(Relay1Pin, Relay1State);
digitalWrite(Relay2Pin, Relay2State);
digitalWrite(Relay3Pin, Relay3State);
digitalWrite(Relay4Pin, Relay4State);
digitalWrite(Relay5Pin, Relay5State);
digitalWrite(Relay6Pin, Relay6State);
delay(2000);
Serial.begin(115200);
delay(100);
Serial.println(" ");
Serial.println(" ");
delay(100);
Serial.print("Connecting to WiFi..");
lcd.setCursor(0, 0);
lcd.print("Connecting WiFi");
lcd.setCursor(0, 1);
lcd.print(WLAN_SSID);
delay(1000);
WiFi.begin(WLAN_SSID, WLAN_PASS); // Connect to WiFi
delay(100);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000); // Delay 1000ms then re-check
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(WLAN_SSID);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
lcd.setCursor(0, 0);
lcd.print("Wi-Fi Connected");
lcd.setCursor(0, 1);
lcd.print("IP:");
lcd.print(WiFi.localIP());
delay(3000);
mqtt.subscribe(&Relay1); // Setup MQTT subscription for onoff feeds.
mqtt.subscribe(&Relay2);
mqtt.subscribe(&Relay3);
mqtt.subscribe(&Relay4);
mqtt.subscribe(&Relay5);
mqtt.subscribe(&Relay6);
MQTT_connect();
digitalWrite(Relay1Pin, Relay1State);
digitalWrite(Relay2Pin, Relay2State);
digitalWrite(Relay3Pin, Relay3State);
digitalWrite(Relay4Pin, Relay4State);
digitalWrite(Relay5Pin, Relay5State);
digitalWrite(Relay6Pin, Relay6State);
Relay1Pub.publish(Relay1State);
Relay2Pub.publish(Relay2State);
Relay3Pub.publish(Relay3State);
Relay4Pub.publish(Relay4State);
Relay5Pub.publish(Relay5State);
Relay6Pub.publish(Relay6State);
lcd.setCursor(0, 1);
lcd.print("Load Stts:");
}
void loop()
{
MQTT_connect();
readSubs();
//blinkLED();
}
void readSubs()
{
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(100))) //1000mS timeout
{
if (subscription == &Relay1)
{
if (strcmp((char *)Relay1.lastread, "0") == 0)
{
digitalWrite(Relay1Pin, LOW);
Relay1State = 0;
Serial.print(F("Relay 1: "));
Serial.println(F("ON"));
lcd.setCursor(10, 1);
lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print("1");
}
if (strcmp((char *)Relay1.lastread, "1") == 0)
{
digitalWrite(Relay1Pin, HIGH);
Relay1State = 1;
Serial.print(F("Relay 1: "));
Serial.println(F("OFF"));
lcd.setCursor(10, 1);
lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print("0");
}
}
if (subscription == &Relay2)
{
if (strcmp((char *)Relay2.lastread, "0") == 0)
{
digitalWrite(Relay2Pin, LOW);
Relay1State = 0;
Serial.print(F("Relay 2: "));
Serial.println(F("ON"));
lcd.setCursor(11, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print("1");
}
if (strcmp((char *)Relay2.lastread, "1") == 0)
{
digitalWrite(Relay2Pin, HIGH);
Relay1State = 1;
Serial.print(F("Relay 2: "));
Serial.println(F("OFF"));
lcd.setCursor(11, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print("0");
}
}
if (subscription == &Relay3)
{
if (strcmp((char *)Relay3.lastread, "0") == 0)
{
digitalWrite(Relay3Pin, LOW);
Relay1State = 0;
Serial.print(F("Relay 3: "));
Serial.println(F("ON"));
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.setCursor(12, 1);
lcd.print("1");
}
if (strcmp((char *)Relay3.lastread, "1") == 0)
{
digitalWrite(Relay3Pin, HIGH);
Relay1State = 1;
Serial.print(F("Relay 3: "));
Serial.println(F("OFF"));
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.setCursor(12, 1);
lcd.print("0");
}
}
if (subscription == &Relay4)
{
if (strcmp((char *)Relay4.lastread, "0") == 0)
{
digitalWrite(Relay4Pin, LOW);
Relay1State = 0;
Serial.print(F("Relay 4: "));
Serial.println(F("ON"));
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print("1");
}
if (strcmp((char *)Relay4.lastread, "1") == 0)
{
digitalWrite(Relay4Pin, HIGH);
Relay1State = 1;
Serial.print(F("Relay 4: "));
Serial.println(F("OFF"));
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print("0");
}
}
if (subscription == &Relay5)
{
if (strcmp((char *)Relay5.lastread, "0") == 0)
{
digitalWrite(Relay5Pin, LOW);
Relay1State = 0;
Serial.print(F("Relay 5: "));
Serial.println(F("ON"));
lcd.setCursor(14, 1);
lcd.print(" ");
lcd.setCursor(14, 1);
lcd.print("1");
}
if (strcmp((char *)Relay5.lastread, "1") == 0)
{
digitalWrite(Relay5Pin, HIGH);
Relay1State = 1;
Serial.print(F("Relay 5: "));
Serial.println(F("OFF"));
lcd.setCursor(14, 1);
lcd.print(" ");
lcd.setCursor(14, 1);
lcd.print("0");
}
}
if (subscription == &Relay6)
{
if (strcmp((char *)Relay6.lastread, "0") == 0)
{
digitalWrite(Relay6Pin, LOW);
Relay1State = 0;
Serial.print(F("Relay 6: "));
Serial.println(F("ON"));
lcd.setCursor(15, 1);
lcd.print(" ");
lcd.setCursor(15, 1);
lcd.print("1");
}
if (strcmp((char *)Relay6.lastread, "1") == 0)
{
digitalWrite(Relay6Pin, HIGH);
Relay1State = 1;
Serial.print(F("Relay 6: "));
Serial.println(F("OFF"));
lcd.setCursor(15, 1);
lcd.print(" ");
lcd.setCursor(15, 1);
lcd.print("0");
}
}
}
}
void MQTT_connect()
{
int8_t ret;
if (mqtt.connected())
return;
Serial.println("Connecting to MQTT server...");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Conecting Server");
delay(2000);
uint8_t retries = 10;
while ((ret = mqtt.connect()) != 0) // connect will return 0 for connected
{
//digitalWrite(LED_Pin, LOW);
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Re-connecting...");
mqtt.disconnect();
delay(5000);
retries--;
if (retries == 0)
while (1);
}
Serial.println("MQTT server connected.");
Serial.println("System is ready!");
Serial.println("");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Server Connected");
//delay(2000);
}
void blinkLED()
{
Ping.publish(x++);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment