Add option to set up for wifi or AP on compile #53
							
								
								
									
										0
									
								
								vulpes/.gitignore → .gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										0
									
								
								vulpes/.gitignore → .gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,183 +0,0 @@
 | 
			
		||||
/*********
 | 
			
		||||
  Rui Santos
 | 
			
		||||
  Complete project details at https://RandomNerdTutorials.com/esp32-esp8266-input-data-html-form/
 | 
			
		||||
  
 | 
			
		||||
  Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
  of this software and associated documentation files.
 | 
			
		||||
  
 | 
			
		||||
  The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
  copies or substantial portions of the Software.
 | 
			
		||||
*********/
 | 
			
		||||
 | 
			
		||||
// include wifi password
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#include <Arduino.h>
 | 
			
		||||
#include <WiFi.h>
 | 
			
		||||
#include <AsyncTCP.h>
 | 
			
		||||
#include <SPIFFS.h>
 | 
			
		||||
#include <Preferences.h>
 | 
			
		||||
 | 
			
		||||
// download zip from https://github.com/me-no-dev/ESPAsyncWebServer and install.
 | 
			
		||||
#include <ESPAsyncWebServer.h>
 | 
			
		||||
 | 
			
		||||
AsyncWebServer server(80);
 | 
			
		||||
 | 
			
		||||
// Read from config.h
 | 
			
		||||
const char* ssid = WIFI_SSID;
 | 
			
		||||
const char* password = WIFI_PASSWORD;
 | 
			
		||||
 | 
			
		||||
const char* PARAM_STRING = "inputString";
 | 
			
		||||
const char* PARAM_INT = "inputInt";
 | 
			
		||||
const char* PARAM_FLOAT = "inputFloat";
 | 
			
		||||
 | 
			
		||||
// HTML web page to handle 3 input fields (inputString, inputInt, inputFloat)
 | 
			
		||||
const char index_html[] PROGMEM = R"rawliteral(
 | 
			
		||||
<!DOCTYPE HTML><html><head>
 | 
			
		||||
  <title>ESP Input Form</title>
 | 
			
		||||
  <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
  <!--<script>
 | 
			
		||||
    function submitMessage() {
 | 
			
		||||
      alert("Saved value to ESP SPIFFS");
 | 
			
		||||
      setTimeout(function(){ document.location.reload(false); }, 500);   
 | 
			
		||||
    }
 | 
			
		||||
  </script>-->
 | 
			
		||||
  </head><body>
 | 
			
		||||
  <form action="/get">
 | 
			
		||||
    inputString (current value %inputString%): <input type="text" name="inputString">
 | 
			
		||||
    <!--<input type="submit" value="Submit" ">
 | 
			
		||||
  </form>--><br>
 | 
			
		||||
  <!--<form action="/get" target="hidden-form">-->
 | 
			
		||||
    inputInt (current value %inputInt%): <input type="number " name="inputInt">
 | 
			
		||||
    <!--<input type="submit" value="Submit" ">
 | 
			
		||||
  </form>--><br>
 | 
			
		||||
  <!--<form action="/get" target="hidden-form">-->
 | 
			
		||||
    inputFloat (current value %inputFloat%): <input type="number " name="inputFloat">
 | 
			
		||||
    <input type="submit" value="Submit" ">
 | 
			
		||||
  </form>
 | 
			
		||||
  <!--<iframe style="display:none" name="hidden-form"></iframe>-->
 | 
			
		||||
</body></html>)rawliteral";
 | 
			
		||||
 | 
			
		||||
