LeeT WiFiLamp code and test

Dependencies:   ESP8266_WebServer mbed

Fork of WiFiLamp by Sebastian Schocke

Files at this revision

API Documentation at this revision

Comitter:
leet
Date:
Wed Jan 07 21:36:45 2015 +0000
Parent:
25:841fc9daffa5
Commit message:
Add favicon, robots.txt and LED Disco Function, no WebGUI yet.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
resource.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Jan 06 18:44:43 2015 +0000
+++ b/main.cpp	Wed Jan 07 21:36:45 2015 +0000
@@ -52,6 +52,34 @@
     ledStrip.write(colors, LED_COUNT);
 }
 
+void setDiscoColor( )
+{
+    for ( int c = 0; c < LED_COUNT; c++ )
+    {
+        colors[c].red = rand()%255;
+        colors[c].green = rand()%255;
+        colors[c].blue = rand()%255;
+    }
+    
+    ledStrip.write(colors, LED_COUNT);
+}
+
+Timer DiscoTimer;
+#define DiscoDelay 100
+
+int lampMode = 0;
+
+unsigned long heapSize()
+{
+    char   stackVariable;
+    void   *heap;
+    unsigned long result;
+    heap  = malloc(4);
+    result  = (uint8_t*)&stackVariable - (uint8_t*)heap;
+    free(heap);
+    return result;
+}
+
 void sendConfigJSONReply(int linkID, const char* result) {
     sprintf(temp, jsonConfigReply, opMode, stationIP.c_str(), ssid.c_str(), result);
     server.SendReply(linkID, temp, mimeJSON, 0);
@@ -63,7 +91,7 @@
     pc.attach(&pcrxint);
 #endif
     
-    pc.printf("WiFi Lamp - %s...\r\n", VERSION);    
+    pc.printf("\r\nWiFi Lamp - %s...\r\n", VERSION);    
     
     setColor( 25, 0, 0);
     
@@ -73,6 +101,7 @@
     wifiSerial.attach(&rxint);
 #ifdef DEBUG_WIFI
     server.debugSerial = &pc;
+    pc.printf("Debug WiFi Enabled!\r\n");
 #endif
     wait_ms(1000);
     
@@ -84,7 +113,6 @@
     server.ResetModule();
     wifiOn = 1;
     
-    
     std::string fwVer = server.GetFirmwareVersion();
     pc.printf("ESP Firmware Version: %s\r\n", fwVer.c_str());
     
@@ -112,6 +140,9 @@
     wait_ms(500);
     setColor( 0, 0, 0);
     
+    pc.printf("Heap Memory %d", heapSize());
+    DiscoTimer.start();
+                    
     std::string httpReply;
     while(true) {
         ESP8266_WebRequest* request = server.GetRequest();
@@ -120,7 +151,7 @@
             for( std::map<std::string,std::string>::iterator it = request->Parameters.begin(); it!=request->Parameters.end(); ++it ) {
                 pc.printf("HTTP Parameter %s = %s\r\n", it->first.c_str(), it->second.c_str());
             }
-            if( request->URI == "/" ) {
+            if( request->URI == "/" || request->URI == "/index.html" ) {
                 httpReply = htmlHead;
                 httpReply += "<table><tr><td align='right'><a href='config'><img src='config.gif' /></a></td></tr>";
                 httpReply += "<tr><td align='center'>";
@@ -185,11 +216,21 @@
             } else if( request->URI == "/wifilamp.css" ) {
                 server.SendReply(request->LinkID, css, strlen(css), mimeCSS);
             } else if( request->URI == "/colormap.gif" ) {
-                server.SendReply(request->LinkID, (char*)colormap, sizeof(colormap), mimeGIF);
+                server.SendReply(request->LinkID, (char*)colorMap, sizeof(colorMap), mimeGIF);
             } else if( request->URI == "/config.gif" ) {
                 server.SendReply(request->LinkID, (char*)configIcon, sizeof(configIcon), mimeGIF);
+           } else if( request->URI == "/robtos.txt" ) {
+                server.SendReply(request->LinkID, robotsTxt, strlen(robotsTxt), mimeText);
+            } else if( request->URI == "/favicon.ico" ) {
+                server.SendReply(request->LinkID, (char*)favIcon, sizeof(favIcon), "image/x-icon");
+            } else if( request->URI == "/disco" ) {
+                lampMode = 2; // All colours
+                DiscoTimer.reset();
+                server.SendReply(request->LinkID, "OK", mimeText, 0);
             } else if( request->URI == "/setcolour" || request->URI == "/setcolor" ) {
                 int r=0, g=0, b=0;
+
+                lampMode = 1; // All LED 1 colour                
                 
                 if(request->Parameters.count("r") > 0) r=atoi(request->Parameters["r"].c_str());
                 if(request->Parameters.count("g") > 0) g=atoi(request->Parameters["g"].c_str());
@@ -206,5 +247,20 @@
             pc.printf("\r\nHTTP Reply Sent\r\n");
             delete request;
         }
+        if( lampMode == 2 && DiscoTimer.read_ms() > DiscoDelay ) {
+            setDiscoColor();
+            // Delay random colour change, else it just looks white
+            DiscoTimer.reset();
+        }
+/*
+        if( lampMode == 3 ) {
+            // strobe
+        }
+
+        if( lampMode == 4 ) {
+            // fade
+        }
+
+*/
     }
 }
\ No newline at end of file
--- a/resource.h	Tue Jan 06 18:44:43 2015 +0000
+++ b/resource.h	Wed Jan 07 21:36:45 2015 +0000
@@ -35,7 +35,9 @@
 padding: 4px 10px;} table#config tr td input[type=button] {padding: 5px 20px;margin-top: 10px;} div#message {text-align: center;font-size: x-large;padding-bottom: 10px;}";
 
 const char areaHTML[] = "<area shape='poly' coords='%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d'>";
