parent
da1d9e732b
commit
910d50f11e
9 changed files with 313 additions and 27 deletions
@ -0,0 +1,178 @@ |
||||
#include <FS.h> |
||||
#include <SPIFFS.h> |
||||
#include <WiFi.h> |
||||
#include <WebServer.h> |
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32 |
||||
#include "esp32/rom/rtc.h" |
||||
#elif CONFIG_IDF_TARGET_ESP32S2 |
||||
#include "esp32s2/rom/rtc.h" |
||||
#elif CONFIG_IDF_TARGET_ESP32C3 |
||||
#include "esp32c3/rom/rtc.h" |
||||
#elif CONFIG_IDF_TARGET_ESP32S3 |
||||
#include "esp32s3/rom/rtc.h" |
||||
#else |
||||
#error Target CONFIG_IDF_TARGET is not supported |
||||
#endif |
||||
|
||||
// Replace with your network credentials
|
||||
const char* ssid = "RNode Test"; |
||||
const char* password = "somepass"; |
||||
|
||||
WebServer server(80); |
||||
|
||||
void console_dbg(String msg) { |
||||
Serial.print("[Webserver] "); |
||||
Serial.println(msg); |
||||
} |
||||
|
||||
bool exists(String path){ |
||||
bool yes = false; |
||||
File file = SPIFFS.open(path, "r"); |
||||
if(!file.isDirectory()){ |
||||
yes = true; |
||||
} |
||||
file.close(); |
||||
return yes; |
||||
} |
||||
|
||||
String console_get_content_type(String filename) { |
||||
if (server.hasArg("download")) { |
||||
return "application/octet-stream"; |
||||
} else if (filename.endsWith(".htm")) { |
||||
return "text/html"; |
||||
} else if (filename.endsWith(".html")) { |
||||
return "text/html"; |
||||
} else if (filename.endsWith(".css")) { |
||||
return "text/css"; |
||||
} else if (filename.endsWith(".js")) { |
||||
return "application/javascript"; |
||||
} else if (filename.endsWith(".png")) { |
||||
return "image/png"; |
||||
} else if (filename.endsWith(".gif")) { |
||||
return "image/gif"; |
||||
} else if (filename.endsWith(".jpg")) { |
||||
return "image/jpeg"; |
||||
} else if (filename.endsWith(".ico")) { |
||||
return "image/x-icon"; |
||||
} else if (filename.endsWith(".xml")) { |
||||
return "text/xml"; |
||||
} else if (filename.endsWith(".pdf")) { |
||||
return "application/x-pdf"; |
||||
} else if (filename.endsWith(".zip")) { |
||||
return "application/x-zip"; |
||||
} else if (filename.endsWith(".gz")) { |
||||
return "application/x-gzip"; |
||||
} |
||||
return "text/plain"; |
||||
} |
||||
|
||||
bool console_serve_file(String path) { |
||||
console_dbg("Request for: "+path); |
||||
if (path.endsWith("/")) { |
||||
path += "index.html"; |
||||
} |
||||
|
||||
String content_type = console_get_content_type(path); |
||||
String pathWithGz = path + ".gz"; |
||||
if (exists(pathWithGz) || exists(path)) { |
||||
if (exists(pathWithGz)) { |
||||
path += ".gz"; |
||||
} |
||||
|
||||
File file = SPIFFS.open(path, "r"); |
||||
console_dbg("Serving file to client"); |
||||
server.streamFile(file, content_type); |
||||
file.close(); |
||||
|
||||
console_dbg("File serving done"); |
||||
return true; |
||||
} |
||||
|
||||
console_dbg("Error: Could not open file for serving"); |
||||
return false; |
||||
} |
||||
|
||||
void console_register_pages() { |
||||
server.onNotFound([]() { |
||||
if (!console_serve_file(server.uri())) { |
||||
server.send(404, "text/plain", "Not Found"); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
void console_start() { |
||||
Serial.println(""); |
||||
console_dbg("Starting Access Point..."); |
||||
// WiFi.softAP(ssid, password);
|
||||
WiFi.softAP(bt_devname, password); |
||||
delay(150); |
||||
IPAddress ip(10, 0, 0, 1); |
||||
IPAddress nm(255, 255, 255, 0); |
||||
WiFi.softAPConfig(ip, ip, nm); |
||||
|
||||
if(!SPIFFS.begin(true)){ |
||||
console_dbg("Error: Could not mount SPIFFS"); |
||||
return; |
||||
} else { |
||||
console_dbg("SPIFFS Ready"); |
||||
} |
||||
|
||||
console_register_pages(); |
||||
server.begin(); |
||||
led_indicate_console(); |
||||
} |
||||
|
||||
void console_loop(){ |
||||
server.handleClient(); |
||||
|
||||
// Internally, this yields the thread and allows
|
||||
// other tasks to run.
|
||||
delay(5); |
||||
} |
||||
|
||||
// void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
|
||||
// Serial.printf("Listing directory: %s\r\n", dirname);
|
||||
|
||||
// File root = fs.open(dirname);
|
||||
// if(!root){
|
||||
// Serial.println("- failed to open directory");
|
||||
// return;
|
||||
// }
|
||||
// if(!root.isDirectory()){
|
||||
// Serial.println(" - not a directory");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// File file = root.openNextFile();
|
||||
// while(file){
|
||||
// if(file.isDirectory()){
|
||||
// Serial.print(" DIR : ");
|
||||
// Serial.println(file.name());
|
||||
// if(levels){
|
||||
// listDir(fs, file.path(), levels -1);
|
||||
// }
|
||||
// } else {
|
||||
// Serial.print(" FILE: ");
|
||||
// Serial.print(file.name());
|
||||
// Serial.print("\tSIZE: ");
|
||||
// Serial.println(file.size());
|
||||
// }
|
||||
// file = root.openNextFile();
|
||||
// }
|
||||
// }
|
||||
|
||||
// void readFile(fs::FS &fs, const char * path){
|
||||
// Serial.printf("Reading file: %s\r\n", path);
|
||||
|
||||
// File file = fs.open(path);
|
||||
// if(!file || file.isDirectory()){
|
||||
// Serial.println("− failed to open file for reading");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// Serial.println("− read from file:");
|
||||
// while(file.available()){
|
||||
// Serial.write(file.read());
|
||||
// }
|
||||
// }
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Loading…
Reference in new issue