1
0
mirror of https://github.com/balkian/shinesp.git synced 2024-12-22 13:38:12 +00:00

Added color

This commit is contained in:
J. Fernando Sánchez 2017-01-04 09:47:58 +01:00
parent f50d12dd65
commit 5de91bf984

View File

@ -1,7 +1,7 @@
#define FASTLED_ESP8266_RAW_PIN_ORDER #define FASTLED_ESP8266_RAW_PIN_ORDER
#include "FastLED.h" #include "FastLED.h"
#define NUM_LEDS 50 #define NUM_LEDS 150
#define DATA_PIN 0 #define DATA_PIN 0
#define led 13 #define led 13
@ -55,56 +55,56 @@ int connected = 0;
// return false // return false
//} //}
bool connect(struct credential cred){ bool connect(struct credential cred) {
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
Serial.println("Trying to connect to " + cred.ssid + " with " + cred.pass); Serial.println("Trying to connect to " + cred.ssid + " with " + cred.pass);
if(cred.ssid.length()<1){ if (cred.ssid.length() < 1) {
return false; return false;
} }
Serial.println("Length " + cred.ssid.length()); Serial.println("Length " + cred.ssid.length());
WiFi.begin(cred.ssid.c_str(), cred.pass.c_str()); WiFi.begin(cred.ssid.c_str(), cred.pass.c_str());
int c = 0; int c = 0;
while ( c < 20 ) { while ( c < 20 ) {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
Serial.println("Ready"); Serial.println("Ready");
Serial.print("IP address: "); Serial.print("IP address: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
return true; return true;
} }
delay(500); delay(500);
Serial.print(WiFi.status()); Serial.print(WiFi.status());
c++; c++;
} }
Serial.println("Connect timed out"); Serial.println("Connect timed out");
return false; return false;
} }
void setCredentials(struct credential cred){ void setCredentials(struct credential cred) {
String qsid = cred.ssid; String qsid = cred.ssid;
Serial.println(qsid); Serial.println(qsid);
Serial.println(""); Serial.println("");
String qpass = cred.pass; String qpass = cred.pass;
Serial.println(qpass); Serial.println(qpass);
Serial.println(""); Serial.println("");
Serial.println("writing eeprom ssid:"); Serial.println("writing eeprom ssid:");
for (int i = 0; i < qsid.length(); ++i) for (int i = 0; i < qsid.length(); ++i)
{ {
EEPROM.write(i, qsid[i]); EEPROM.write(i, qsid[i]);
Serial.print("Wrote: "); Serial.print("Wrote: ");
Serial.println(qsid[i]); Serial.println(qsid[i]);
} }
Serial.println("writing eeprom pass:"); Serial.println("writing eeprom pass:");
for (int i = 0; i < qpass.length(); ++i) for (int i = 0; i < qpass.length(); ++i)
{ {
EEPROM.write(32+i, qpass[i]); EEPROM.write(32 + i, qpass[i]);
Serial.print("Wrote: "); Serial.print("Wrote: ");
Serial.println(qpass[i]); Serial.println(qpass[i]);
} }
EEPROM.commit(); EEPROM.commit();
} }
void handleSetCredentials(){ void handleSetCredentials() {
struct credential cred; struct credential cred;
cred.ssid = ""; cred.ssid = "";
cred.pass = ""; cred.pass = "";
@ -112,7 +112,7 @@ void handleSetCredentials(){
cred.ssid = httpServer.arg("ssid"); cred.ssid = httpServer.arg("ssid");
cred.pass = httpServer.arg("pass"); cred.pass = httpServer.arg("pass");
if (cred.ssid != "" && cred.pass != ""){ if (cred.ssid != "" && cred.pass != "") {
setCredentials(cred); setCredentials(cred);
String out = "Credentials set as: " + cred.ssid + " : " + cred.pass; String out = "Credentials set as: " + cred.ssid + " : " + cred.pass;
httpServer.send(200, "text/plain", out); httpServer.send(200, "text/plain", out);
@ -122,52 +122,65 @@ void handleSetCredentials(){
} }
} }
void clearCredentials(){ void clearCredentials() {
for (int i = 0; i < 96; ++i) { EEPROM.write(i, 0); } for (int i = 0; i < 96; ++i) {
EEPROM.commit(); EEPROM.write(i, 0);
}
EEPROM.commit();
} }
void handleClearCredentials(){ void handleClearCredentials() {
clearCredentials(); clearCredentials();
httpServer.send(200, "text/plain", "Cleared!"); httpServer.send(200, "text/plain", "Cleared!");
} }
void handleWhite(){ void handleWhite() {
fill_solid(leds, NUM_LEDS, CRGB(255,255,255)); fill_solid(leds, NUM_LEDS, CRGB(255, 255, 255));
FastLED.show(); FastLED.show();
httpServer.send(200, "text/plain", "White!"); httpServer.send(200, "text/plain", "White!");
} }
void handleOff(){ void handleColor() {
int r = httpServer.arg("r").toInt();
int g = httpServer.arg("g").toInt();
int b = httpServer.arg("b").toInt();
char msg[400];
fill_solid( leds, NUM_LEDS, CRGB(r,g,b));
FastLED.show();
snprintf ( msg, 400, "RGB=(%d, %d, %d)", r, g, b);
httpServer.send(200, "text/plain", msg);
}
void handleOff() {
fill_solid( leds, NUM_LEDS, CRGB::Black); fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show(); FastLED.show();
httpServer.send(200, "text/plain", "Off!"); httpServer.send(200, "text/plain", "Off!");
} }
void handleBrightness(){ void handleBrightness() {
int value = httpServer.arg("value").toInt(); int value = httpServer.arg("value").toInt();
if(value>0){ if (value > 0) {
FastLED.setBrightness(value); FastLED.setBrightness(value);
httpServer.send(200, "text/plain", "Brightness set to " + String(value)); httpServer.send(200, "text/plain", "Brightness set to " + String(value));
FastLED.show(); FastLED.show();
} else { } else {
httpServer.send(400, "text/plain", "Invalid value"); httpServer.send(400, "text/plain", "Invalid value");
} }
} }
void handleRoot() { void handleRoot() {
digitalWrite ( led, 1 ); digitalWrite ( led, 1 );
char temp[400]; char temp[400];
int sec = millis() / 1000; int sec = millis() / 1000;
int min = sec / 60; int min = sec / 60;
int hr = min / 60; int hr = min / 60;
snprintf ( temp, 400, snprintf ( temp, 400,
"<html>\ "<html>\
<head>\ <head>\
<meta http-equiv='refresh' content='5'/>\ <meta http-equiv='refresh' content='5'/>\
<title>ESP8266 Demo</title>\ <title>ESP8266 Demo</title>\
@ -182,13 +195,13 @@ void handleRoot() {
</body>\ </body>\
</html>", </html>",
hr, min % 60, sec % 60 hr, min % 60, sec % 60
); );
httpServer.send ( 200, "text/html", temp ); httpServer.send ( 200, "text/html", temp );
digitalWrite ( led, 0 ); digitalWrite ( led, 0 );
} }
void setupAP(){ void setupAP() {
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.disconnect(); WiFi.disconnect();
delay(100); delay(100);
@ -201,33 +214,33 @@ void setupAP(){
} }
void handleLoop() { void handleLoop() {
for(int dot = 0; dot < NUM_LEDS; dot++) { for (int dot = 0; dot < NUM_LEDS; dot++) {
leds[dot] = CRGB::Blue; leds[dot] = CRGB::Blue;
FastLED.show(); FastLED.show();
// clear this led for the next time around the loop // clear this led for the next time around the loop
leds[dot] = CRGB::Black; leds[dot] = CRGB::Black;
delay(30); delay(30);
} }
httpServer.send ( 404, "text/plain", "Done!" ); httpServer.send ( 404, "text/plain", "Done!" );
} }
struct credential getCredentials(){ struct credential getCredentials() {
Serial.println("Getting credentials from EEPROM"); Serial.println("Getting credentials from EEPROM");
struct credential cred; struct credential cred;
cred.ssid = ""; cred.ssid = "";
cred.pass = ""; cred.pass = "";
for (int i = 0; i < 32; ++i) for (int i = 0; i < 32; ++i)
{ {
cred.ssid += char(EEPROM.read(i)); cred.ssid += char(EEPROM.read(i));
} }
Serial.print("SSID: "); Serial.print("SSID: ");
Serial.println(cred.ssid); Serial.println(cred.ssid);
Serial.println("Reading EEPROM pass"); Serial.println("Reading EEPROM pass");
for (int i = 32; i < 96; ++i) for (int i = 32; i < 96; ++i)
{ {
cred.pass += char(EEPROM.read(i)); cred.pass += char(EEPROM.read(i));
} }
Serial.print("PASS: "); Serial.print("PASS: ");
Serial.println(cred.pass); Serial.println(cred.pass);
return cred; return cred;
@ -242,7 +255,7 @@ void setup() {
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
struct credential cred = getCredentials(); struct credential cred = getCredentials();
if (!connect(cred)){ if (!connect(cred)) {
setupAP(); setupAP();
} }
@ -284,19 +297,21 @@ void setup() {
httpServer.on ( "/loop", handleLoop ); httpServer.on ( "/loop", handleLoop );
httpServer.on ( "/", handleRoot ); httpServer.on ( "/", handleRoot );
httpServer.on ( "/clear", handleClearCredentials ); httpServer.on ( "/clear", handleClearCredentials );
httpServer.on ( "/set", handleSetCredentials ); httpServer.on ( "/credentials", handleSetCredentials );
httpServer.on ( "/white", handleWhite ); httpServer.on ( "/white", handleWhite );
httpServer.on ( "/color", handleColor );
httpServer.on ( "/off", handleOff ); httpServer.on ( "/off", handleOff );
httpServer.on ( "/brightness", handleBrightness ); httpServer.on ( "/brightness", handleBrightness );
httpServer.begin(); httpServer.begin();
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setDither(0); // FastLED.setDither(0);
// FastLED.setBrightness(200); FastLED.setBrightness(100);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 4000); FastLED.setMaxPowerInVoltsAndMilliamps(5, 20000);
} }
void loop() { void loop() {
ArduinoOTA.handle(); ArduinoOTA.handle();
httpServer.handleClient(); httpServer.handleClient();
FastLED.show();
} }