//#include <Header.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h> //Local WebServer used to serve the configuration portal
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager WiFi Configuration Magic
#include <SoftwareSerial.h>
#include <WiFiClient.h>
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(90);
SoftwareSerial Ardiuno(4, 5); // RX, TX D1-5 D2-4
ESP8266WebServer webserver(80); //Server on port 80
WiFiManager wifiManager;
#define TRIGGER_PIN 0
#define RESET_PIN 2
int status = WL_IDLE_STATUS; // the Wifi radio's status
bool flag;
int temp;
//---------------------------------------------------------------
//Our HTML webpage contents in program memory
const char MAIN_page[] PROGMEM = R"=====(
<!DOCTYPE html>
<html>
<body>
<center>
<h1>Honeywell Access Card Emulator For Allegion </h1><br>
<form action="/submit" method='POST'>
<br>
<b>Select Required Inputs</b>
<br>
<br>
<input type="checkbox" name="i1" value="i1"> Input 1
<input type="checkbox" name="i2" value="i2"> Input 2
<input type="checkbox" name="i3" value="i3"> Input 3
<input type="checkbox" name="i4" value="i4"> Input 4
<br>
<br>
<input type="checkbox" name="i5" value="i5"> Input 5
<input type="checkbox" name="i6" value="i6"> Input 6
<input type="checkbox" name="i7" value="i7"> Input 7
<input type="checkbox" name="i8" value="i8"> Input 8
<br>
<br>
<input type="checkbox" name="i9" value="i9"> Tamper
<br>
<br>
<input type="checkbox" name="i10" value="i10"> Cardswipes(Entry&Exit)
<input type="checkbox" name="i11" value="i11"> Cardswipes(Only Entry)
<input type="checkbox" name="i12" value="i12"> Cardswipes(Only Exit)
<br>
<br>
<b>No of Loops - Loop Delay in seconds - Event Delay in seconds</b>
<br>
<br>
Loop:
<input type="text" name="loop" value="">
Loop Delay:
<input type="text" name="ldelay" value="">
Event Delay:
<input type="text" name="edelay" value="">
<br>
<br>
Events/hr(Max 22000) :
<input type="text" name="eph" value="">
Duration(mins) :
<input type="text" name="duration" value="">
<br>
<br>
<input type="submit" value="Start">
</form>
<br>
<form action="/stop" method='POST'>
<input type="submit" value="Stop">
</form>
<hr>
<a href="[email protected]">[email protected]</a>
<br>
</center>
</body>
</html>
)=====";
//---------------------------------------------------------------
void handleRoot() {
Serial.println("You called root page");
String s = MAIN_page; //Read HTML contents
webserver.send(200, "text/html", s); //Send web page
}
void handleSubmit() {
if (webserver.args() > 0) {
Serial.println("Event Started");
String temp = "Web," + webserver.arg("i1") + "," + webserver.arg("i2") + "," + webserver.arg("i3") + "," + webserver.arg("i4")+ "," + webserver.arg("i5") + ","
+ webserver.arg("i6") + "," + webserver.arg("i7") + "," + webserver.arg("i8") + "," + webserver.arg("i9") + ","
+ webserver.arg("i10") + "," + webserver.arg("i11") + "," + webserver.arg("i12") + ","
+ webserver.arg("loop") + "," + webserver.arg("ldelay") + "," + webserver.arg("edelay")+ "," + webserver.arg("eph") + "," + webserver.arg("duration");
Serial.println(temp);
Ardiuno.print(temp);
String s = MAIN_page; //Read HTML contents
webserver.send(200, "text/html", s); //Send web page
}
}
void handleStop() {
Serial.println("Event Stoped");
digitalWrite(RESET_PIN,LOW);
delay(500);
digitalWrite(RESET_PIN,HIGH);
String s = MAIN_page; //Read HTML contents
webserver.send(200, "text/html", s); //Send web page
}
void configModeCallback (WiFiManager *myWiFiManager) {
Serial.println("Entered config mode");
Serial.println(WiFi.softAPIP());
//if you used auto generated SSID, print it
Serial.println(myWiFiManager->getConfigPortalSSID());
}
void setup() {
Serial.begin(9600);
delay(10);
Ardiuno.begin(9600);
pinMode(TRIGGER_PIN, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(RESET_PIN, OUTPUT);
digitalWrite(RESET_PIN,HIGH);
digitalWrite(LED_BUILTIN,LOW);
flag = false;
WiFi.mode(WIFI_AP_STA);
wifiManager.setAPCallback(configModeCallback);
wifiManager.setConfigPortalTimeout(300);
wifiManager.autoConnect("Emulator-WP", "Password@123");
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(LED_BUILTIN, LOW);
}
webserver.on("/", handleRoot); //Which routine to handle at root location. This is display page
webserver.on("/submit", handleSubmit);
webserver.on("/stop", handleStop);
// Start the server
server.begin();
webserver.begin();
Serial.print("Wifi Connection Status: ");
Serial.println(status);
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
webserver.handleClient(); //Handle client requests
status = WiFi.status();
if (status != 0) {
// attempt to connect to Wifi network:
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to network : ");
wifiManager.setAPCallback(configModeCallback);
digitalWrite(LED_BUILTIN, HIGH);
}
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(LED_BUILTIN, LOW);
Serial.print("WL_CONNECTED ");
Serial.println(WiFi.localIP());
}
}
if (digitalRead(TRIGGER_PIN) == LOW) {
Serial.println("Reset Wifi Connection");
WiFiManager wifiManager;
wifiManager.resetSettings();
wifiManager.setTimeout(180);
WiFi.mode(WIFI_AP_STA);
}
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.print(req);
Serial.print('\r');
client.flush();
if (req.substring(0,10) == "POST /stop") {
digitalWrite(RESET_PIN,LOW);
delay(500);
digitalWrite(RESET_PIN,HIGH);
}
Ardiuno.print(req);
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nData Received ";
// Send the response to the client
client.print(s);
delay(1);
//Serial.println('\n');
Serial.println("Client disonnected");
// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}