Simple web server with WiFly Shield - HTTP response problems (solved)


i'm trying make rgb led light using web page called wifly shield mounted onto arduino uno r3. arduino connected hp laptop running ubuntu 14.04. web page shows seen in figure 1. however, http response on serial monitor turns complete gibberish. @ figure 2 see http response. finally, i've attached 1 last figure, figure 3, shows correct response should getting.

below code used wifly server i've built. got sparkfun website.

code: [select]

#include <spi.h>
#include "wifly.h" //include wifly experimental library

char msg[128];//variables reading in html responses
int lettercount = 0;

int redpin = 3;
int greenpin = 5;
int bluepin = 6;

wiflyserver server(80);// set manually line needed initialize server()
                  //port 80 default http port

///////////////////////////////////////////////////////////////////
void setup()
{
  pinmode(redpin, output);  //set rgb pins outputs
  pinmode(greenpin, output);
  pinmode(bluepin, output);

  digitalwrite(redpin, low); //set leds low/off
  digitalwrite(greenpin, low);
  digitalwrite(bluepin, low);

   wifly.begin();//begin wifly communictaiosn

  serial.begin(9600);  //serial communication @ 9600 buad debugging
  serial.print("ip: ");
  serial.println(wifly.ip());  //prints ip address once associated network
                              //if dhcp on, ip can change. if static ip set, should not.

  server.begin(); //initialize server
}
///////////////////////////////////////////////////////////////////
void loop()
{
  wiflyclient client = server.available();
  //the flag dataflag give notification of actual post
  //is once flag can begin recording message
  //so can stuff later on

  int dataflag = 0;
  int msgisolator = 0;

  //int inchar; //variable reading in data phone/browser
  //boolean isparsing = false;// flag reading in , parsing data

  if (client) {
    // http request ends blank line
    boolean current_line_is_blank = true;
    boolean endofcode = true;
    char c;

    while (client.connected())
    {
      if (client.available())
      {
        c = client.read();
        delay(10);
        //uncomment line see http respone
        serial.print(c);

        // if we've gotten end of line (received newline
        // character) , line blank, http request has ended,
        // can send reply
        if (!client.available()) {
          endofcode = true;
        } else if (c == '\n') {
          // we're starting new line
          current_line_is_blank = true;
        } else if (c != '\r') {
          // we've gotten character on current line
          current_line_is_blank = false;
          endofcode = false;
        }

        //this message user entered going where
        //we record char array
        if (msgisolator == 1)
        {
          recordmessage(c);
          delay(100);
        }

        if ((c == '\n' && current_line_is_blank && !client.available()) || endofcode)
        {

          //as page has been refreshed letter count set zero
          lettercount = 0;

          //once page has been refreshed no longer on first run through
          //off program set false
          endofcode = false;

          // send standard http response header
          client.println("http/1.1 200 ok");
          client.println("content-type: text/html");
          //client.println("connection: close");

          client.println();

          //this creates user see on site.
          client.println("<html>");
          client.println("<title>rgb led server</title>");

          //the form code creates buttons click , change temp/blanketstate
          client.println("<center>");
          client.println("<form name=\"input\" action=\"\" method=\"post\">");
          client.println("<input type=\"submit\" name=\"%\" value=\"red\" style=\"height:50px; width:150px\" >");// made buttons larger smart phone screens
          client.println("</form>");

          client.println("<form name=\"input\" action=\"\" method=\"post\">");
          client.println("<input type=\"submit\" name=\"%\" value=\"green\" style=\"height:50px; width:150px\" >");
          client.println("</form>");

          client.println("<form name=\"input\" action=\"\" method=\"post\">");
          client.println("<input type=\"submit\" name=\"%\" value=\"blue\" style=\"height:50px; width:150px\" >");
          client.println("</form>");

          client.println("</center>");
          client.println("</html>");
          //***note: added reload button, , broke everything. combined temperature state , number 1 line ,
          //took out other html code. worked. leads me beleive there wifly can serve @ time??***
          delay(500);//delay important. gives browser time process requests
          lettercount = 0;
          checkaction();//go check action function html button pressed.
          break;
        }

        //if want see data comming in , going out uncomment line below
        //serial.print(c);

        //we detect actual post data in other words user entered
        //once isolate can parse , use it
        if (c =='%')
        {
          dataflag = 1;
        }
          if (dataflag == 1)
          {
            //in here goes user entered data follows string "25="
            if (c == '=')
            {
              //trim fat of recorded char user entered message
              msgisolator = 1;
            }
          }
      }
    }

  // give web browser time receive data
  delay(100);//delay important
  client.flush();
  client.stop();
  }
}
///////////////////////////////////////////////////////////////////////

char recordmessage (char incomingmsg)
{
  //lettercount = 0;
  msg[lettercount] = incomingmsg;
  lettercount++;
  delay(100);
}
///////////////////////////////////////////////////////////////////////
void checkaction()
// first 2 or 3 letters of each message read determine button clicked on webage
{
  if (msg[0] == 'r' && msg[1] == 'e' && msg[2] == 'd')// turn on red led
  {
    digitalwrite(redpin, high);
    digitalwrite(greenpin, low);
    digitalwrite(bluepin, low);
  }
  //-------------------------------------------------------
  else if (msg[0] == 'g' && msg[1] == 'r' && msg[2] == 'e')//turn on green led
  {
    digitalwrite(redpin, low);
    digitalwrite(greenpin, high);
    digitalwrite(bluepin, low);
  }
  //-------------------------------------------------------
  else if (msg[0] == 'b' && msg[1] == 'l' && msg[2] == 'u')//turn on blue led
  {
    digitalwrite(redpin, low);
    digitalwrite(greenpin, low);
    digitalwrite(bluepin, high);
  }

}//end checkaction()


anyone know how solve problem? please me asap!!

that not gibberish. header.

i don't see difference between second , third image.

also, type of form using uses post method. send data after header (blank line or double cr/lf), , using client.flush() delete it. either read after blank line, or recommend, change form methods get.

edit: , none of post request. requests.


Arduino Forum > Using Arduino > Project Guidance > Simple web server with WiFly Shield - HTTP response problems (solved)


arduino

Comments

Popular posts from this blog

arduino bug sur secteur, batterie, mais pas en usb?

Static ip - Raspberry Pi Forums

Printing to PDF adds printer margins