#include <LiquidCrystal_PCF8574.h>
#include <WiFi.h>
LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display
//Esta aplicación crea un nuevo punto de acceso WiFi.
//Modificar las variables ssid y password y conectarse desde un móvil o PC utilizando estos parámetros.
const char* ssid = "ESP32";
const char* password = "123456789";
String request;
unsigned long currentTime = millis();
unsigned long previousTime = 0;
const long timeoutTime = 2000;
WiFiServer server(80);
#define I0 35
#define I1 32
#define I2 33
#define I3 25
#define I4 26
#define I5 27
#define I6 14
#define Q0 13
#define Q1 12
#define Q2 15
#define Q3 2
#define Q4 4
#define Q5 16
#define Q6 17
#define estado_I0 digitalRead(I0)
#define estado_I1 digitalRead(I1)
#define estado_I2 digitalRead(I2)
#define estado_I3 digitalRead(I3)
#define estado_I4 digitalRead(I4)
#define estado_I5 digitalRead(I5)
#define estado_I6 digitalRead(I6)
boolean estado_Q0 = LOW;
boolean estado_Q1 = LOW;
boolean estado_Q2 = LOW;
boolean estado_Q3 = LOW;
boolean estado_Q4 = LOW;
boolean estado_Q5 = LOW;
boolean estado_Q6 = LOW;
byte alto[] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B00000,
};
byte bajo[] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B11111,
B00000,
};
void estados() {
lcd.setCursor(0,0);
lcd.print("IP: ");
lcd.print(WiFi.softAPIP());
lcd.setCursor(0,1);
lcd.print("I: ");
lcd.write(digitalRead(I0));
lcd.print(" ");
lcd.write(digitalRead(I1));
lcd.print(" ");
lcd.write(digitalRead(I2));
lcd.print(" ");
lcd.write(digitalRead(I3));
lcd.print(" ");
lcd.write(digitalRead(I4));
lcd.print(" ");
lcd.write(digitalRead(I5));
lcd.print(" ");
lcd.write(digitalRead(I6));
lcd.setCursor(0,2);
lcd.print(" 0 1 2 3 4 5 6");
lcd.setCursor(0,3);
lcd.print("Q: ");
lcd.write(digitalRead(Q0));
lcd.print(" ");
lcd.write(digitalRead(Q1));
lcd.print(" ");
lcd.write(digitalRead(Q2));
lcd.print(" ");
lcd.write(digitalRead(Q3));
lcd.print(" ");
lcd.write(digitalRead(Q4));
lcd.print(" ");
lcd.write(digitalRead(Q5));
lcd.print(" ");
lcd.write(digitalRead(Q6));
}
void setup() {
// put your setup code here, to run once:
pinMode(I0, INPUT);
pinMode(I1, INPUT);
pinMode(I2, INPUT);
pinMode(I3, INPUT);
pinMode(I4, INPUT);
pinMode(I5, INPUT);
pinMode(I6, INPUT);
pinMode(Q0, OUTPUT);
pinMode(Q1, OUTPUT);
pinMode(Q2, OUTPUT);
pinMode(Q3, OUTPUT);
pinMode(Q4, OUTPUT);
pinMode(Q5, OUTPUT);
pinMode(Q6, OUTPUT);
lcd.begin(20, 4);
lcd.createChar(0, bajo);
lcd.createChar(1, alto);
delay(200);
lcd.setBacklight(255);
WiFi.softAP(ssid, password);
server.begin();
}
void loop() {
// put your main code here, to run repeatedly:
WiFiClient client = server.available(); // Listen for incoming clients
digitalWrite(Q0, estado_Q0);
digitalWrite(Q1, estado_Q1);
digitalWrite(Q2, estado_Q2);
digitalWrite(Q3, estado_Q3);
digitalWrite(Q4, estado_Q4);
digitalWrite(Q5, estado_Q5);
digitalWrite(Q6, estado_Q6);
estados();
if (client) // If a new client connects,
{
currentTime = millis();
previousTime = currentTime;
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected() && currentTime - previousTime <= timeoutTime) // loop while the client's connected
{
currentTime = millis();
if (client.available()) // if there's bytes to read from the client,
{
char c = client.read(); // read a byte, then
request += c;
if (c == '\n') // if the byte is a newline character
{
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0)
{
if (request.indexOf("/Q0_on") != -1)
estado_Q0 = HIGH;
if (request.indexOf("/Q0_off") != -1)
estado_Q0 = LOW;
if (request.indexOf("/Q1_on") != -1)
estado_Q1 = HIGH;
if (request.indexOf("/Q1_off") != -1)
estado_Q1 = LOW;
if (request.indexOf("/Q2_on") != -1)
estado_Q2 = HIGH;
if (request.indexOf("/Q2_off") != -1)
estado_Q2 = LOW;
if (request.indexOf("/Q3_on") != -1)
estado_Q3 = HIGH;
if (request.indexOf("/Q3_off") != -1)
estado_Q3 = LOW;
if (request.indexOf("/Q4_on") != -1)
estado_Q4 = HIGH;
if (request.indexOf("/Q4_off") != -1)
estado_Q4 = LOW;
if (request.indexOf("/Q5_on") != -1)
estado_Q5 = HIGH;
if (request.indexOf("/Q5_off") != -1)
estado_Q5 = LOW;
if (request.indexOf("/Q6_on") != -1)
estado_Q6 = HIGH;
if (request.indexOf("/Q6_off") != -1)
estado_Q6 = LOW;
// HTTP Response in the form of HTML Web Page
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// Display the HTML web page
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
// CSS Styling for Buttons and Web Page
client.println("<style>");
client.println("html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
client.println("body {margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}");
client.println(".button {display: inline-table;width: 80px;background-color: #1abc9c;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 20px;margin: 0px auto 35px;cursor: pointer;border-radius: 20px;}");
client.println(".button-on {background-color: #1abc9c;}");
client.println(".button-on:active {background-color: #16a085;}");
client.println(".button-off {background-color: #34495e;}");
client.println(".button-off:active {background-color: #2c3e50;}");
client.println("</style>");
client.println("</head>");
// The main body of the Web Page
client.println("<body>");
client.println("<h1>ESP8266 Web Server</h1>\n");
client.println("<h3>Using Access Point (AP) Mode</h3>\n");
if (estado_Q0)
client.println("<a class=\"button button-on\" href=\"/Q0_off\">Q0: ON</a>");
else
client.println("<a class=\"button button-off\" href=\"/Q0_on\">Q0: OFF</a>");
if (estado_Q1)
client.println("<a class=\"button button-on\" href=\"/Q1_off\">Q1: ON</a>");
else
client.println("<a class=\"button button-off\" href=\"/Q1_on\">Q1: OFF</a>");
if (estado_Q2)
client.println("<a class=\"button button-on\" href=\"/Q2_off\">Q2: ON</a>");
else
client.println("<a class=\"button button-off\" href=\"/Q2_on\">Q2: OFF</a>");
if (estado_Q3)
client.println("<a class=\"button button-on\" href=\"/Q3_off\">Q3: ON</a>");
else
client.println("<a class=\"button button-off\" href=\"/Q3_on\">Q3: OFF</a>");
if (estado_Q4)
client.println("<a class=\"button button-on\" href=\"/Q4_off\">Q4: ON</a>");
else
client.println("<a class=\"button button-off\" href=\"/Q4_on\">Q4: OFF</a>");
if (estado_Q5)
client.println("<a class=\"button button-on\" href=\"/Q5_off\">Q5: ON</a>");
else
client.println("<a class=\"button button-off\" href=\"/Q5_on\">Q5: OFF</a>");
if (estado_Q6)
client.println("<a class=\"button button-on\" href=\"/Q6_off\">Q6: ON</a>");
else
client.println("<a class=\"button button-off\" href=\"/Q6_on\">Q6: OFF</a>");
client.println("</body>");
client.println("</html>");
client.println("");
break;
}
else // if you got a newline, then clear currentLine
currentLine = "";
}
else if (c != '\r') // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
request = "";
client.stop();
}
}