diff --git a/SW/ESPlan_webserver_SD_read/ESPlan_webserver_SD_read.ino b/SW/ESPlan_webserver_SD_read/ESPlan_webserver_SD_read.ino index 14b98d3..5936990 100644 --- a/SW/ESPlan_webserver_SD_read/ESPlan_webserver_SD_read.ino +++ b/SW/ESPlan_webserver_SD_read/ESPlan_webserver_SD_read.ino @@ -1,3 +1,9 @@ +/* Webserver reads from SD text file test for LaskaKit ESPlan + * After boot connect to http://esplan.local or to IP adress of ESP32 (for example 192.168.0.98) + * Email:podpora@laskakit.cz + * Web:laskakit.cz + */ + #include #include #include @@ -8,7 +14,7 @@ #include #include "page.h" -const char *host = "esplan"; // Connect to http://ESPlan.local +const char *host = "esplan"; // Connect to http://esplan.local // SD card defines #define SCK 14 @@ -21,224 +27,226 @@ SPIClass spi = SPIClass(HSPI); WebServer server(80); // LAN8720A parameters -#define ETH_POWER_PIN -1 -#define ETH_ADDR 0 -#define ETH_MDC_PIN 23 -#define ETH_MDIO_PIN 18 -#define ETH_NRST_PIN 5 +#define ETH_POWER_PIN -1 +#define ETH_ADDR 0 +#define ETH_MDC_PIN 23 +#define ETH_MDIO_PIN 18 +#define ETH_NRST_PIN 5 static bool eth_connected = false; void WiFiEvent(WiFiEvent_t event) { - switch (event) { + switch (event) + { case ARDUINO_EVENT_ETH_START: - Serial.println("ETH Started"); - //set eth hostname here - ETH.setHostname("esplan"); - break; + Serial.println("ETH Started"); + // set eth hostname here + ETH.setHostname("esplan"); + break; case ARDUINO_EVENT_ETH_CONNECTED: - Serial.println("ETH Connected"); - break; + Serial.println("ETH Connected"); + break; case ARDUINO_EVENT_ETH_GOT_IP: - Serial.print("ETH MAC: "); - Serial.print(ETH.macAddress()); - Serial.print(", IPv4: "); - Serial.print(ETH.localIP()); - if (ETH.fullDuplex()) { - Serial.print(", FULL_DUPLEX"); - } - Serial.print(", "); - Serial.print(ETH.linkSpeed()); - Serial.println("Mbps"); - eth_connected = true; - break; + Serial.print("ETH MAC: "); + Serial.print(ETH.macAddress()); + Serial.print(", IPv4: "); + Serial.print(ETH.localIP()); + if (ETH.fullDuplex()) + { + Serial.print(", FULL_DUPLEX"); + } + Serial.print(", "); + Serial.print(ETH.linkSpeed()); + Serial.println("Mbps"); + eth_connected = true; + break; case ARDUINO_EVENT_ETH_DISCONNECTED: - Serial.println("ETH Disconnected"); - eth_connected = false; - break; + Serial.println("ETH Disconnected"); + eth_connected = false; + break; case ARDUINO_EVENT_ETH_STOP: - Serial.println("ETH Stopped"); - eth_connected = false; - break; + Serial.println("ETH Stopped"); + eth_connected = false; + break; default: - break; - } + break; + } } void readFile(fs::FS &fs, const char *path) { - char text[100] = {0}; - char out[100] = {0}; - uint8_t i = 0; - Serial.printf("Reading file: %s\n", path); + char text[100] = {0}; + char out[100] = {0}; + uint8_t i = 0; + Serial.printf("Reading file: %s\n", path); - File file = fs.open(path); - if (!file) - { - Serial.println("Failed to open file for reading"); - return; - } - - Serial.print("Read from file: "); - while (file.available()) - { - text[i] = file.read(); - if(text[i++] == '\n') + File file = fs.open(path); + if (!file) { - Serial.print(text); - sprintf(out, "

%s

", text); - server.sendContent(out); - memset(text, 0, 99*sizeof(*text)); - memset(out, 0, 99*sizeof(*out)); - i = 0; + Serial.println("Failed to open file for reading"); + return; } - } - file.close(); + + Serial.print("Read from file: "); + while (file.available()) + { + text[i] = file.read(); + if (text[i++] == '\n') + { + Serial.print(text); + sprintf(out, "

%s

