1

FastLED web client, when clicked on, all RGB on in red color. Clicked off, all RGB off/black. but not work. Here is the full code, i don't know why it's loop always and web client stuck when i clicked on button on webpage

I can not turn on all LED, or turn off all LED.

#include <ESP8266WiFi.h>

#include <FastLED.h> #define DATA_PIN 5 #define NUM_LEDS 300 CRGB leds[NUM_LEDS]; #define COLOR_ORDER GRB #define BRIGHTNESS 254 #define FRAMES_PER_SECOND 30

// Enter your wifi network name and Wifi Password const char* ssid = ""; const char* password = "";

// Set web server port number to 80 WiFiServer server(80);

// Variable to store the HTTP request String header;

// These variables store current output state of LED String outputRedState = "off";

// Assign output variables to GPIO pins const int redLED = 5;

// Current time unsigned long currentTime = millis(); // Previous time unsigned long previousTime = 0; // Define timeout time in milliseconds (example: 2000ms = 2s) const long timeoutTime = 2000;

void setup() { Serial.begin(115200);

//FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS); LEDS.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // 初始化光带 FastLED.setBrightness(BRIGHTNESS); // 设置光带亮度 set_max_power_in_volts_and_milliamps(5, 2000); // 光带电源管理(设置光带5伏特,500mA)

// Connect to Wi-Fi network with SSID and password Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Print local IP address and start web server Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); }

void loop() { WiFiClient client = server.available(); // Listen for incoming clients

if (client) { // If a new client connects, Serial.println("New Client."); // print a message out in the serial port String currentLine = ""; // make a String to hold incoming data from the client currentTime = millis(); previousTime = currentTime; while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected currentTime = millis(); if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor header += c; 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("Connection: close"); client.println();

        // turns the GPIOs on and off
        if (header.indexOf(&quot;GET /2/on&quot;) &gt;= 0) {
          Serial.println(&quot;RED LED is on&quot;);
          outputRedState = &quot;on&quot;;

          fill_solid(leds, 300, CRGB::Red);
          FastLED.show();



        } else if (header.indexOf(&quot;GET /2/off&quot;) &gt;= 0) {
          Serial.println(&quot;RED LED is off&quot;);
          outputRedState = &quot;off&quot;;

          fill_solid(leds, 300, 0);
          FastLED.show();
        }

        // Display the HTML web page
        client.println(&quot;&lt;!DOCTYPE html&gt;&lt;html&gt;&quot;);
        client.println(&quot;&lt;head&gt;&lt;meta name=\&quot;viewport\&quot; content=\&quot;width=device-width, initial-scale=1\&quot;&gt;&quot;);
        client.println(&quot;&lt;link rel=\&quot;icon\&quot; href=\&quot;data:,\&quot;&gt;&quot;);
        // CSS to style the on/off buttons
        client.println(&quot;&lt;style&gt;html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}&quot;);
        client.println(&quot;.buttonRed { background-color: #ff0000; border: none; color: white; padding: 16px 40px; border-radius: 60%;&quot;);
        client.println(&quot;text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}&quot;);
        client.println(&quot;.buttonOff { background-color: #77878A; border: none; color: white; padding: 16px 40px; border-radius: 70%;&quot;);
        client.println(&quot;text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}&lt;/style&gt;&lt;/head&gt;&quot;);

        // Web Page Heading
        client.println(&quot;&lt;body&gt;&lt;h1&gt;My LED Control Server&lt;/h1&gt;&quot;);

        // Display current state, and ON/OFF buttons for GPIO 2 Red LED
        client.println(&quot;&lt;p&gt;Red LED is &quot; + outputRedState + &quot;&lt;/p&gt;&quot;);
        // If the outputRedState is off, it displays the OFF button
        if (outputRedState == &quot;off&quot;) {
          client.println(&quot;&lt;p&gt;&lt;a href=\&quot;/2/on\&quot;&gt;&lt;button class=\&quot;button buttonOff\&quot;&gt;OFF&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;&quot;);
        } else {
          client.println(&quot;&lt;p&gt;&lt;a href=\&quot;/2/off\&quot;&gt;&lt;button class=\&quot;button buttonRed\&quot;&gt;ON&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;&quot;);
        }

        client.println(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);

        // The HTTP response ends with another blank line
        client.println();
        // Break out of the while loop
        break;
      } else {  // if you got a newline, then clear currentLine
        currentLine = &quot;&quot;;
      }
    } else if (c != '\r') {  // if you got anything else but a carriage return character,
      currentLine += c;      // add it to the end of the currentLine
    }
  }
}
// Clear the header variable
header = &quot;&quot;;
// Close the connection
client.stop();
Serial.println(&quot;Client disconnected.&quot;);
Serial.println(&quot;&quot;);

} }

0 Answers0