LeeT WiFiLamp code and test

Dependencies:   ESP8266_WebServer mbed

Fork of WiFiLamp by Sebastian Schocke

Committer:
sschocke
Date:
Mon Dec 29 21:00:26 2014 +0000
Revision:
19:7fdccfd5b50b
Parent:
13:1e8f27da036a
Parent:
16:f2f2da9ef9ab
Child:
20:f5a6527bfda6
Merge leet's front page changes into new firmware branch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sschocke 0:d21e3e1c0a4b 1 #include "mbed.h"
sschocke 1:f07afcffeb5a 2 #include "PololuLedStrip.h"
sschocke 7:f15c81074400 3 #include "ESP8266_WebServer.h"
sschocke 0:d21e3e1c0a4b 4 #include <string>
sschocke 13:1e8f27da036a 5 //#define DEBUG_WIFI
sschocke 0:d21e3e1c0a4b 6
sschocke 8:f819de1946a7 7 PololuLedStrip ledStrip(D11);
sschocke 1:f07afcffeb5a 8
sschocke 8:f819de1946a7 9 #define LED_COUNT 8
sschocke 1:f07afcffeb5a 10 rgb_color colors[LED_COUNT];
sschocke 1:f07afcffeb5a 11
sschocke 0:d21e3e1c0a4b 12 DigitalOut wifiCHPD(D4);
sschocke 0:d21e3e1c0a4b 13 DigitalOut wifiReset(D9);
sschocke 0:d21e3e1c0a4b 14
sschocke 0:d21e3e1c0a4b 15 int wifiOn = 0;
sschocke 0:d21e3e1c0a4b 16
sschocke 0:d21e3e1c0a4b 17 Serial wifiSerial(D8,D2);
sschocke 0:d21e3e1c0a4b 18 Serial pc(USBTX,USBRX);
sschocke 7:f15c81074400 19 ESP8266_WebServer server(&wifiSerial);
sschocke 0:d21e3e1c0a4b 20
sschocke 7:f15c81074400 21 void rxint(void) {
sschocke 7:f15c81074400 22 server.rxint();
sschocke 0:d21e3e1c0a4b 23 }
sschocke 0:d21e3e1c0a4b 24
tomvdb 4:4a502f72cbe3 25 void setColor( uint8_t r, uint8_t g, uint8_t b )
tomvdb 4:4a502f72cbe3 26 {
tomvdb 4:4a502f72cbe3 27 for ( int c = 0; c < LED_COUNT; c++ )
tomvdb 4:4a502f72cbe3 28 {
tomvdb 4:4a502f72cbe3 29 colors[c].red = r;
tomvdb 4:4a502f72cbe3 30 colors[c].green = g;
tomvdb 4:4a502f72cbe3 31 colors[c].blue = b;
tomvdb 4:4a502f72cbe3 32 }
tomvdb 4:4a502f72cbe3 33
tomvdb 4:4a502f72cbe3 34 ledStrip.write(colors, LED_COUNT);
tomvdb 4:4a502f72cbe3 35 }
tomvdb 4:4a502f72cbe3 36
sschocke 0:d21e3e1c0a4b 37 int main() {
sschocke 13:1e8f27da036a 38 pc.baud(115200);
leet 10:f48a9f923271 39
leet 16:f2f2da9ef9ab 40 pc.printf("WiFi Lamp - v0.02 ...\r\n");
leet 10:f48a9f923271 41
sschocke 13:1e8f27da036a 42 setColor( 25, 0, 0);
tomvdb 4:4a502f72cbe3 43
sschocke 0:d21e3e1c0a4b 44 wifiCHPD = 0;
sschocke 0:d21e3e1c0a4b 45 wifiReset = 0;
sschocke 13:1e8f27da036a 46 wifiSerial.baud(115200);
sschocke 0:d21e3e1c0a4b 47 wifiSerial.attach(&rxint);
sschocke 7:f15c81074400 48 #ifdef DEBUG_WIFI
sschocke 7:f15c81074400 49 server.debugSerial = &pc;
sschocke 7:f15c81074400 50 #endif
sschocke 0:d21e3e1c0a4b 51 wait_ms(1000);
sschocke 0:d21e3e1c0a4b 52
sschocke 0:d21e3e1c0a4b 53 pc.printf("Powering WiFi...\r\n");
sschocke 0:d21e3e1c0a4b 54 wifiCHPD = 1;
sschocke 13:1e8f27da036a 55 wifiReset = 1;
sschocke 0:d21e3e1c0a4b 56 wait_ms(250);
sschocke 0:d21e3e1c0a4b 57 pc.printf("Hardware Reset WiFi...\r\n");
sschocke 0:d21e3e1c0a4b 58 wifiOn = 1;
sschocke 0:d21e3e1c0a4b 59
sschocke 7:f15c81074400 60 pc.printf("Starting Web Server...\r\n");
sschocke 7:f15c81074400 61 server.Initialize();
sschocke 0:d21e3e1c0a4b 62 pc.printf("Done\r\n");
sschocke 0:d21e3e1c0a4b 63
sschocke 13:1e8f27da036a 64 setColor( 0, 25, 0);
tomvdb 4:4a502f72cbe3 65 wait_ms(500);
tomvdb 4:4a502f72cbe3 66 setColor( 0, 0, 0);
tomvdb 4:4a502f72cbe3 67
sschocke 0:d21e3e1c0a4b 68 while(true) {
sschocke 9:319aeb6e0123 69 ESP8266_WebRequest* request = server.GetRequest();
sschocke 9:319aeb6e0123 70 if( request != NULL ) {
sschocke 9:319aeb6e0123 71 pc.printf("HTTP %s %s\r\n", request->Method.c_str(), request->URI.c_str());
sschocke 9:319aeb6e0123 72 for( std::map<std::string,std::string>::iterator it = request->Parameters.begin(); it!=request->Parameters.end(); ++it ) {
sschocke 9:319aeb6e0123 73 pc.printf("HTTP Parameter %s = %s\r\n", it->first.c_str(), it->second.c_str());
sschocke 9:319aeb6e0123 74 }
sschocke 7:f15c81074400 75 std::string httpReply;
sschocke 9:319aeb6e0123 76 if( request->URI == "/" ) {
leet 16:f2f2da9ef9ab 77 httpReply = "<html><title>WiFi Lamp</title> \
leet 16:f2f2da9ef9ab 78 <body><h1>The WiFi Lamp v0.02 is alive ...</h1>Quick colour links:<br> \
leet 16:f2f2da9ef9ab 79 <a href='/red'>Red</a><br><a href='/green'>Green</a><br><a href='/blue'>Blue</a><br><a href='/white'>White</a><br> \
leet 16:f2f2da9ef9ab 80 <form id='setcolour' action='setcolour' > \
leet 16:f2f2da9ef9ab 81 <p> \
leet 16:f2f2da9ef9ab 82 Red: <input type='text' name='r' value='0' /> \
leet 16:f2f2da9ef9ab 83 </p> \
leet 16:f2f2da9ef9ab 84 <p> \
leet 16:f2f2da9ef9ab 85 Green: <input type='text' name='g' value='0' /> \
leet 16:f2f2da9ef9ab 86 </p> \
leet 16:f2f2da9ef9ab 87 <p> \
leet 16:f2f2da9ef9ab 88 Blue: <input type='text' name='b' value='0' /> \
leet 16:f2f2da9ef9ab 89 </p> \
leet 16:f2f2da9ef9ab 90 <p> \
leet 16:f2f2da9ef9ab 91 <input type='submit' /> \
leet 16:f2f2da9ef9ab 92 </p> \
leet 16:f2f2da9ef9ab 93 </form> \
leet 16:f2f2da9ef9ab 94 </body></html>";
sschocke 7:f15c81074400 95 setColor(0,0,0);
sschocke 12:fbf950985e1c 96 server.SendReply(request->LinkID, httpReply, mimeHTML);
sschocke 9:319aeb6e0123 97 } else if( request->URI == "/red" ) {
leet 10:f48a9f923271 98 httpReply = "<html><head><title>WiFi Lamp</title></head><body><h1>The WiFi Lamp is now Red - To Turn <a href='/'>Off</a></h1></body></html>";
sschocke 7:f15c81074400 99 setColor(100, 0, 0);
sschocke 11:3ab606a42227 100 server.SendReply(request->LinkID, httpReply, mimeHTML);
leet 10:f48a9f923271 101 } else if( request->URI == "/green" ) {
leet 10:f48a9f923271 102 httpReply = "<html><head><title>WiFi Lamp</title></head><body><h1>The WiFi Lamp is now Green - To Turn <a href='/'>Off</a></h1></body></html>";
leet 10:f48a9f923271 103 setColor(0, 100, 0);
sschocke 12:fbf950985e1c 104 server.SendReply(request->LinkID, httpReply, mimeHTML);
leet 10:f48a9f923271 105 } else if( request->URI == "/blue" ) {
leet 10:f48a9f923271 106 httpReply = "<html><head><title>WiFi Lamp</title></head><body><h1>The WiFi Lamp is now Blue - To Turn <a href='/'>Off</a></h1></body></html>";
leet 10:f48a9f923271 107 setColor(0, 0, 100);
sschocke 12:fbf950985e1c 108 server.SendReply(request->LinkID, httpReply, mimeHTML);
leet 10:f48a9f923271 109 } else if( request->URI == "/white" ) {
leet 10:f48a9f923271 110 httpReply = "<html><head><title>WiFi Lamp</title></head><body><h1>The WiFi Lamp is now White - To Turn <a href='/'>Off</a></h1></body></html>";
leet 10:f48a9f923271 111 setColor(100, 100, 100);
sschocke 12:fbf950985e1c 112 server.SendReply(request->LinkID, httpReply, mimeHTML);
leet 16:f2f2da9ef9ab 113 } else if( request->URI == "/setcolour" || request->URI == "/setcolor" ) {
sschocke 7:f15c81074400 114 int r=0, g=0, b=0;
sschocke 9:319aeb6e0123 115
sschocke 9:319aeb6e0123 116 if(request->Parameters.count("r") > 0) r=atoi(request->Parameters["r"].c_str());
sschocke 9:319aeb6e0123 117 if(request->Parameters.count("g") > 0) g=atoi(request->Parameters["g"].c_str());
sschocke 9:319aeb6e0123 118 if(request->Parameters.count("b") > 0) b=atoi(request->Parameters["b"].c_str());
sschocke 7:f15c81074400 119
leet 16:f2f2da9ef9ab 120 pc.printf( "Set colour to (%i, %i, %i)\r\n", r,g,b);
sschocke 0:d21e3e1c0a4b 121
sschocke 7:f15c81074400 122 setColor( r,g,b );
sschocke 7:f15c81074400 123
sschocke 7:f15c81074400 124 httpReply = "<html><head><title>WiFi Lamp</title></head><body>ok</body></html>";
sschocke 11:3ab606a42227 125 server.SendReply(request->LinkID, httpReply, mimeHTML);
sschocke 7:f15c81074400 126 } else {
sschocke 11:3ab606a42227 127 server.Send404Error(request->LinkID);
sschocke 0:d21e3e1c0a4b 128 }
sschocke 7:f15c81074400 129 pc.printf("\r\nHTTP Reply Sent\r\n");
sschocke 9:319aeb6e0123 130 delete request;
sschocke 0:d21e3e1c0a4b 131 }
sschocke 1:f07afcffeb5a 132
sschocke 0:d21e3e1c0a4b 133 wait_ms(10);
sschocke 0:d21e3e1c0a4b 134 }
sschocke 0:d21e3e1c0a4b 135 }