-const char htmlHead[] = "<html><head><title>RGB WiFi Lamp</title><link rel='stylesheet' href='wifilamp.css' /><script src='wifilamp.js'></script></head><body onLoad='onLoad()'>";
+const char htmlHead[] = "<html><head><title>RGB WiFi Lamp</title><link rel='shortcut icon' href='/favicon.ico' type='image/x-icon'>\
+<link rel='icon' href='/favicon.ico' type='image/x-icon'><link rel='stylesheet' href='/wifilamp.css' /><script src='/wifilamp.js'>\
+</script></head><body onLoad='onLoad()'>";
 const char htmlTail[] = "</body></html>";
 
 const char htmlConfigHTML[] = "<div id='message'></div><table id='config'>\
@@ -57,7 +59,7 @@
 </table>";
 const char jsonConfigReply[] = "{\"opmode\":%d,\"staip\":\"%s\",\"ssid\":\"%s\",\"result\":\"%s\"}";
 
-const unsigned char colormap[7074]=
+const unsigned char colorMap[7074]=
 {
     0x47,0x49,0x46,0x38,0x39,0x61,0xEA,0x00,0xC7,0x00,0xE6,
     0x7F,0x00,0x99,0x00,0x00,0x00,0xCC,0xFF,0x33,0x33,0x00,
@@ -705,7 +707,7 @@
     0x3B,
 };
 
-unsigned char configIcon[144]=
+const unsigned char configIcon[144]=
 {
     0x47,0x49,0x46,0x38,0x39,0x61,0x10,0x00,0x10,0x00,0xA2,
     0x06,0x00,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x80,0x80,0x80,
@@ -722,3 +724,82 @@
     0x78,0x4A,0xF5,0x00,0x85,0x17,0x07,0xCC,0x91,0x00,0x00,
     0x3B,
 };
+
+const char robotsTxt[] = "User-agent: *\r\n\
+Disallow: /\r\n";
+
+// http://favicon-generator.org/about/
+// hexdump -e '15/1 "0x%02X, " 1/1  " 0x%02X,\n"' favicon.ico >> resources.h
+const unsigned char favIcon[1150] =
+{
+    0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x68, 0x04,
+    0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00,
+    0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x12, 0x0B,
+    0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0xCD, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x00, 0xCC, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xCD, 0x00,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x00, 0xBC, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x00,
+    0x33, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0xFF, 0x00, 0xBC, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00,
+    0xCC, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x09,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0xEF, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x09, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x00, 0xF7,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x00, 0xBC, 0xFF, 0x00, 0x80,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x09,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x00, 0xBC, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0xEF, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88,
+    0xB7, 0x00, 0xFF, 0x00, 0xBC, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xCD, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x00, 0xF7,
+    0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0x09, 0xFF, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xEF, 0xFF,
+    0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x09, 0x00, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xFF, 0x00,
+    0xBC, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xCD, 0x00, 0xFF, 0xFF, 0x90, 0x88, 0xB7, 0x00, 0xAA, 0xAA,
+    0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xAA, 0xAA, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xAA, 0xAA,
+};
+