Files
salatmaschine/salatserver.h
T
2024-09-27 22:08:49 +02:00

167 lines
5.7 KiB
C

/*********
https://circuits4you.com/2018/11/20/web-server-on-esp32-how-to-update-and-display-sensor-values/
*********/
// ----------------------------------------------------------------------------------------------------------------
// Webserver
// s. a.: https://lastminuteengineers.com/creating-esp32-web-server-arduino-ide/
// https://randomnerdtutorials.com/esp32-async-web-server-espasyncwebserver-library/
// https://github.com/me-no-dev/ESPAsyncWebServer ESPAsyncWebServer-master.zip
// Installieren über Sketch-Install ZIP Library ...
// NICHT die aus der IDE-Library nehmen!
// Load Wi-Fi library
#include <WiFi.h>
#include <WiFiClient.h>
//#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <ESPAsyncWebServer.h>
#include <AsyncTCP.h>
#include <ArduinoJson.h>
#include <AsyncJson.h>
#include "webPageSource.h"
/**
* VAR1 accessPointMode = true; ESP32 ist selber ein AccessPoint
* VAR2 accessPointMode = false; Verbindung mit dem Heimnetz
*/
bool accessPointMode = false;
// VAR1 AccessPointMode
const char *ssid = SECRET_AP_SSID;
const char *password = SECRET_AP_PASSWD;
/* Put IP Address details */
IPAddress local_ip(192, 168, 3, 1);
IPAddress gateway(192, 168, 3, 1);
IPAddress subnet(255, 255, 255, 0);
// VAR2 Wifi-Client
const char *ssid2 = SECRET_SSID;
const char *password2 = SECRET_PASSWD;
// Set web server port number to 80
AsyncWebServer server(80);
// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;
JsonObject root;
void (*resetFunc)(void) = 0; //declare reset function @ address 0
void setupSalatserver() {
Serial.begin(9600);
Serial.println();
Serial.println("Booting Sketch...");
if (accessPointMode == true) {
// ESP32 as AccessPoint
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
Serial.println("Connecting to ");
Serial.print(ssid);
} else {
// ESP32 connects to your wifi -----------------------------------
WiFi.mode(WIFI_STA); // Connect to your wifi
WiFi.begin(ssid2, password2);
// Wait for WiFi to connect
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.print("waitForConnectResult...");
//delay(3000);
}
// If connection successful show IP address in serial monitor
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid2);
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // IP address assigned to your ESP
}
//----------------------------------------------------------------
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
int paramsNr = request->params();
//Serial.println(paramsNr);
String s = webPageSource; // Read HTML contents
if (paramsNr <= 0) {
request->send(200, "text/html", s);
} else {
for (int i = 0; i < paramsNr; i++) {
AsyncWebParameter const *p = request->getParam(i);
//Serial.print("Param name: ");
//Serial.println(p->name());
//Serial.print("Param value: ");
//Serial.println(p->value());
//Serial.println("------");
}
if (request->hasParam("waterNow")) {
buttonsWaterNow();
Serial.println("Webserver: waterNow");
//request->send(200, "text/plain", "waterNow received");
request->send(200, "text/html", s);
} else if (request->hasParam("resetAll")) {
Serial.println("Webserver: resetAll");
buttonsResetAll();
//request->send(200, "text/plain", "resetAll received");
request->send(200, "text/html", s);
} else if (request->hasParam("waterLess")) {
buttonsWaterLess();
Serial.println("Webserver: waterLess");
//request->send(200, "text/plain", "waterLess received");
request->send(200, "text/html", s);
} else if (request->hasParam("waterMore")) {
buttonsWaterMore();
Serial.println("Webserver: waterMore");
request->send(200, "text/html", s);
//request->send(200, "text/plain", "waterMore received");
} else if (request->hasParam("intLess")) {
buttonsIntLess();
Serial.println("Webserver: intLess");
request->send(200, "text/html", s);
// request->send(200, "text/plain", "intLess received");
} else if (request->hasParam("intMore")) {
buttonsIntMore();
Serial.println("Webserver: intMore");
request->send(200, "text/html", s);
// request->send(200, "text/plain", "intMore received");
} else if (request->hasParam("readData")) {
AsyncJsonResponse *response = new AsyncJsonResponse();
response->addHeader("Server", "ESP Async Web Server");
root = response->getRoot();
root["version"] = version;
root["uptime"] = uptime;
root["trigger"] = trigger;
root["duration_interval"] = duration_interval;
root["dry_time_left"] = dry_time_left;
root["max_water"] = max_water;
root["wet_time_left"] = wet_time_left;
root["dry_since"] = dry_since;
root["min_moisture"] = minMoisture;
root["sensor_moisture_value"] = sensor_moisture_value;
root["temp0"] = tempSensor[0];
root["message"] = message;
response->setLength();
request->send(response); // request->send(200, "text/plain", "data"); //Send value only to client ajax request
} else if (request->hasParam("resetArduino")) {
resetFunc();
}
};
});
server.begin();
}
void loopSalatserver() {
}