// Smart Home Controlling System
// Thingspeak Server dB Public View: https://thingspeak.com/channels/2052162
// https://api.thingspeak.com/update?api_key=QS963Q0GCOTDY6GY&field1=
#include <WiFi.h>
#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros
char ssid[] = "Wokwi-GUEST"; // your network SSID (name)
char pass[] = ""; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)
WiFiClient client;
// Weather station channel details
unsigned long weatherStationChannelNumber = 2052162;
int statusCode = 0;
int field[8] = {1,2,3,4};
int ch1 = 0;
int ch2 = 0;
int ch3 = 0;
int ch4 = 0;
#define ch1Pin 22
#define ch2Pin 21
#define ch3Pin 19
#define ch4Pin 18
void setup() {
Serial.begin(115200); // Initialize serial
// Pin Mode declaration
pinMode(ch1Pin, OUTPUT);
pinMode(ch2Pin, OUTPUT);
pinMode(ch3Pin, OUTPUT);
pinMode(ch4Pin, OUTPUT);
while (!Serial) { ;} // wait for serial port to connect. Needed for Leonardo native USB port only
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client); // Initialize ThingSpeak
// Connect or reconnect to WiFi
if(WiFi.status() != WL_CONNECTED){
Serial.print("Attempting to connect to SSID: ");
Serial.println("Wokwi");
while(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
Serial.print(".");
delay(5000);
}
Serial.println("WiFi Connected");
delay(1000);
}
Serial.println("Welcome at Smart Home");
delay(1000);
}
void loop() {
// use ThingSpeak.readMultipleFields(channelNumber, readAPIKey) for private channels
statusCode = ThingSpeak.readMultipleFields(weatherStationChannelNumber);
if(statusCode == 200)
{
// Fetch the stored data
ch1 = ThingSpeak.getFieldAsInt(field[0]); // Field 1
ch2 = ThingSpeak.getFieldAsInt(field[1]); // Field 2
ch3 = ThingSpeak.getFieldAsInt(field[2]); // Field 3
ch4 = ThingSpeak.getFieldAsInt(field[3]); // Field 4
Serial.println("Ch1: " + String(ch1));
Serial.println("Ch2: " + String(ch2));
Serial.println("Ch3: " + String(ch3));
Serial.println("Ch4: " + String(ch4));
}
else{Serial.println("Problem reading channel. HTTP error code " + String(statusCode));}
if (ch1 >= 1){digitalWrite(ch1Pin, HIGH);}
if (ch1 == 0){digitalWrite(ch1Pin, LOW);}
if (ch2 >= 1){digitalWrite(ch2Pin, HIGH);}
if (ch2 == 0){digitalWrite(ch2Pin, LOW);}
if (ch3 >= 1){digitalWrite(ch3Pin, HIGH);}
if (ch3 == 0){digitalWrite(ch3Pin, LOW);}
if (ch4 >= 1){digitalWrite(ch4Pin, HIGH);}
if (ch4 == 0){digitalWrite(ch4Pin, LOW);}
Serial.println();
delay(5000); // no need to fetch too often
}
/*
https://api.thingspeak.com/update?api_key=QS963Q0GCOTDY6GY&field1=1&field2=0&field3=1&field4=0
*/