Simply i'm try to get TXT file contain throw Arduino Ethernet shield using the Following code
the original code http://arduino.cc/en/Tutorial/WebClientRepeating
/*
Repeating Web client
This sketch connects to a a web server and makes a request
using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
the Adafruit Ethernet shield, either one will work, as long as it's got
a Wiznet Ethernet module on board.
This example uses DNS, by assigning the Ethernet client with a MAC address,
IP address, and DNS address.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
created 19 Apr 2012
by Tom Igoe
http://arduino.cc/en/Tutorial/WebClientRepeating
This code is in the public domain.
*/
#include <SPI.h>
#include <Ethernet.h>
// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(192,168,1,177);
// fill in your Domain Name Server address here:
IPAddress myDns(192,168,1,1);
// initialize the library instance:
EthernetClient client;
char server[] = "192.168.1.100";
unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
boolean lastConnected = false; // state of the connection last time through the main loop
const unsigned int postingInterval = 60*1000; // delay between updates, in milliseconds
void setup() {
// start serial port:
Serial.begin(9600);
// give the ethernet module time to boot up:
delay(1000);
// start the Ethernet connection using a fixed IP address and DNS server:
Ethernet.begin(mac, ip, myDns);
// print the Ethernet board/shield's IP address:
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
}
void loop() {
// if there's incoming data from the net connection.
// send it out the serial port. This is for debugging
// purposes only:
if (client.available()) {
char c = client.read();
Serial.print(c);
}
// if there's no net connection, but there was one last time
// through the loop, then stop the client:
if (!client.connected() && lastConnected) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
// if you're not connected, and ten seconds have passed since
// your last connection, then connect again and send data:
if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
httpRequest();
}
// store the state of the connection for next time through
// the loop:
lastConnected = client.connected();
}
// this method makes a HTTP connection to the server:
void httpRequest() {
// if there's a successful connection:
if (client.connect(server, 80)) {
Serial.println("connecting...");
// send the HTTP PUT request:
client.println("GET /latest.txt HTTP/1.1");
client.println("Host: 192.168.1.100");
client.println("User-Agent: arduino-ethernet");
client.println("Connection: close");
client.println();
// note the time that the connection was made:
lastConnectionTime = millis();
}
else {
// if you couldn't make a connection:
Serial.println("connection failed");
Serial.println("disconnecting.");
client.stop();
}
}
all my Results on Serial Monitor
My IP address: 192.168.1.177
connecting...
HTTP/1.1 200 OK
Date: Tue, 16 Sep 2014 14:17:12 GMT
Server: Apache/2.4.9 (Win64) PHP/5.5.12
Last-Modified: Tue, 16 Sep 2014 12:42:19 GMT
ETag: "6-5032e150962be"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/plain
123321
disconnecting.
i want to use the data like this if(strcmp(test,"123321")==0) Serial.println( "OK");
but when it have http header i can't so i want to get only the text
change client.println("GET /latest.txt HTTP/1.1");
to client.println("GET /latest.txt");
I worked on exactly similar code. You need to save your response in a string first. So where your read statement is, you need a string append operator and change "if" to "while", something like
while(client.available())
{
c = client.read();
response = response + c;
}
make sure you declare the string "response" out side the void loop(). This will save the entire response of the server in the "response". After that you can apply substring functions to extract the required text from the "response". Visit Arduino's official webpage for the details of "substring". In my case it was something like:
r = (response.substring(165,174));
To find where the headers end and the original response begins, is going to be a little pain in the neck, i recommend trial and error method. Just keep on trying arbitrary string indexes. Print "r" every time to see how close you have gotten. Or you could count the characters, including spaces and " " from HTTP 1.1 to the beginning of 123321. So the variable "r" would carry the text b/w index positions you provided to response.substring( , ) , of the string "response". After that you could use "r" for whatever the purpose you like.
Take a look at my code. I hope it helps. String Comparsion: Arduino C