/** * ESP WiFi RGB-Controller * * (c) Finn Strack Dec 2017 */ #include const char* ssid = "XXXXXX"; //SSID des eigenen Routers const char* password = "YYYYYYYYY"; //WLAN Passwort des eigenen WLAN-Netzes // config static IP IPAddress ip(192, 168, 178, 30); //An das Hausnetz anpassen. Ggf. vergibt der Router eine IP (prüfen). IPAddress gateway(192, 168, 1, 0); //Nur bei Internetanbindung erforderlich IPAddress subnet(255, 255, 255, 0); //Hier Pins definieren int r_pin = D5; int g_pin = D6; int b_pin = D3; int r = 255; int g = 255; int b = 255; WiFiServer server(80); void setup() { Serial.begin(9600); delay(1); WiFi.mode(WIFI_STA); WiFi.config(ip, gateway, subnet); WiFiStart(); Serial.println("SmartHome yourself RGB-Controller"); delay(800); Serial.println("Initialisiere ..."); pinMode(r_pin, OUTPUT); pinMode(g_pin, OUTPUT); pinMode(b_pin, OUTPUT); digitalWrite(r_pin,HIGH); delay(800); digitalWrite(g_pin,HIGH); delay(800); digitalWrite(b_pin,HIGH); delay(1200); digitalWrite(r_pin,LOW); digitalWrite(g_pin,LOW); digitalWrite(b_pin,LOW); } void WiFiStart() { Serial.print("Verbindung aufbauen zu: "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println("Verbunden !"); server.begin(); Serial.println("Webserver gestartet mit der IP: "); Serial.println(WiFi.localIP()); } void loop() { if (WiFi.status() != WL_CONNECTED){ WiFiStart(); } WiFiClient client = server.available(); if (!client) { return; } Serial.println("Neue Anfrage"); unsigned long ultimeout = millis()+250; while(!client.available() && (millis()ultimeout) { Serial.println("Client Verbindung Timeout"); return; } String sRequest = client.readStringUntil('\r'); client.flush(); Serial.println(sRequest); if(sRequest.indexOf("favicon")<0){ int r_pos_1 = sRequest.indexOf("red="); int r_pos_2 = sRequest.indexOf("&",r_pos_1); if(r_pos_2 == -1) { r_pos_2 = sRequest.indexOf(" ",r_pos_1); } String r_str = sRequest.substring(r_pos_1+4,r_pos_2); int g_pos_1 = sRequest.indexOf("green="); int g_pos_2 = sRequest.indexOf("&",g_pos_1); if(g_pos_2 == -1) { g_pos_2 = sRequest.indexOf(" ",g_pos_1); } String g_str = sRequest.substring(g_pos_1+6,g_pos_2); int b_pos_1 = sRequest.indexOf("blue="); int b_pos_2 = sRequest.indexOf("&",b_pos_1); if(b_pos_2 == -1) { b_pos_2 = sRequest.indexOf(" ",b_pos_1); } String b_str = sRequest.substring(b_pos_1+5); if(r_str != "" && g_str != "" && b_str != "") { r = map( r_str.toInt() ,0,255,0,1023); g = map( g_str.toInt() ,0,255,0,1023); b = map( b_str.toInt() ,0,255,0,1023); } Serial.print("Schalte R: "); Serial.print(r); Serial.print(" G: "); Serial.print(g); Serial.print(" B: "); Serial.println(b); analogWrite(r_pin, r ); analogWrite(g_pin, g ); analogWrite(b_pin, b ); String sResponse,sHeader; sResponse = "ESP8266 RGB-Controller"; sResponse += "

ESP8266 WiFi RGB Controller


"; sResponse += "
Bitte Parameter fuer red, green und blue in die URL eintragen !

"; sResponse += "Anleitung

"; sResponse += "192.168.178.30 dies ist die statische IP-Adresse der Seite.
"; sResponse += "Zu dieser die Farbwerte fuer ROT - GRUEN - BLAU in der Adresszeile hinzufuegen.
"; sResponse += "Der Wertebereich liegt zwischen 0 - 64"; sResponse += "Fuer hellstes ROT sind dies der Eintrag /red=0,green=64,blue=64
"; sResponse += "Das Trennzeichen ist nicht erforderlich, kann aber das Komma oder das Semikolon sein.
"; sResponse += "Der ganze Eintrag sieht dann folgender massen aus: 192.168.178.30/red=0,green=64,blue=64
"; sResponse += "

"; sResponse += "Der Wert 0 steht bei mir, da ich eine RGB-LED mit + am gemeinsamen Anschluss hat, fuer max. hell.
"; sResponse += "somit kehren sich alle Werte um. 0 steht fuer hellste Ansteuerung, 64 fuer geringste also aus.
"; sResponse += "Bei einer RGB-LED mit - (Minus) am gemeinsamen Anschluss ist 63 der hellste Wert und 0 = aus

"; sResponse += "
"; sHeader = "HTTP/1.1 200 OK\r\n"; sHeader += "Content-Length: "; sHeader += sResponse.length(); sHeader += "\r\n"; sHeader += "Content-Type: text/html\r\n"; sHeader += "Connection: close\r\n"; sHeader += "\r\n"; client.print(sHeader); client.print(sResponse); client.stop(); Serial.println("Anfrage beendet"); } }