And here is the complete sketch:
// Einbinden externer Dateien
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Adafruit_NeoPixel.h>
// LEDs
#define ledsCount 54
#define dataPin 4
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(ledsCount, dataPin, NEO_GRB + NEO_KHZ800);
// Wifi
const char* ssid = "mySSID";
const char* pwd = "myPWD";
// Webserver
ESP8266WebServer server(80);
// Colors
uint32_t off = pixels.Color(0, 0, 0);
uint32_t nearlyOff = pixels.Color(10, 10, 10);
uint32_t red = pixels.Color(255, 0, 0);
uint32_t green = pixels.Color(0, 255, 0);
uint32_t blue = pixels.Color(0, 0, 255);
uint32_t turquoise = pixels.Color(0, 197, 205);
uint32_t orange = pixels.Color(255, 165, 0);
uint32_t white = pixels.Color(255, 255, 255);
// Methoden
void setLEDBlink(int ledPosition, uint32_t color, int duration, int counter){
/* Prüfe, ob ledPosition okay ist */
if(ledPosition != 0){
ledPosition -= 1;
/* Prüfe, ob ledPosition okay ist */
if(ledPosition >= 0 && ledPosition < ledsCount){
for(int i = 0; i < counter; i++){
pixels.setPixelColor(ledPosition, color);
pixels.show();
delay(duration);
pixels.setPixelColor(ledPosition, off);
pixels.show();
delay(duration);
}
}
}
}
void setLEDOnOff(int ledPosition, uint32_t color, int duration) {
/* Prüfe, ob ledPosition okay ist */
if(ledPosition != 0){
ledPosition -= 1;
/* Prüfe, ob ledPosition okay ist */
if(ledPosition >= 0 && ledPosition < ledsCount){
pixels.setPixelColor(ledPosition, color);
pixels.show();
delay(duration);
pixels.setPixelColor(ledPosition, 0, 0, 0);
pixels.show();
}
}
}
void setLED(int ledPosition, uint32_t color) {
/* Prüfe, ob ledPosition okay ist */
if(ledPosition != 0){
ledPosition -= 1;
/* Prüfe, ob ledPosition okay ist */
if(ledPosition >= 0 && ledPosition < ledsCount){
pixels.setPixelColor(ledPosition, color);
pixels.show();
}
}
}
void setServerEnd(){
server.send(200, "text/plain", "OK");
}
uint32_t getColor(String color){
// Farben prüfen
if(color == "off"){
return off;
}else if(color == "nearlyOff"){
return nearlyOff;
}else if(color == "red"){
return pixels.Color(255, 0, 0);
}else if(color == "green"){
return green;
}else if(color == "blue"){
return blue;
}else if(color == "turquoise"){
return turquoise;
}else if(color == "orange"){
return orange;
}else if(color == "white"){
return white;
}else{
return off;
}
}
uint32_t Wheel(byte WheelPos) {
if(WheelPos < 85) {
return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
else if(WheelPos < 170) {
WheelPos -= 85;
return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
else {
WheelPos -= 170;
return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}
void getHook() {
// Prüfe, ob ein Mode angegeben wurde
if(server.hasArg("mode") && server.arg("mode") != ""){
// Prüfe den Mode
if(server.arg("mode") == "normal"){
if(server.hasArg("color") && server.arg("color") != ""){
for(int i = 1; i <= ledsCount; i++){
setLED(i, getColor(server.arg("color")));
}
}
}else if(server.arg("mode") == "rainbow"){
// Client-Status auf 200 setzen
uint16_t i, j;
for(j=0; j<256; j++) {
for(i=0; i<pixels.numPixels(); i++) {
pixels.setPixelColor(i, Wheel((i*1+j) & 255));
}
pixels.show();
delay(100);
}
}else if(server.arg("mode") == "debug"){
if(server.hasArg("color") && server.arg("color") != ""){
// LEDs aufwärts gehen
uint32_t color = getColor(server.arg("color"));
for(int i = 1; i <= ledsCount; i++){
setLEDOnOff(i, color, 200);
}
}
if(server.hasArg("color2") && server.arg("color2") != ""){
// LEDs abwärts gehen
uint32_t color2 = getColor(server.arg("color2"));
for(int i = ledsCount; i >= 1; i--){
setLEDOnOff(i, color2, 200);
}
}
}else{
// Alle LEDs ausschalten
for(int i = ledsCount; i >= 1; i--){
setLED(i, off);
}
}
// Ende der Seite
setServerEnd();
}else{
// Ende der Seite
server.send(200, "text/plain", "Nix zu tun!");
}
}
// Main
void setup() {
// LED-Strip starten
pixels.begin();
pixels.show();
// ESP8266 mit WiFi verbinden
WiFi.begin(ssid, pwd);
// Warte, bis die Verbindung hergestellt wurde
while (WiFi.status() != WL_CONNECTED) {
// 1 LED rot aufleuchten lassen, solange nicht verbunden
setLED(1, red);
delay(200);
}
// Sobald Verbindung hergestellt wurde, 1 LED kurz aufleuchten lassen
setLED(1, green);
// Starte den Server und warte kurz
server.begin();
delay(5000);
// Sobald Verbindung hergestellt wurde, 1 LED 3x kurz aufleuchten lassen
setLEDBlink(1, blue, 200, 3);
// Definiere die Methode, wenn alles passt
server.onNotFound([]() {
getHook();
});
// Debug
Serial.begin(9600);
}
void loop() {
// Rufe die Methode auf, die in server.onNotFound() gesetzt wurde
server.handleClient();
}