/**************************************************
* Smart Home Automation System using ESP32 Microcontroller *
* SUBMITTED BY: ESQUILONA, JAYDEL E. *
* SUBMITTED TO: PROF. MICHAEL T. SAMONTE *
* *************************************************/
#include <IRremote.h>
#include <WiFi.h>
#include <ThingSpeak.h>
WiFiClient client;
long myChannelNumber = 2655195;
const char * myWriteAPIKey = "O2URDBSK1EPURZ0I";
int statusCode;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define IRpin 14
IRrecv receiver(IRpin);
const int relayPins[] = {21, 19, 16, 15};
void setup() {
Serial.begin(9600);
receiver.enableIRIn();
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
// Set up relay pins
for (int i = 0; i < 4; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW); // Turn off relays initially
}
}
void loop() {
if(WiFi.status() != WL_CONNECTED)
{
Serial.print("Attempting to connect");
while(WiFi.status() != WL_CONNECTED)
{
WiFi.begin(ssid, pass);
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
// Checks received an IR signal
if (receiver.decode()) {
translator();
receiver.resume(); // Receive the next value
}
}
void translator() {
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case 90:
operateRelay(0);
break;
case 66:
operateRelay(1);
break;
case 74:
operateRelay(2);
break;
case 82:
operateRelay(3);
break;
default:
Serial.println("Button has no Function");
}
}
void operateRelay(int relayIndex) {
// Toggle the relay
digitalWrite(relayPins[relayIndex], !digitalRead(relayPins[relayIndex]));
// Print the status to serial
Serial.print("Button Pressed - Relay Number: ");
Serial.println(relayIndex + 1);
}
ThingSpeak.setField(1, Button Pressed - Relay Number);
ThingSpeak.setField(2, relayIndex + 1);
statusCode = ThingSpeak.writeFields(myChannelNumber,myWriteAPIKey);
if(statusCode == 200) { //successful writing code
Serial.println("Channel update successful.");
}
else {
Serial.println("Problem Writing data. HTTP error code :" +
String(statusCode));
}