Add description

main
Jarda 2023-08-21 15:29:08 +02:00
parent 93e0abe9bc
commit 7e23e437d6
1 changed files with 169 additions and 161 deletions

View File

@ -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 <Arduino.h>
#include <WiFi.h>
#include <ETH.h>
@ -8,7 +14,7 @@
#include <FS.h>
#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, "<p>%s</p>", 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, "<p>%s</p>", 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("<p style= \"color:rgb(255, 0, 0);\">SD card not found!</p>");
}
server.sendContent("</body>");
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("<p style= \"color:rgb(255, 0, 0);\">SD card not found!</p>");
}
server.sendContent("</body>");
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
}