#include <dummy.h>
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
//ir receiver
const uint16_t kRecvPin = 0;
IRrecv irrecv(kRecvPin);
decode_results results;
//wifi credentials, change to your wifi credentials
const char* ssid = "YOUR-SSID";
const char* password = "YOUR-PASSWORD";
//pin definition
//output to driving relay
int RELAY = 2;
//relay toggling array
int swval[] = {0};
//physical button
int BUTTON = 3;
//start web server
ESP8266WebServer server(80);
//http auth credentials, change USER and PASS to you requested login info
const char* www_username = "USER";
const char* www_password = "PASS";
const char* www_realm = "ESP-01 relay realm";
string authFailResponse = "401 Unauthorized";
//html main page
const char MAIN_page[] PROGMEM = R"=====(
<!DOCTYPE HTML>
<html><head>
<meta http-equiv='refresh' content='5;url=/'>
<meta name='viewport' content='width=device-width, initial-scale=0.8, maximum-scale=1'>
<link rel='bookmark icon' href='data:image/x-icon;base64,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
AAAAAElFTkSuQmCC' type='image/x-icon'>
<title>WEB page title</title></head><body bgcolor='#000000' text='silver'><center>
<h2><strong>ESP-01 relay</strong></h2>
<!--relay status-->
<h2>Relay is: <iframe src='/STAT' name='frame' width='100' height='40' frameborder='0' scrolling='no'></iframe></h2><br>
<!--relay on-->
<a target='frame' href='/ON'><button><font size='18px'><br> TURN <strong>ON</strong> <br> </font></button></a><br><br><br>
<!--relay off-->
<a target='frame' href='/OFF'><button><font size='18px'><br>TURN <strong>OFF</strong><br> </font></button></a>
<!--relay toggle-->
<a target='frame' href='/TOG'><button><font size='18px'><br><strong>TOGGLE</strong><br> </font></button></a>
</center></body></html>
)=====";
//relay toggle loop
//for custom relay leave as is, for ebay relay change LOW to HIGH and HIGH to LOW
void relayswitch(int i,int j){
if(swval[j]==1){
digitalWrite(i, HIGH);
swval[j]=0;
}else if(swval[j]==0){
digitalWrite(i, LOW);
swval[j]=1;
}
}
void STAT() {
//for custom relay leave as is, for ebay relay change LOW to HIGH
if (digitalRead(RELAY)==LOW) {
server.send(200, "text/html", "<strong><font size='6px' color='red'> OFF </font></strong>");
}
//for custom relay leave as is, for ebay relay change HIGH to LOW
if (digitalRead(RELAY)==HIGH) {
server.send(200, "text/html", "<strong><font size='6px' color='green'> ON </font></strong>");
}
}
void setup(void) {
//ir receiver
irrecv.enableIRIn();
delay(50);
//set pin mode
pinMode(RELAY, OUTPUT);
//for custom relay leave as is, for ebay relay change LOW to HIGH
digitalWrite(RELAY, LOW);
pinMode(BUTTON, INPUT);
//nastaveni wifi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
//if you want to use static ip, change it here, if you want to use DHCP, comment out next four lines
IPAddress ip(192,168,1,222);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
WiFi.config(ip, gateway, subnet);
delay(50);
//connecting loop, if is uncommented, physical button and ir will not work without wifi connection, leave as is ideally
//while (WiFi.status() != WL_CONNECTED)
//{
//delay(1000);
//}
//web auth and pages
server.on("/", []() {
if (!server.authenticate(www_username, www_password)) {
return server.requestAuthentication(BASIC_AUTH, www_realm, authFailResponse);
}
server.send(200, "text/html", MAIN_page);
});
server.on("/ON", []() {
if (!server.authenticate(www_username, www_password)) {
return server.requestAuthentication(BASIC_AUTH, www_realm, authFailResponse);
}
server.send(200, "text/html", "<strong><font size='6px' color='green'> ON </font></strong>");
//for custom relay leave as is, for ebay relay change HIGH to LOW
digitalWrite(RELAY, HIGH);
swval[1] = 1;
});
server.on("/OFF", []() {
if (!server.authenticate(www_username, www_password)) {
return server.requestAuthentication(BASIC_AUTH, www_realm, authFailResponse);
}
server.send(200, "text/html", "<strong><font size='6px' color='red'> OFF </font></strong>");
//for custom relay leave as is, for ebay relay change LOW to HIGH
digitalWrite(RELAY, LOW);
swval[1] = 0;
});
server.on("/TOG", []() {
if (!server.authenticate(www_username, www_password)) {
return server.requestAuthentication(BASIC_AUTH, www_realm, authFailResponse);
}
server.sendHeader("Location", string("/"), true);
server.send(302, "text/plain", "");
relayswitch(RELAY, 1);
});
server.on("/STAT", STAT);
server.begin();
}
void loop(void) {
//ir receiver and hex codes
if (irrecv.decode(&results)) {
serialPrintUint64(results.value, HEX);
//use your own HEX code for desired button on ir remote control, you can scan codes by using IRrecvDumpV3 from library IRremoteESP8266
if (results.value==0xAABBCCDD) {
relayswitch(RELAY, 1);
}
irrecv.resume();
}
delay(100);
//physical button, leave as is
if (digitalRead(BUTTON)==HIGH){
relayswitch(RELAY, 1);
delay(200);
}
//start web server
server.handleClient();
}