From 045f7bcad216aab7294734bc8a55b375c5b5a86e Mon Sep 17 00:00:00 2001 From: Nis Wechselberg Date: Fri, 17 Feb 2017 23:31:10 +0100 Subject: [PATCH] ESP.RGBWiFi: Added timeout --- .../ESP8266-RGB-WiFiServer.ino | 175 +++++++++--------- 1 file changed, 91 insertions(+), 84 deletions(-) diff --git a/ESP8266-RGB-WiFiServer/ESP8266-RGB-WiFiServer.ino b/ESP8266-RGB-WiFiServer/ESP8266-RGB-WiFiServer.ino index becfc07..7d94de5 100644 --- a/ESP8266-RGB-WiFiServer/ESP8266-RGB-WiFiServer.ino +++ b/ESP8266-RGB-WiFiServer/ESP8266-RGB-WiFiServer.ino @@ -115,93 +115,100 @@ void loop() { WiFiClient client = server.available(); if (client) { // Wait until the client sends some data - Serial.println("Client connected"); - while(!client.available()){ + Serial.print("Client connected"); + unsigned char timeouts = 10; + while(!client.available() && timeouts > 0){ + delay(10); + timeouts -= 1; + Serial.print("."); + } + Serial.println(""); + + if (timeouts > 0) { + // Read the first line of the request + String req = client.readStringUntil('\r'); + Serial.println(req); + client.flush(); + + // Check if new value should be set or values should be read + if (req.indexOf("/set/") != -1) { + // Request of the form "/set/mode/red/green/blue/" + // Delimiters for values + int indexMode, indexRed, indexGreen, indexBlue, endIndexBlue; + indexMode = req.indexOf("/set/") + 5; + indexRed = req.indexOf("/",indexMode + 1); + indexGreen = req.indexOf("/",indexRed + 1); + indexBlue = req.indexOf("/",indexGreen + 1); + endIndexBlue = req.indexOf("/",indexBlue + 1); + // Check if all values were filled in the request + if (indexMode == -1 || indexRed == -1 || indexGreen == -1 + || indexBlue == -1 || endIndexBlue == -1) { + // Invalid request, abort + Serial.println("Invalid request"); + client.stop(); + } else { + // Parse values in request + int mode = req.substring(indexMode, indexRed).toInt(); + int red = req.substring(indexRed + 1, indexGreen).toInt(); + int green = req.substring(indexGreen + 1, indexBlue).toInt(); + int blue = req.substring(indexBlue + 1, endIndexBlue).toInt(); + + // Sanitize values + if (mode < 0) { mode = 0; } + if (red < 0) { red = 0; } + if (green < 0) { green = 0; } + if (blue < 0) { blue = 0; } + if (mode > 3) { mode = 3; } + if (red > 255) { red = 255; } + if (green > 255) { green = 255; } + if (blue > 255) { blue = 255; } + + // Update values + modeValue = mode; + + + breathScale = 0.999; + breathAdjustment = -0.001; + decColor = 0; + + if (modeValue % 2 == 0) { + redValue = red; + greenValue = green; + blueValue = blue; + } + if (modeValue % 2 != 0) { + redValue = 255; + greenValue = 0; + blueValue = 0; + } + + persistToEEPROM(); + } + } else if (req.indexOf("/get/") != -1) { + + } else { + Serial.println("invalid request"); + client.stop(); + } + + client.flush(); + + // Prepare the response + String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; + response += modeValue; + response += "\n"; + response += redValue; + response += "\n"; + response += greenValue; + response += "\n"; + response += blueValue; + response += "\n"; + + // Send the response to the client + client.print(response); delay(1); } - // Read the first line of the request - String req = client.readStringUntil('\r'); - Serial.println(req); - client.flush(); - - // Check if new value should be set or values should be read - if (req.indexOf("/set/") != -1) { - // Request of the form "/set/mode/red/green/blue/" - // Delimiters for values - int indexMode, indexRed, indexGreen, indexBlue, endIndexBlue; - indexMode = req.indexOf("/set/") + 5; - indexRed = req.indexOf("/",indexMode + 1); - indexGreen = req.indexOf("/",indexRed + 1); - indexBlue = req.indexOf("/",indexGreen + 1); - endIndexBlue = req.indexOf("/",indexBlue + 1); - // Check if all values were filled in the request - if (indexMode == -1 || indexRed == -1 || indexGreen == -1 - || indexBlue == -1 || endIndexBlue == -1) { - // Invalid request, abort - Serial.println("Invalid request"); - client.stop(); - } else { - // Parse values in request - int mode = req.substring(indexMode, indexRed).toInt(); - int red = req.substring(indexRed + 1, indexGreen).toInt(); - int green = req.substring(indexGreen + 1, indexBlue).toInt(); - int blue = req.substring(indexBlue + 1, endIndexBlue).toInt(); - - // Sanitize values - if (mode < 0) { mode = 0; } - if (red < 0) { red = 0; } - if (green < 0) { green = 0; } - if (blue < 0) { blue = 0; } - if (mode > 3) { mode = 3; } - if (red > 255) { red = 255; } - if (green > 255) { green = 255; } - if (blue > 255) { blue = 255; } - - // Update values - modeValue = mode; - - - breathScale = 0.999; - breathAdjustment = -0.001; - decColor = 0; - - if (modeValue % 2 == 0) { - redValue = red; - greenValue = green; - blueValue = blue; - } - if (modeValue % 2 != 0) { - redValue = 255; - greenValue = 0; - blueValue = 0; - } - - persistToEEPROM(); - } - } else if (req.indexOf("/get/") != -1) { - - } else { - Serial.println("invalid request"); - client.stop(); - } - - client.flush(); - - // Prepare the response - String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; - response += modeValue; - response += "\n"; - response += redValue; - response += "\n"; - response += greenValue; - response += "\n"; - response += blueValue; - response += "\n"; - - // Send the response to the client - client.print(response); - delay(1); client.flush(); Serial.println("Disconnecting client"); // The client will actually be disconnected