| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | 
							- #define DEBUG_SERIAL //uncomment for Serial debugging statements
 
- #ifdef DEBUG_SERIAL
 
- #define DEBUG_BEGIN Serial.begin(115200)
 
- #define DEBUG_PRINT(x) Serial.println(x)
 
- #else
 
- #define DEBUG_PRINT(x) 
 
- #define DEBUG_BEGIN
 
- #endif
 
- //includes
 
- #include <PersWiFiManager.h>
 
- #include <ArduinoJson.h>
 
- #if defined(ESP8266)
 
- #include <ESP8266WiFi.h>
 
- #include <ESP8266SSDP.h>
 
- #include <ESP8266WebServer.h>
 
- #include <FS.h>
 
- #elif defined(ESP32)
 
- #include <WiFi.h>
 
- #include <ESP32SSDP.h>
 
- #include <WebServer.h>
 
- #include <SPIFFS.h>
 
- #else
 
- #error "Unsupported board class"
 
- #endif
 
- #include <DNSServer.h>
 
- #if defined(ESP8266)
 
- #define DEVICE_NAME "ESP8266 DEVICE"
 
- #elif defined(ESP32)
 
- #define DEVICE_NAME "ESP32 DEVICE"
 
- #endif
 
- //const char *metaRefreshStr = "<head><meta http-equiv=\"refresh\" content=\"1; url=/\" /></head><body><a href=\"/\">redirecting...</a></body>";
 
- const char *metaRefreshStr = "<script>window.location='/'</script><a href='/'>redirecting...</a>";
 
- //server objects
 
- #if defined(ESP8266)
 
- ESP8266WebServer server(80);
 
- #elif defined(ESP32)
 
- WebServer server(80);
 
- #endif
 
- DNSServer dnsServer;
 
- PersWiFiManager persWM(server, dnsServer);
 
- ////// Sample program data
 
- int x;
 
- String y;
 
- //code from fsbrowser example, consolidated.
 
- bool handleFileRead(String path) {
 
-   DEBUG_PRINT("handlefileread" + path);
 
-   if (path.endsWith("/")) path += "index.htm";
 
-   String contentType;
 
-   if (path.endsWith(".htm") || path.endsWith(".html")) contentType = "text/html";
 
-   else if (path.endsWith(".css")) contentType = "text/css";
 
-   else if (path.endsWith(".js")) contentType = "application/javascript";
 
-   else if (path.endsWith(".png")) contentType = "image/png";
 
-   else if (path.endsWith(".gif")) contentType = "image/gif";
 
-   else if (path.endsWith(".jpg")) contentType = "image/jpeg";
 
-   else if (path.endsWith(".ico")) contentType = "image/x-icon";
 
-   else if (path.endsWith(".xml")) contentType = "text/xml";
 
-   else if (path.endsWith(".pdf")) contentType = "application/x-pdf";
 
-   else if (path.endsWith(".zip")) contentType = "application/x-zip";
 
-   else if (path.endsWith(".gz")) contentType = "application/x-gzip";
 
-   else if (path.endsWith(".json")) contentType = "application/json";
 
-   else contentType = "text/plain";
 
-   //split filepath and extension
 
-   String prefix = path, ext = "";
 
-   int lastPeriod = path.lastIndexOf('.');
 
-   if (lastPeriod >= 0) {
 
-     prefix = path.substring(0, lastPeriod);
 
-     ext = path.substring(lastPeriod);
 
-   }
 
-   //look for smaller versions of file
 
-   //minified file, good (myscript.min.js)
 
-   if (SPIFFS.exists(prefix + ".min" + ext)) path = prefix + ".min" + ext;
 
-   //gzipped file, better (myscript.js.gz)
 
-   if (SPIFFS.exists(prefix + ext + ".gz")) path = prefix + ext + ".gz";
 
-   //min and gzipped file, best (myscript.min.js.gz)
 
-   if (SPIFFS.exists(prefix + ".min" + ext + ".gz")) path = prefix + ".min" + ext + ".gz";
 
-   if (SPIFFS.exists(path)) {
 
-     DEBUG_PRINT("sending file " + path);
 
-     File file = SPIFFS.open(path, "r");
 
-     if (server.hasArg("download"))
 
-       server.sendHeader("Content-Disposition", " attachment;");
 
-     if (server.uri().indexOf("nocache") < 0)
 
-       server.sendHeader("Cache-Control", " max-age=172800");
 
-     //optional alt arg (encoded url), server sends redirect to file on the web
 
-     if (WiFi.status() == WL_CONNECTED && server.hasArg("alt")) {
 
-       server.sendHeader("Location", server.arg("alt"), true);
 
-       server.send ( 302, "text/plain", "");
 
-     } else {
 
-       //server sends file
 
-       size_t sent = server.streamFile(file, contentType);
 
-     }
 
-     file.close();
 
-     return true;
 
-   } //if SPIFFS.exists
 
-   return false;
 
- } //bool handleFileRead
 
- void setup() {
 
-   DEBUG_BEGIN; //for terminal debugging
 
-   DEBUG_PRINT();
 
-   //allows serving of files from SPIFFS
 
-   SPIFFS.begin();
 
-   persWM.begin();
 
-   //reset saved settings, clears WiFi credentials e.g. for testing
 
-   //persWM.resetSettings();
 
-   //serve files from SPIFFS
 
-   server.onNotFound([]() {
 
-     if (!handleFileRead(server.uri())) {
 
-       server.sendHeader("Cache-Control", " max-age=172800");
 
-       server.send(302, "text/html", metaRefreshStr);
 
-     }
 
-   }); //server.onNotFound
 
-   //handles commands from webpage, sends live data in JSON format
 
-   server.on("/api", []() {
 
-     DEBUG_PRINT("server.on /api");
 
-     if (server.hasArg("x")) {
 
-       x = server.arg("x").toInt();
 
-       DEBUG_PRINT(String("x: ")+x);
 
-     } //if
 
-     if (server.hasArg("y")) {
 
-       y = server.arg("y");
 
-       DEBUG_PRINT("y: "+y);
 
-     } //if
 
-     //build json object of program data
 
-     StaticJsonBuffer<200> jsonBuffer;
 
-     JsonObject &json = jsonBuffer.createObject();
 
-     json["x"] = x;
 
-     json["y"] = y;
 
-     char jsonchar[200];
 
-     json.printTo(jsonchar); //print to char array, takes more memory but sends in one piece
 
-     server.send(200, "application/json", jsonchar);
 
-   }); //server.on api
 
-   //SSDP makes device visible on windows network
 
-   server.on("/description.xml", HTTP_GET, []() {
 
-     SSDP.schema(server.client());
 
-   });
 
-   SSDP.setSchemaURL("description.xml");
 
-   SSDP.setHTTPPort(80);
 
-   SSDP.setName(DEVICE_NAME);
 
-   SSDP.setURL("/");
 
-   SSDP.setDeviceType("upnp:rootdevice");
 
-   SSDP.begin();
 
-   server.begin();
 
-   DEBUG_PRINT("setup complete.");
 
- } //void setup
 
- void loop() {
 
-   dnsServer.processNextRequest();
 
-   server.handleClient();
 
-   // do stuff with x and y
 
- } //void loop
 
 
  |