This post shows that how can we use simple wifi module can be used as internet based home automation device using google assistant and adafruit io.
for this project you will need following components and modules:-
1. NODE MCU board
2. Realy board
now power the node mcu and relay module using the charger and connect the node mcu pins to the relay board and the hardware is ready
now creat the adafruit io account and sign in and creat the feeds and dashboards like below
now go to https://ifttt.com/ and creat account and follow following steps
creat a new applet
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/************************* WiFi Access Point *********************************/
#define WLAN_SSID "Earth Orbit"
#define WLAN_PASS "projectrt19"
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME "Anup1999"
#define AIO_KEY "625e962f941a4becb25c62885153032b"
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
/****************************** Feeds ***************************************/
// Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe onoffbutton1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/device1");
Adafruit_MQTT_Subscribe onoffbutton2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/device2");
// Bug workaround for Arduino 1.6.6, it seems to need a function declaration
// for some reason (only affects ESP8266, likely an arduino-builder bug).
void MQTT_connect();
void setup() {
Serial.begin(115200);
delay(10);
pinMode(15, OUTPUT);
pinMode(0, OUTPUT);
pinMode(12, OUTPUT);
pinMode(14, INPUT);
digitalWrite(15, LOW);
digitalWrite(0, LOW);
Serial.println(F("Adafruit MQTT demo"));
// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: "); Serial.println(WiFi.localIP());
// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&onoffbutton1);
mqtt.subscribe(&onoffbutton2);
}
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &onoffbutton1) {
Serial.print(F("Got1: "));
Serial.println((char*)onoffbutton1.lastread);
uint16_t num = atoi((char*)onoffbutton1.lastread);
if (num == 1)
{
digitalWrite(15, HIGH);
Serial.println("load1 turned on");
delay(500);
}
if (num == 0)
{
digitalWrite(15, LOW);
Serial.println("load1 turned off");
delay(500);
}
}
if (subscription == &onoffbutton2) {
Serial.print(F("Got2: "));
Serial.println((char*)onoffbutton2.lastread);
uint16_t num1 = atoi((char*)onoffbutton2.lastread);
if (num1 == 1)
{
digitalWrite(0, HIGH);
Serial.println("load2 turned on");
delay(500);
}
if (num1 == 0)
{
digitalWrite(0, LOW);
Serial.println("load 2 turned off");
delay(500);
}
}
}
// ping the server to keep the mqtt connection alive
// NOT required if you are publishing once every KEEPALIVE seconds
if (! mqtt.ping()) {
mqtt.disconnect();
}
}
// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 10
;
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(10); // wait .5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");
}