Go Down

Topic: Reading strings from HTML Get request and saving as a variable (Read 782 times) previous topic - next topic

Horendus

Hey
This is my first post about Arduino, which I am quite new to but am having LOTS of fun with  XD

I have however reached a point where I need to start discussing solutions with this amazing community as iv reached the limits of my current programming knowledge.  :smiley-sad-blue:

What im trying to do is the following.

Have an Uno R3 and Ethernet Sheild running a webserver with a basic web form on it. This form contains 10 fields which I want to be able to fill out from my web browser and submit them to the Uno R3 at a GET request (or SET?), which in turns saves the data from these forms as either INT or STRINGS (some of the field will be for INT and some for STRINGS)

I was wondering if someone can tell me the simplest way of achieving this.
I can already setup the webserver, build the web form with HTML and read the submitted data to the serial window but I so far have FAILED to save the required parts of the HTTP GET request to variables of the required data type, which will then be used later in program.

Thanks to anyone who takes the time to assist me with this  :smiley-red:

SurferTim

Here is my server code. It saves the request in a variable named tBuf so you can parse it.
http://playground.arduino.cc/Code/WebServerST
You will probably need to increase the size of the tBuf array to handle that many variables.

zoomkat

Very simple server code that uses a form with a text box and captures the GET request into a String. Use the serial monitor to see what is received by the arduino. 

Code: [Select]

//zoomkat 7-29-12
//submit box test code
//for use with IDE 0021
//open serial monitor to see what the arduino receives
//use the ' to replace the " in the html
//address will look like http://192.168.1.102:84/ when submited
//for use with W5100 based ethernet shields

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 102 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(84); //server port

String readString;

//////////////////////

void setup(){

  pinMode(4, OUTPUT); //pin selected to control
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, gateway, subnet);
  server.begin();

  //enable serial data print
  Serial.begin(9600);
  Serial.println("servertest1"); // so I can keep track of what is loaded
}

void loop(){
  // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        //read char by char HTTP request
        if (readString.length() < 100) {

          //store characters to string
          readString += c;
          //Serial.print(c);
        }

        //if HTTP request has ended
        if (c == '\n') {

          ///////////////
          Serial.println(readString);

          //now output HTML data header

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>Arduino GET test page</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");

          client.println("<H1>HTML form GET example</H1>");

          client.println("<FORM ACTION='/' method=get >");

          client.println("Pin 4 'on' or 'off': <INPUT TYPE=TEXT NAME='LED' VALUE='' SIZE='25' MAXLENGTH='50'><BR>");

          client.println("<INPUT TYPE=SUBMIT NAME='submit' VALUE='Change Pin 4!'>");

          client.println("</FORM>");

          client.println("<BR>");

          client.println("</BODY>");
          client.println("</HTML>");

          delay(1);
          //stopping client
          client.stop();

          /////////////////////
          if(readString.indexOf("on") >0)//checks for on
          {
            digitalWrite(4, HIGH);    // set pin 4 high
            Serial.println("Led On");
          }
          if(readString.indexOf("off") >0)//checks for off
          {
            digitalWrite(4, LOW);    // set pin 4 low
            Serial.println("Led Off");
          }
          //clearing string for next read
          readString="";

        }
      }
    }
  }
}

Consider the daffodil. And while you're doing that, I'll be over here, looking through your stuff.   8)

Go Up