", text); + server.sendContent(out); + memset(text, 0, 99 * sizeof(*text)); + memset(out, 0, 99 * sizeof(*out)); + i = 0; + } + } + file.close(); } void writeFile(fs::FS &fs, const char *path, const char *message) { - Serial.printf("Writing file: %s\n", path); + Serial.printf("Writing file: %s\n", path); - File file = fs.open(path, FILE_WRITE); - 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(); + File file = fs.open(path, FILE_WRITE); + 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(); } uint8_t appendFile(fs::FS &fs, const char *path, const char *message) { - Serial.printf("Appending to file: %s\n", path); + Serial.printf("Appending to file: %s\n", path); - File file = fs.open(path, FILE_APPEND); - if (!file) - { - Serial.println("Failed to open file for appending"); - return 1; - } - if (file.print(message)) - { - Serial.println("Message appended"); - file.close(); - return 0; - } - else - { - Serial.println("Append failed"); - file.close(); - return 1; - } + File file = fs.open(path, FILE_APPEND); + if (!file) + { + Serial.println("Failed to open file for appending"); + return 1; + } + if (file.print(message)) + { + Serial.println("Message appended"); + file.close(); + return 0; + } + else + { + Serial.println("Append failed"); + file.close(); + return 1; + } } void handleRoot() { - server.setContentLength(CONTENT_LENGTH_UNKNOWN); - server.send_P(200, "text/html", index_html); - spi.begin(SCK, MISO, MOSI, CS); - if (SD.begin(CS, spi)) - { - Serial.println("SD Card initialized."); - readFile(SD, "/output.txt"); - } - else - { - server.sendContent("

SD card not found!

"); - } - server.sendContent(""); - server.sendContent(""); // This ends sending - SD.end(); - spi.end(); + server.setContentLength(CONTENT_LENGTH_UNKNOWN); + server.send_P(200, "text/html", index_html); + spi.begin(SCK, MISO, MOSI, CS); + if (SD.begin(CS, spi)) + { + Serial.println("SD Card initialized."); + readFile(SD, "/output.txt"); + } + else + { + server.sendContent("

SD card not found!

"); + } + server.sendContent(""); + server.sendContent(""); // This ends sending + SD.end(); + spi.end(); } void handleSubmit() { - char text[100] = {0}; - spi.begin(SCK, MISO, MOSI, CS); - if (SD.begin(CS, spi)) - { - Serial.println("SD Card initialized."); - sprintf(text, "%s\n", server.arg(0).c_str()); - Serial.println(server.arg(0)); - if (appendFile(SD, "/output.txt", text)) + char text[100] = {0}; + spi.begin(SCK, MISO, MOSI, CS); + if (SD.begin(CS, spi)) { - writeFile(SD, "/output.txt", text); + Serial.println("SD Card initialized."); + sprintf(text, "%s\n", server.arg(0).c_str()); + Serial.println(server.arg(0)); + if (appendFile(SD, "/output.txt", text)) + { + writeFile(SD, "/output.txt", text); + } } - } - SD.end(); - spi.end(); - handleRoot(); + SD.end(); + spi.end(); + handleRoot(); } void handleNotFound() { - String message = "Error\n\n"; - message += "URI: "; - message += server.uri(); - message += "\nMethod: "; - message += (server.method() == HTTP_GET) ? "GET" : "POST"; - message += "\nArguments: "; - message += server.args(); - message += "\n"; - for (uint8_t i = 0; i < server.args(); i++) - { - message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; - } - server.send(404, "text/plain", message); + String message = "Error\n\n"; + message += "URI: "; + message += server.uri(); + message += "\nMethod: "; + message += (server.method() == HTTP_GET) ? "GET" : "POST"; + message += "\nArguments: "; + message += server.args(); + message += "\n"; + for (uint8_t i = 0; i < server.args(); i++) + { + message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; + } + server.send(404, "text/plain", message); } void DNS_setup() { - if (MDNS.begin(host)) - { - MDNS.addService("http", "tcp", 80); - Serial.println("MDNS responder started"); - Serial.print("You can now connect to http://"); - Serial.print(host); - Serial.println(".local"); - } + if (MDNS.begin(host)) + { + MDNS.addService("http", "tcp", 80); + Serial.println("MDNS responder started"); + Serial.print("You can now connect to http://"); + Serial.print(host); + Serial.println(".local"); + } } void setup() { - Serial.begin(115200); - // For reseting LAN8720A - pinMode(ETH_NRST_PIN, OUTPUT); - digitalWrite(ETH_NRST_PIN, LOW); - delay(500); - digitalWrite(ETH_NRST_PIN, HIGH); + Serial.begin(115200); + // For reseting LAN8720A + pinMode(ETH_NRST_PIN, OUTPUT); + digitalWrite(ETH_NRST_PIN, LOW); + delay(500); + digitalWrite(ETH_NRST_PIN, HIGH); - WiFi.onEvent(WiFiEvent); - ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_PHY_LAN8720, ETH_CLOCK_GPIO17_OUT); + WiFi.onEvent(WiFiEvent); + ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_PHY_LAN8720, ETH_CLOCK_GPIO17_OUT); - DNS_setup(); + DNS_setup(); - server.on("/", handleRoot); // Main page + server.on("/", handleRoot); // Main page - server.on("/get", handleSubmit); // Function done on GET request + server.on("/get", handleSubmit); // Function done on GET request - server.onNotFound(handleNotFound); // Function done when hangle is not found + server.onNotFound(handleNotFound); // Function done when hangle is not found - server.begin(); - Serial.println("HTTP server started"); + server.begin(); + Serial.println("HTTP server started"); } void loop() { - if(eth_connected) - { - server.handleClient(); - } - delay(2); // allow the cpu to switch to other tasks + if (eth_connected) + { + server.handleClient(); + } + delay(2); // allow the cpu to switch to other tasks } \ No newline at end of file