// WiFi Web Server LED Blink // // A simple web server that lets you blink an LED via the web. // This sketch will print the IP address of your WiFi Shield (once connected) // to the Serial monitor. From there, you can open that address in a web browser // to turn on and off the LED on pin 5. // // If the IP address of your shield is yourAddress: // http://yourAddress/H turns the LED on // http://yourAddress/L turns it off // // This example is written for a network using WPA encryption. For // WEP or WPA, change the Wifi.begin() call accordingly. // // Circuit: // * WiFi shield attached // * LED attached to pin 5 // // created for arduino 25 Nov 2012 // by Tom Igoe // //ported for sparkfun esp32 //31.01.2017 by Jan Hendrik Berlin // A client is served from inside loop(), so for as long as this function is in // here the knob, the buttons and the run timers are all standing still. Left to // itself "while (client.connected())" hands that decision to whatever is on the // other end of the socket: a client that opens a connection and then says nothing // holds the generator indefinitely. Two limits below keep that from happening -- // an idle timeout, so a silent client is dropped but a slow one is not, and a // hard ceiling on the whole exchange. The line buffer is capped for the same // reason: without it a client that never sends a newline grows it until the heap // runs out. #define WIFI_IDLE_TIMEOUT_MS 2000 // no bytes for this long -> drop the client #define WIFI_TOTAL_TIMEOUT_MS 10000 // whole exchange may not exceed this #define WIFI_LINE_MAX 128 // longest request line worth keeping void wifiRoutine(){ WiFiClient client = server.available(); // listen for incoming clients if (client) { // if you get a client, Serial.println("New Client."); // print a message out the serial port String currentLine = ""; // make a String to hold incoming data from the client unsigned long clientStart = millis(); // when this client turned up unsigned long lastRx = millis(); // when it last actually said something while (client.connected()) { // loop while the client's connected if ((long)(millis() - lastRx) > WIFI_IDLE_TIMEOUT_MS || (long)(millis() - clientStart) > WIFI_TOTAL_TIMEOUT_MS) { Serial.println("Client timed out."); break; // hand loop() back to the front panel } if (client.available()) { // if there's bytes to read from the client, lastRx = millis(); // it is alive, so let it keep going char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); // the content of the HTTP response follows the header: client.print("