Mit ESP32 über Webserver NeoPixel WS2812B RBG LED Strip steuern

Hallo ich möchte mit meinem ESP32 über einen Webserver meine Neopixel WS2812B RGB LED Strip ansteuern. Dazu habe ich den Webserver und das "erste Programm" einzeln geschrieben.

Das ist der Code für den Webserver + Steuerung einer einzelnen LED auf Pin 23.

#include <WiFi.h>

const char* ssid = "***";           //Netzwerk Name
const char* password = "***";            //Netzwerk Passwort

WiFiServer server(80);

String header;
String outputregenbogenState = "Aus";

const int output23 = 23;

unsigned long currentTime = millis();
unsigned long previousTime = 0;

const long timeoutTime = 2000;


void setup() {
  Serial.begin(115200);
  pinMode(output23, OUTPUT);
  digitalWrite(output23, LOW);

  Serial.print("Verbinden mit ");           //Verbinden mit WiFi
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() !=WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");           //Zeigt die IP Adresse
  Serial.println("WiFi verbunden");
  Serial.println("IP Adresse: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop() {
  WiFiClient client = server.available();

  if (client) {
    currentTime = millis();
    previousTime = currentTime;
    Serial.println("Neue Aktion.");
    String currentLine = "";
    while (client.connected() && currentTime - previousTime <= timeoutTime) {
      currentTime = millis();
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        header +=c;
        if (c == '\n') {
          if (currentLine.length() ==0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
// ****************************************************************Hier rein soll der Code von dem Regenbogeneffekt*********************************************************************************
            if (header.indexOf("GET /regenbogen/on") >=0) {
              Serial.println("GPIO Regenbogen an");
              outputregenbogenState = "an";
              digitalWrite(output23, HIGH);           //Code für NeoPixel an
//****************************************************************Hier rein soll der Code um den NeoPixel Streifen wieder auszuschalten also pixels.fill********************************************
            } else if (header.indexOf("GET /regenbogen/off") >= 0) {
              Serial.println("GPIO Regenbogen aus");
              outputregenbogenState = "aus";
              digitalWrite(output23, LOW);            //Code für NeoPixel aus
            }
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #555555;}</style></head>");
            client.println("<body><h1>LED Strip Steuerung</h1>");
            client.println("<p>Regenbogen " + outputregenbogenState + "</p>");
            client.println("<p><a href=\"/regenbogen/on\"><button class=\"button\">Einschalten</button></a></p>");
            client.println("<p><a href=\"/regenbogen/off\"><button class=\"button button2\">Ausschalten</button></a></p>");
            client.println("</body></html>");
            client.println();
            break;  
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }
    }
    header = "";
    client.stop();
    Serial.println("Aktion beendet.");
    Serial.println("");
  }
}

Das ist der Code für den Regenbogeneffekt.

#include <Adafruit_NeoPixel.h>
const int ledPin = 23;
const int numLeds = 300;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(numLeds, ledPin, NEO_GRB + NEO_KHZ800);


void setup() {
  strip.begin();
  strip.setBrightness(255);

}

void loop() {
    rainbow(30);
    delay(10);
}


void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i*1+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } 
  else if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } 
  else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

Meine Frage ist wie bekomme ich die beiden Programme zusammen? Wenn ich alles einfüge und dann hochlade kommt zwar kein Fehler aber der esp32 rebootet sich immer wieder neu.
Habt ihr Tipps oder wisst ihr wo mein Problem ist?

Danke schonmal in voraus

Wie hast du die zwei zusammengefügt und was schreibt der ESP beim Reboot
?

#include <WiFi.h>
#include <Adafruit_NeoPixel.h>

const char* ssid = "WLANWAHN16_PL";           //Netzwerk Name
const char* password = "Niclas:11-2004DD-KraFrie";            //Netzwerk Passwort

const int ledPin = 23;
const int numLeds = 300;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(numLeds, ledPin, NEO_GRB + NEO_KHZ800);

WiFiServer server(80);

String header;
String outputregenbogenState = "Aus";

const int output23 = 23;

unsigned long currentTime = millis();
unsigned long previousTime = 0;

const long timeoutTime = 2000;


void setup() {
  strip.begin();
  strip.setBrightness(255);
  
  Serial.begin(115200);
  pinMode(output23, OUTPUT);
  digitalWrite(output23, LOW);

  Serial.print("Verbinden mit ");           //Verbinden mit WiFi
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() !=WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");           //Zeigt die IP Adresse
  Serial.println("WiFi verbunden");
  Serial.println("IP Adresse: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop() {
  WiFiClient client = server.available();

  if (client) {
    currentTime = millis();
    previousTime = currentTime;
    Serial.println("Neue Aktion.");
    String currentLine = "";
    while (client.connected() && currentTime - previousTime <= timeoutTime) {
      currentTime = millis();
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        header +=c;
        if (c == '\n') {
          if (currentLine.length() ==0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();

            if (header.indexOf("GET /regenbogen/on") >=0) {
              Serial.println("GPIO Regenbogen an");
              outputregenbogenState = "an";
              //digitalWrite(output23, HIGH);           //Code für NeoPixel an
              rainbow(30);
              delay(10);
            } else if (header.indexOf("GET /regenbogen/off") >= 0) {
              Serial.println("GPIO Regenbogen aus");
              outputregenbogenState = "aus";
              digitalWrite(output23, LOW);            //Code für NeoPixel aus
            }
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #555555;}</style></head>");
            client.println("<body><h1>LED Strip Steuerung</h1>");
            client.println("<p>Regenbogen " + outputregenbogenState + "</p>");
            client.println("<p><a href=\"/regenbogen/on\"><button class=\"button\">Einschalten</button></a></p>");
            client.println("<p><a href=\"/regenbogen/off\"><button class=\"button button2\">Ausschalten</button></a></p>");
            client.println("</body></html>");
            client.println();
            break;  
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }
    }
    header = "";
    client.stop();
    Serial.println("Aktion beendet.");
    Serial.println("");
  }
}
void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i*1+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } 
  else if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } 
  else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.