void notFound(AsyncWebServerRequest *request) {
 | 
			
		||||
  request->send(404, "text/plain", "Not found");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String readFile(fs::FS &fs, const char * path){
 | 
			
		||||
  Serial.printf("Reading file: %s\r\n", path);
 | 
			
		||||
  File file = fs.open(path, "r");
 | 
			
		||||
  if(!file || file.isDirectory()){
 | 
			
		||||
    Serial.println("- empty file or failed to open file");
 | 
			
		||||
    return String();
 | 
			
		||||
  }
 | 
			
		||||
  Serial.println("- read from file:");
 | 
			
		||||
  String fileContent;
 | 
			
		||||
  while(file.available()){
 | 
			
		||||
    fileContent+=String((char)file.read());
 | 
			
		||||
  }
 | 
			
		||||
  file.close();
 | 
			
		||||
  Serial.println(fileContent);
 | 
			
		||||
  return fileContent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void writeFile(fs::FS &fs, const char * path, const char * message){
 | 
			
		||||
  Serial.printf("Writing file: %s\r\n", path);
 | 
			
		||||
  File file = fs.open(path, "w");
 | 
			
		||||
  if(!file){
 | 
			
		||||
    Serial.println("- failed to open file for writing");
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  if(file.print(message)){
 | 
			
		||||
    Serial.println("- file written");
 | 
			
		||||
  } else {
 | 
			
		||||
    Serial.println("- write failed");
 | 
			
		||||
  }
 | 
			
		||||
  file.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Replaces placeholder with stored values
 | 
			
		||||
String processor(const String& var){
 | 
			
		||||
  //Serial.println(var);
 | 
			
		||||
  if(var == "inputString"){
 | 
			
		||||
    return readFile(SPIFFS, "/inputString.txt");
 | 
			
		||||
  }
 | 
			
		||||
  else if(var == "inputInt"){
 | 
			
		||||
    return readFile(SPIFFS, "/inputInt.txt");
 | 
			
		||||
  }
 | 
			
		||||
  else if(var == "inputFloat"){
 | 
			
		||||
    return readFile(SPIFFS, "/inputFloat.txt");
 | 
			
		||||
  }
 | 
			
		||||
  return String();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void setup() {
 | 
			
		||||
  Serial.begin(115200);
 | 
			
		||||
  // Initialize SPIFFS
 | 
			
		||||
  #ifdef ESP32
 | 
			
		||||
    if(!SPIFFS.begin(true)){
 | 
			
		||||
      Serial.println("An Error has occurred while mounting SPIFFS");
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  #else
 | 
			
		||||
    if(!SPIFFS.begin()){
 | 
			
		||||
      Serial.println("An Error has occurred while mounting SPIFFS");
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  WiFi.mode(WIFI_STA);
 | 
			
		||||
  WiFi.begin(ssid, password);
 | 
			
		||||
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
 | 
			
		||||
    Serial.println("WiFi Failed!");
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  Serial.println();
 | 
			
		||||
  Serial.print("IP Address: ");
 | 
			
		||||
  Serial.println(WiFi.localIP());
 | 
			
		||||
 | 
			
		||||
  // Send web page with input fields to client
 | 
			
		||||
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    request->send_P(200, "text/html", index_html, processor);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  // Send a GET request to <ESP_IP>/get?inputString=<inputMessage>
 | 
			
		||||
  server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
 | 
			
		||||
    String inputMessage;
 | 
			
		||||
    // GET inputString value on <ESP_IP>/get?inputString=<inputMessage>
 | 
			
		||||
    if (request->hasParam(PARAM_STRING)) {
 | 
			
		||||
      inputMessage = request->getParam(PARAM_STRING)->value();
 | 
			
		||||
      writeFile(SPIFFS, "/inputString.txt", inputMessage.c_str());
 | 
			
		||||
    }
 | 
			
		||||
    // GET inputInt value on <ESP_IP>/get?inputInt=<inputMessage>
 | 
			
		||||
    else if (request->hasParam(PARAM_INT)) {
 | 
			
		||||
      inputMessage = request->getParam(PARAM_INT)->value();
 | 
			
		||||
      writeFile(SPIFFS, "/inputInt.txt", inputMessage.c_str());
 | 
			
		||||
    }
 | 
			
		||||
    // GET inputFloat value on <ESP_IP>/get?inputFloat=<inputMessage>
 | 
			
		||||
    else if (request->hasParam(PARAM_FLOAT)) {
 | 
			
		||||
      inputMessage = request->getParam(PARAM_FLOAT)->value();
 | 
			
		||||
      writeFile(SPIFFS, "/inputFloat.txt", inputMessage.c_str());
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      inputMessage = "No message sent";
 | 
			
		||||
    }
 | 
			
		||||
    Serial.println(inputMessage);
 | 
			
		||||
    request->send(200, "text/text", inputMessage);
 | 
			
		||||
  });
 | 
			
		||||
  server.onNotFound(notFound);
 | 
			
		||||
  server.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop() {
 | 
			
		||||
  // To access your stored values on inputString, inputInt, inputFloat
 | 
			
		||||
  String yourInputString = readFile(SPIFFS, "/inputString.txt");
 | 
			
		||||
  Serial.print("*** Your inputString: ");
 | 
			
		||||
  Serial.println(yourInputString);
 | 
			
		||||
  
 | 
			
		||||
  int yourInputInt = readFile(SPIFFS, "/inputInt.txt").toInt();
 | 
			
		||||
  Serial.print("*** Your inputInt: ");
 | 
			
		||||
  Serial.println(yourInputInt);
 | 
			
		||||
  
 | 
			
		||||
  float yourInputFloat = readFile(SPIFFS, "/inputFloat.txt").toFloat();
 | 
			
		||||
  Serial.print("*** Your inputFloat: ");
 | 
			
		||||
  Serial.println(yourInputFloat);
 | 
			
		||||
  delay(5000);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,169 +0,0 @@
 | 
			
		||||
/*********
 | 
			
		||||
  Rui Santos
 | 
			
		||||
  Complete project details at https://randomnerdtutorials.com
 | 
			
		||||
*********/
 | 
			
		||||
// include wifi password
 | 
			
		||||
#include "config.h"
 | 
			
		||||
// Load Wi-Fi library
 | 
			
		||||
#include <WiFi.h>
 | 
			
		||||
// Load Preferences library
 | 
			
		||||
#include <Preferences.h>
 | 
			
		||||
// Define preferences instance
 | 
			
		||||
Preferences prefs;
 | 
			
		||||
// Open up preferences with defined namespace
 | 
			
		||||
prefs.begin("vulpes", false);
 | 
			
		||||
 | 
			
		||||
// Replace with your network credentials
 | 
			
		||||
const char* ssid = WIFI_SSID;
 | 
			
		||||
const char* password = WIFI_PASSWORD;
 | 
			
		||||
 | 
			
		||||
// Set web server port number to 80
 | 
			
		||||
WiFiServer server(80);
 | 
			
		||||
 | 
			
		||||
// Variable to store the HTTP request
 | 
			
		||||
String header;
 | 
			
		||||
 | 
			
		||||
// Auxiliar variables to store the current output state
 | 
			
		||||
String output26State = "off";
 | 
			
		||||
String output27State = "off";
 | 
			
		||||
 | 
			
		||||
// Assign output variables to GPIO pins
 | 
			
		||||
const int output26 = 26;
 | 
			
		||||
const int output27 = 27;
 | 
			
		||||
 | 
			
		||||
// Current time
 | 
			
		||||
unsigned long currentTime = millis();
 | 
			
		||||
// Previous time
 | 
			
		||||
unsigned long previousTime = 0;
 | 
			
		||||
// Define timeout time in milliseconds (example: 2000ms = 2s)
 | 
			
		||||
const long timeoutTime = 2000;
 | 
			
		||||
 | 
			
		||||
void setup() {
 | 
			
		||||
  Serial.begin(115200);
 | 
			
		||||
  // Initialize the output variables as outputs
 | 
			
		||||
  pinMode(output26, OUTPUT);
 | 
			
		||||
  pinMode(output27, OUTPUT);
 | 
			
		||||
  // Set outputs to LOW
 | 
			
		||||
  digitalWrite(output26, LOW);
 | 
			
		||||
  digitalWrite(output27, LOW);
 | 
			
		||||
 | 
			
		||||
  preferences.putString("ssid", ssid);
 | 
			
		||||
  preferences.putString("password", password);
 | 
			
		||||
 | 
			
		||||
  Serial.println("Network Credentials Saved using Preferences");
 | 
			
		||||
 | 
			
		||||
  preferences.end();
 | 
			
		||||
 | 
			
		||||
  // Connect to Wi-Fi network with SSID and password
 | 
			
		||||
  Serial.print("Connecting to ");
 | 
			
		||||
  Serial.println(ssid);
 | 
			
		||||
  WiFi.begin(ssid, password);
 | 
			
		||||
  while (WiFi.status() != WL_CONNECTED) {
 | 
			
		||||
    delay(500);
 | 
			
		||||
    Serial.print(".");
 | 
			
		||||
  }
 | 
			
		||||
  // Print local IP address and start web server
 | 
			
		||||
  Serial.println("");
 | 
			
		||||
  Serial.println("WiFi connected.");
 | 
			
		||||
  Serial.println("IP address: ");
 | 
			
		||||
  Serial.println(WiFi.localIP());
 | 
			
		||||
  server.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop(){
 | 
			
		||||
  WiFiClient client = server.available();   // Listen for incoming clients
 | 
			
		||||
 | 
			
		||||
  if (client) {                             // If a new client connects,
 | 
			
		||||
    currentTime = millis();
 | 
			
		||||
    previousTime = currentTime;
 | 
			
		||||
    Serial.println("New Client.");          // print a message out in the serial port
 | 
			
		||||
    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
 | 
			
		||||
        Serial.write(c);                    // print it out the serial monitor
 | 
			
		||||
        header += 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) {
 | 
			
		||||
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
 | 
			
		||||
            // and a content-type so the client knows what's coming, then a blank line:
 | 
			
		||||
            client.println("HTTP/1.1 200 OK");
 | 
			
		||||
            client.println("Content-type:text/html");
 | 
			
		||||
            client.println("Connection: close");
 | 
			
		||||
            client.println();
 | 
			
		||||
 | 
			
		||||
            // turns the GPIOs on and off
 | 
			
		||||
            if (header.indexOf("GET /26/on") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 26 on");
 | 
			
		||||
              output26State = "on";
 | 
			
		||||
              digitalWrite(output26, HIGH);
 | 
			
		||||
            } else if (header.indexOf("GET /26/off") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 26 off");
 | 
			
		||||
              output26State = "off";
 | 
			
		||||
              digitalWrite(output26, LOW);
 | 
			
		||||
            } else if (header.indexOf("GET /27/on") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 27 on");
 | 
			
		||||
              output27State = "on";
 | 
			
		||||
              digitalWrite(output27, HIGH);
 | 
			
		||||
            } else if (header.indexOf("GET /27/off") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 27 off");
 | 
			
		||||
              output27State = "off";
 | 
			
		||||
              digitalWrite(output27, LOW);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Display the HTML web page
 | 
			
		||||
            client.println("<!DOCTYPE html><html>");
 | 
			
		||||
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
 | 
			
		||||
            client.println("<link rel=\"icon\" href=\"data:,\">");
 | 
			
		||||
            // CSS to style the on/off buttons
 | 
			
		||||
            // Feel free to change the background-color and font-size attributes to fit your preferences
 | 
			
		||||
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
 | 
			
		||||
            client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
 | 
			
		||||
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
 | 
			
		||||
            client.println(".button2 {background-color: #555555;}</style></head>");
 | 
			
		||||
 | 
			
		||||
            // Web Page Heading
 | 
			
		||||
            client.println("<body><h1>ESP32 Web Server</h1>");
 | 
			
		||||
 | 
			
		||||
            // Display current state, and ON/OFF buttons for GPIO 26
 | 
			
		||||
            client.println("<p>GPIO 26 - State " + output26State + "</p>");
 | 
			
		||||
            // If the output26State is off, it displays the ON button
 | 
			
		||||
            if (output26State=="off") {
 | 
			
		||||
              client.println("<p><a href=\"/26/on\"><button class=\"button\">ON</button></a></p>");
 | 
			
		||||
            } else {
 | 
			
		||||
              client.println("<p><a href=\"/26/off\"><button class=\"button button2\">OFF</button></a></p>");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Display current state, and ON/OFF buttons for GPIO 27
 | 
			
		||||
            client.println("<p>GPIO 27 - State " + output27State + "</p>");
 | 
			
		||||
            // If the output27State is off, it displays the ON button
 | 
			
		||||
            if (output27State=="off") {
 | 
			
		||||
              client.println("<p><a href=\"/27/on\"><button class=\"button\">ON</button></a></p>");
 | 
			
		||||
            } else {
 | 
			
		||||
              client.println("<p><a href=\"/27/off\"><button class=\"button button2\">OFF</button></a></p>");
 | 
			
		||||
            }
 | 
			
		||||
            client.println("</body></html>");
 | 
			
		||||
 | 
			
		||||
            // The HTTP response ends with another blank line
 | 
			
		||||
            client.println();
 | 
			
		||||
            // Break out of the while loop
 | 
			
		||||
            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
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // Clear the header variable
 | 
			
		||||
    header = "";
 | 
			
		||||
    // Close the connection
 | 
			
		||||
    client.stop();
 | 
			
		||||
    Serial.println("Client disconnected.");
 | 
			
		||||
    Serial.println("");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,157 +0,0 @@
 | 
			
		||||
/*********
 | 
			
		||||
  Rui Santos
 | 
			
		||||
  Complete project details at https://randomnerdtutorials.com  
 | 
			
		||||
*********/
 | 
			
		||||
 | 
			
		||||
// include wifi password
 | 
			
		||||
#include "config.h"
 | 
			
		||||
// Load Wi-Fi library
 | 
			
		||||
#include <WiFi.h>
 | 
			
		||||
 | 
			
		||||
// Replace with your network credentials
 | 
			
		||||
const char* ssid = WIFI_SSID;
 | 
			
		||||
const char* password = WIFI_PASSWORD;
 | 
			
		||||
 | 
			
		||||
// Set web server port number to 80
 | 
			
		||||
WiFiServer server(80);
 | 
			
		||||
 | 
			
		||||
// Variable to store the HTTP request
 | 
			
		||||
String header;
 | 
			
		||||
 | 
			
		||||
// Auxiliar variables to store the current output state
 | 
			
		||||
String output26State = "off";
 | 
			
		||||
String output27State = "off";
 | 
			
		||||
 | 
			
		||||
// Assign output variables to GPIO pins
 | 
			
		||||
const int output26 = 26;
 | 
			
		||||
const int output27 = 27;
 | 
			
		||||
 | 
			
		||||
// Current time
 | 
			
		||||
unsigned long currentTime = millis();
 | 
			
		||||
// Previous time
 | 
			
		||||
unsigned long previousTime = 0; 
 | 
			
		||||
// Define timeout time in milliseconds (example: 2000ms = 2s)
 | 
			
		||||
const long timeoutTime = 2000;
 | 
			
		||||
 | 
			
		||||
void setup() {
 | 
			
		||||
  Serial.begin(115200);
 | 
			
		||||
  // Initialize the output variables as outputs
 | 
			
		||||
  pinMode(output26, OUTPUT);
 | 
			
		||||
  pinMode(output27, OUTPUT);
 | 
			
		||||
  // Set outputs to LOW
 | 
			
		||||
  digitalWrite(output26, LOW);
 | 
			
		||||
  digitalWrite(output27, LOW);
 | 
			
		||||
 | 
			
		||||
  // Connect to Wi-Fi network with SSID and password
 | 
			
		||||
  Serial.print("Connecting to ");
 | 
			
		||||
  Serial.println(ssid);
 | 
			
		||||
  WiFi.begin(ssid, password);
 | 
			
		||||
  while (WiFi.status() != WL_CONNECTED) {
 | 
			
		||||
    delay(500);
 | 
			
		||||
    Serial.print(".");
 | 
			
		||||
  }
 | 
			
		||||
  // Print local IP address and start web server
 | 
			
		||||
  Serial.println("");
 | 
			
		||||
  Serial.println("WiFi connected.");
 | 
			
		||||
  Serial.println("IP address: ");
 | 
			
		||||
  Serial.println(WiFi.localIP());
 | 
			
		||||
  server.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop(){
 | 
			
		||||
  WiFiClient client = server.available();   // Listen for incoming clients
 | 
			
		||||
 | 
			
		||||
  if (client) {                             // If a new client connects,
 | 
			
		||||
    currentTime = millis();
 | 
			
		||||
    previousTime = currentTime;
 | 
			
		||||
    Serial.println("New Client.");          // print a message out in the serial port
 | 
			
		||||
    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
 | 
			
		||||
        Serial.write(c);                    // print it out the serial monitor
 | 
			
		||||
        header += 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) {
 | 
			
		||||
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
 | 
			
		||||
            // and a content-type so the client knows what's coming, then a blank line:
 | 
			
		||||
            client.println("HTTP/1.1 200 OK");
 | 
			
		||||
            client.println("Content-type:text/html");
 | 
			
		||||
            client.println("Connection: close");
 | 
			
		||||
            client.println();
 | 
			
		||||
            
 | 
			
		||||
            // turns the GPIOs on and off
 | 
			
		||||
            if (header.indexOf("GET /26/on") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 26 on");
 | 
			
		||||
              output26State = "on";
 | 
			
		||||
              digitalWrite(output26, HIGH);
 | 
			
		||||
            } else if (header.indexOf("GET /26/off") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 26 off");
 | 
			
		||||
              output26State = "off";
 | 
			
		||||
              digitalWrite(output26, LOW);
 | 
			
		||||
            } else if (header.indexOf("GET /27/on") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 27 on");
 | 
			
		||||
              output27State = "on";
 | 
			
		||||
              digitalWrite(output27, HIGH);
 | 
			
		||||
            } else if (header.indexOf("GET /27/off") >= 0) {
 | 
			
		||||
              Serial.println("GPIO 27 off");
 | 
			
		||||
              output27State = "off";
 | 
			
		||||
              digitalWrite(output27, LOW);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // Display the HTML web page
 | 
			
		||||
            client.println("<!DOCTYPE html><html>");
 | 
			
		||||
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
 | 
			
		||||
            client.println("<link rel=\"icon\" href=\"data:,\">");
 | 
			
		||||
            // CSS to style the on/off buttons 
 | 
			
		||||
            // Feel free to change the background-color and font-size attributes to fit your preferences
 | 
			
		||||
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
 | 
			
		||||
            client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
 | 
			
		||||
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
 | 
			
		||||
            client.println(".button2 {background-color: #555555;}</style></head>");
 | 
			
		||||
            
 | 
			
		||||
            // Web Page Heading
 | 
			
		||||
            client.println("<body><h1>ESP32 Web Server</h1>");
 | 
			
		||||
            
 | 
			
		||||
            // Display current state, and ON/OFF buttons for GPIO 26  
 | 
			
		||||
            client.println("<p>GPIO 26 - State " + output26State + "</p>");
 | 
			
		||||
            // If the output26State is off, it displays the ON button       
 | 
			
		||||
            if (output26State=="off") {
 | 
			
		||||
              client.println("<p><a href=\"/26/on\"><button class=\"button\">ON</button></a></p>");
 | 
			
		||||
            } else {
 | 
			
		||||
              client.println("<p><a href=\"/26/off\"><button class=\"button button2\">OFF</button></a></p>");
 | 
			
		||||
            } 
 | 
			
		||||
               
 | 
			
		||||
            // Display current state, and ON/OFF buttons for GPIO 27  
 | 
			
		||||
            client.println("<p>GPIO 27 - State " + output27State + "</p>");
 | 
			
		||||
            // If the output27State is off, it displays the ON button       
 | 
			
		||||
            if (output27State=="off") {
 | 
			
		||||
              client.println("<p><a href=\"/27/on\"><button class=\"button\">ON</button></a></p>");
 | 
			
		||||
            } else {
 | 
			
		||||
              client.println("<p><a href=\"/27/off\"><button class=\"button button2\">OFF</button></a></p>");
 | 
			
		||||
            }
 | 
			
		||||
            client.println("</body></html>");
 | 
			
		||||
            
 | 
			
		||||
            // The HTTP response ends with another blank line
 | 
			
		||||
            client.println();
 | 
			
		||||
            // Break out of the while loop
 | 
			
		||||
            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
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // Clear the header variable
 | 
			
		||||
    header = "";
 | 
			
		||||
    // Close the connection
 | 
			
		||||
    client.stop();
 | 
			
		||||
    Serial.println("Client disconnected.");
 | 
			
		||||
    Serial.println("");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								test.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								test.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
    <head>
 | 
			
		||||
        <title></title>
 | 
			
		||||
    </head>
 | 
			
		||||
    <style>
 | 
			
		||||
.inv {
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
    </style>
 | 
			
		||||
    <body>
 | 
			
		||||
        <select id="target">
 | 
			
		||||
            <option value="">Select...</option>
 | 
			
		||||
            <option value="content_1">Option 1</option>
 | 
			
		||||
            <option value="content_2">Option 2</option>
 | 
			
		||||
            <option value="content_3">Option 3</option>
 | 
			
		||||
        <select>
 | 
			
		||||
 | 
			
		||||
        <div id="content_1" class="inv">Content 1</div>
 | 
			
		||||
        <div id="content_2" class="inv">Content 2</div>
 | 
			
		||||
        <div id="content_3" class="inv">Content 3</div>
 | 
			
		||||
        
 | 
			
		||||
        <script>
 | 
			
		||||
            document
 | 
			
		||||
                .getElementById('target')
 | 
			
		||||
                .addEventListener('change', function () {
 | 
			
		||||
                    'use strict';
 | 
			
		||||
                    var vis = document.querySelector('.vis'),   
 | 
			
		||||
                        target = document.getElementById(this.value);
 | 
			
		||||
                    if (vis !== null) {
 | 
			
		||||
                        vis.className = 'inv';
 | 
			
		||||
                    }
 | 
			
		||||
                    if (target !== null ) {
 | 
			
		||||
                        target.className = 'vis';
 | 
			
		||||
                    }
 | 
			
		||||
            });
 | 
			
		||||
        </script>
 | 
			
		||||
    </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										10
									
								
								vulpes/.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vulpes/.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    // See http://go.microsoft.com/fwlink/?LinkId=827846
 | 
			
		||||
    // for the documentation about the extensions.json format
 | 
			
		||||
    "recommendations": [
 | 
			
		||||
        "platformio.platformio-ide"
 | 
			
		||||
    ],
 | 
			
		||||
    "unwantedRecommendations": [
 | 
			
		||||
        "ms-vscode.cpptools-extension-pack"
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user