| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |    Copyright (c) 2015, Majenko Technologies | 
					
						
							|  |  |  |    All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Redistribution and use in source and binary forms, with or without modification, | 
					
						
							|  |  |  |    are permitted provided that the following conditions are met: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * * Redistributions of source code must retain the above copyright notice, this | 
					
						
							|  |  |  |      list of conditions and the following disclaimer. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * * Redistributions in binary form must reproduce the above copyright notice, this | 
					
						
							|  |  |  |      list of conditions and the following disclaimer in the documentation and/or | 
					
						
							|  |  |  |      other materials provided with the distribution. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * * Neither the name of Majenko Technologies nor the names of its | 
					
						
							|  |  |  |      contributors may be used to endorse or promote products derived from | 
					
						
							|  |  |  |      this software without specific prior written permission. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | 
					
						
							|  |  |  |    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 
					
						
							|  |  |  |    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 
					
						
							|  |  |  |    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | 
					
						
							|  |  |  |    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 
					
						
							|  |  |  |    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 
					
						
							|  |  |  |    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | 
					
						
							|  |  |  |    ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
					
						
							|  |  |  |    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
					
						
							|  |  |  |    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <WiFi.h>
 | 
					
						
							|  |  |  | #include <WiFiClient.h>
 | 
					
						
							|  |  |  | #include <WebServer.h>
 | 
					
						
							|  |  |  | #include <ESPmDNS.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char *ssid = "YourSSIDHere"; | 
					
						
							|  |  |  | const char *password = "YourPSKHere"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | WebServer server(80); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const int led = 13; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void handleRoot() { | 
					
						
							|  |  |  |   digitalWrite(led, 1); | 
					
						
							|  |  |  |   char temp[400]; | 
					
						
							|  |  |  |   int sec = millis() / 1000; | 
					
						
							|  |  |  |   int min = sec / 60; | 
					
						
							|  |  |  |   int hr = min / 60; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   snprintf(temp, 400, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |            "<html>\
 | 
					
						
							|  |  |  |   <head>\ | 
					
						
							|  |  |  |     <meta http-equiv='refresh' content='5'/>\ | 
					
						
							|  |  |  |     <title>ESP32 Demo</title>\ | 
					
						
							|  |  |  |     <style>\ | 
					
						
							|  |  |  |       body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\ | 
					
						
							|  |  |  |     </style>\ | 
					
						
							|  |  |  |   </head>\ | 
					
						
							|  |  |  |   <body>\ | 
					
						
							|  |  |  |     <h1>Hello from ESP32!</h1>\ | 
					
						
							|  |  |  |     <p>Uptime: %02d:%02d:%02d</p>\ | 
					
						
							|  |  |  |     <img src=\"/test.svg\" />\
 | 
					
						
							|  |  |  |   </body>\ | 
					
						
							|  |  |  | </html>", | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |            hr, min % 60, sec % 60 | 
					
						
							|  |  |  |           ); | 
					
						
							|  |  |  |   server.send(200, "text/html", temp); | 
					
						
							|  |  |  |   digitalWrite(led, 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void handleNotFound() { | 
					
						
							|  |  |  |   digitalWrite(led, 1); | 
					
						
							|  |  |  |   String message = "File Not Found\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); | 
					
						
							|  |  |  |   digitalWrite(led, 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void setup(void) { | 
					
						
							|  |  |  |   pinMode(led, OUTPUT); | 
					
						
							|  |  |  |   digitalWrite(led, 0); | 
					
						
							|  |  |  |   Serial.begin(115200); | 
					
						
							|  |  |  |   WiFi.mode(WIFI_STA); | 
					
						
							|  |  |  |   WiFi.begin(ssid, password); | 
					
						
							|  |  |  |   Serial.println(""); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Wait for connection
 | 
					
						
							|  |  |  |   while (WiFi.status() != WL_CONNECTED) { | 
					
						
							|  |  |  |     delay(500); | 
					
						
							|  |  |  |     Serial.print("."); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Serial.println(""); | 
					
						
							|  |  |  |   Serial.print("Connected to "); | 
					
						
							|  |  |  |   Serial.println(ssid); | 
					
						
							|  |  |  |   Serial.print("IP address: "); | 
					
						
							|  |  |  |   Serial.println(WiFi.localIP()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (MDNS.begin("esp32")) { | 
					
						
							|  |  |  |     Serial.println("MDNS responder started"); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   server.on("/", handleRoot); | 
					
						
							|  |  |  |   server.on("/test.svg", drawGraph); | 
					
						
							|  |  |  |   server.on("/inline", []() { | 
					
						
							|  |  |  |     server.send(200, "text/plain", "this works as well"); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   server.onNotFound(handleNotFound); | 
					
						
							|  |  |  |   server.begin(); | 
					
						
							|  |  |  |   Serial.println("HTTP server started"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void loop(void) { | 
					
						
							|  |  |  |   server.handleClient(); | 
					
						
							| 
									
										
										
										
											2021-03-05 13:40:52 +02:00
										 |  |  |   delay(2);//allow the cpu to switch to other tasks
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void drawGraph() { | 
					
						
							|  |  |  |   String out = ""; | 
					
						
							|  |  |  |   char temp[100]; | 
					
						
							|  |  |  |   out += "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"400\" height=\"150\">\n"; | 
					
						
							|  |  |  |   out += "<rect width=\"400\" height=\"150\" fill=\"rgb(250, 230, 210)\" stroke-width=\"1\" stroke=\"rgb(0, 0, 0)\" />\n"; | 
					
						
							|  |  |  |   out += "<g stroke=\"black\">\n"; | 
					
						
							|  |  |  |   int y = rand() % 130; | 
					
						
							|  |  |  |   for (int x = 10; x < 390; x += 10) { | 
					
						
							|  |  |  |     int y2 = rand() % 130; | 
					
						
							|  |  |  |     sprintf(temp, "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" stroke-width=\"1\" />\n", x, 140 - y, x + 10, 140 - y2); | 
					
						
							|  |  |  |     out += temp; | 
					
						
							|  |  |  |     y = y2; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   out += "</g>\n</svg>\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   server.send(200, "image/svg+xml", out); | 
					
						
							|  |  |  | } |