Show Posts
|
|
Pages: [1]
|
|
3
|
Using Arduino / Project Guidance / Re: Read values from webpage to control relay (Ethernet Shield)
|
on: April 28, 2012, 10:19:21 am
|
I finally got some time to continue this project. Picking up where I left off, the following code is working fine. With one exception when I click the on or off button using google chrome as the browser it only blinks off the led and the turns the led back on. So if anyone knows why this is happening I would be happy to learn about it, but for now I will use explorer and safari as browser when communicating with arduino. Also if anyone know about a good tutorial on ethernet syntax would be much appreciated. //George-Xrik 31-03-12, updated //zoomkat 12-08-11, combined client and server //simple button GET with iframe code //for use with IDE 1.0 //open serial monitor and send an g to test client and //see what the arduino client/server receives //web page buttons make pin 4 high/low //use the \ slash to escape the " in the html //address will look like http://192.168.1.177 or http://88.203.15.76 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 IPAddress ip(192,168,2,130); // ip in lan IPAddress gateway(192,168,2,1); // internet access via router IPAddress subnet(255,255,255,0); //subnet mask IPAddress myserver(208,104,2,86); // zoomkat web page EthernetServer server(80); //server port EthernetClient client; String readString;
//////////////////////
void setup(){
pinMode(8, OUTPUT); //pin selected to control Ethernet.begin(mac, ip, subnet, gateway); server.begin(); Serial.begin(9600); Serial.println("server/client 1.0 test 31/03/12"); // keep track of what is loaded Serial.println("Send g in serial monitor to test client"); // what to do to test client }
void loop(){ // check for serial input if (Serial.available() > 0) { byte inChar; inChar = Serial.read(); if(inChar == 'g') { sendGET(); // call sendGET function } }
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); //print to serial monitor for debuging
//now output HTML data header if(readString.indexOf('?') >=0) { //don't send new page client.println("HTTP/1.1 204 Zoomkat"); client.println(); client.println(); } else { client.println("HTTP/1.1 200 OK"); //send new page 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>Zoomkat's simple Arduino 1.0 button</H1>"); client.println("<H1>George's simple Arduino 1.0 button</H1>");
client.println("<a href=\"/?on\" target=\"inlineframe\">ON</a>"); client.println("<a href=\"/?off\" target=\"inlineframe\">OFF</a>");
//client.println("<IFRAME name=inlineframe src=\"res://D:/WINDOWS/dnserror.htm\" width=1 height=1\">"); client.println("<IFRAME name=inlineframe style=\"display:none\" >"); client.println("</IFRAME>");
client.println("</BODY>"); client.println("</HTML>"); }
delay(1); //stopping client client.stop();
///////////////////// control arduino pin if(readString.indexOf("on") >0)//checks for on { digitalWrite(8, HIGH); // set pin 4 high Serial.println("Led On"); } if(readString.indexOf("off") >0)//checks for off { digitalWrite(8, LOW); // set pin 4 low Serial.println("Led Off"); } //clearing string for next read readString="";
} } } } }
////////////////////////// void sendGET() //client function to send/receie GET request data. { if (client.connect(myserver, 80)) { Serial.println("connected"); client.println("GET /~shb/arduino.txt HTTP/1.0"); client.println(); } else { Serial.println("connection failed"); Serial.println(); }
while(client.connected() && !client.available()) delay(1); //waits for data while (client.connected() || client.available()) { //connected or data available char c = client.read(); Serial.print(c); }
Serial.println(); Serial.println("disconnecting."); Serial.println("=================="); Serial.println(); client.stop();
}
the following is the serial communication server/client 1.0 test 31/03/12 Send g in serial monitor to test client connected HTTP/1.1 200 OK Date: Sat, 28 Apr 2012 15:03:54 GMT Server: Apache Last-Modified: Sat, 13 Nov 2010 16:31:40 GMT Accept-Ranges: bytes Content-Length: 51 Connection: close Content-Type: text/plain; charset=UTF-8
Woohoo! Your arduino ethernet client works! zoomkat disconnecting. ==================
GET /?on HTTP/1.1 >>> from Safari (iphone)
Led On >>> from Safari (iphone) GET /?off HTTP/1.1 >>> from Safari (iphone)
Led Off >>> from Safari (iphone) GET /?on HTTP/1.1 >>> from explorer
Led On >>> from explorer GET /?off HTTP/1.1 >>> from explorer
Led Off >>> from explorer GET /?on HTTP/1.1 >>> from chrome
Led On >>> from chrome GET /favicon.ico HTTP/1.1 >>> from chrome
Led On >>> from chrome GET /?off HTTP/1.1 >>> from chrome
Led Off >>> from chrome GET /favicon.ico HTTP/1.1 >>> from chrome
Led On >>> from chrome
What should be noted is that i only click on and than off once on each browser, chrome acts strangely and turns the led back on.
|
|
|
|
|
4
|
Using Arduino / Project Guidance / Re: Read values from webpage to control relay (Ethernet Shield)
|
on: April 28, 2012, 10:07:17 am
|
I finally got some time to continue this project. Picking up where I left off, the following code is working fine. With one exception when I click the on or off button using google chrome as the browser it only blinks off the led and the turns the led back on. So if anyone knows why this is happening I would be happy to learn about it, but for now I will use explorer and safari as browser when communicating with arduino. Also if anyone know about a good tutorial on ethernet syntax would be much appreciated. //George-Xrik 31-03-12, updated //zoomkat 12-08-11, combined client and server //simple button GET with iframe code //for use with IDE 1.0 //open serial monitor and send an g to test client and //see what the arduino client/server receives //web page buttons make pin 4 high/low //use the \ slash to escape the " in the html //address will look like http://192.168.1.177 or http://88.203.15.76 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 IPAddress ip(192,168,2,130); // ip in lan IPAddress gateway(192,168,2,1); // internet access via router IPAddress subnet(255,255,255,0); //subnet mask IPAddress myserver(208,104,2,86); // zoomkat web page EthernetServer server(80); //server port EthernetClient client; String readString;
//////////////////////
void setup(){
pinMode(8, OUTPUT); //pin selected to control Ethernet.begin(mac, ip, subnet, gateway); server.begin(); Serial.begin(9600); Serial.println("server/client 1.0 test 31/03/12"); // keep track of what is loaded Serial.println("Send g in serial monitor to test client"); // what to do to test client }
void loop(){ // check for serial input if (Serial.available() > 0) { byte inChar; inChar = Serial.read(); if(inChar == 'g') { sendGET(); // call sendGET function } }
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); //print to serial monitor for debuging
//now output HTML data header if(readString.indexOf('?') >=0) { //don't send new page client.println("HTTP/1.1 204 Zoomkat"); client.println(); client.println(); } else { client.println("HTTP/1.1 200 OK"); //send new page 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>Zoomkat's simple Arduino 1.0 button</H1>"); client.println("<H1>George's simple Arduino 1.0 button</H1>");
client.println("<a href=\"/?on\" target=\"inlineframe\">ON</a>"); client.println("<a href=\"/?off\" target=\"inlineframe\">OFF</a>");
//client.println("<IFRAME name=inlineframe src=\"res://D:/WINDOWS/dnserror.htm\" width=1 height=1\">"); client.println("<IFRAME name=inlineframe style=\"display:none\" >"); client.println("</IFRAME>");
client.println("</BODY>"); client.println("</HTML>"); }
delay(1); //stopping client client.stop();
///////////////////// control arduino pin if(readString.indexOf("on") >0)//checks for on { digitalWrite(8, HIGH); // set pin 4 high Serial.println("Led On"); } if(readString.indexOf("off") >0)//checks for off { digitalWrite(8, LOW); // set pin 4 low Serial.println("Led Off"); } //clearing string for next read readString="";
} } } } }
////////////////////////// void sendGET() //client function to send/receie GET request data. { if (client.connect(myserver, 80)) { Serial.println("connected"); client.println("GET /~shb/arduino.txt HTTP/1.0"); client.println(); } else { Serial.println("connection failed"); Serial.println(); }
while(client.connected() && !client.available()) delay(1); //waits for data while (client.connected() || client.available()) { //connected or data available char c = client.read(); Serial.print(c); }
Serial.println(); Serial.println("disconnecting."); Serial.println("=================="); Serial.println(); client.stop();
}
the following is the serial communication server/client 1.0 test 31/03/12 Send g in serial monitor to test client connected HTTP/1.1 200 OK Date: Sat, 28 Apr 2012 15:03:54 GMT Server: Apache Last-Modified: Sat, 13 Nov 2010 16:31:40 GMT Accept-Ranges: bytes Content-Length: 51 Connection: close Content-Type: text/plain; charset=UTF-8
Woohoo! Your arduino ethernet client works! zoomkat disconnecting. ==================
GET /?on HTTP/1.1 >>> from Safari (iphone)
Led On GET /?off HTTP/1.1
Led Off GET /?on HTTP/1.1
Led On GET /?off HTTP/1.1
Led Off GET /?on HTTP/1.1
Led On GET /favicon.ico HTTP/1.1
Led On GET /?off HTTP/1.1
Led Off GET /favicon.ico HTTP/1.1
Led On
|
|
|
|
|
5
|
Using Arduino / Project Guidance / Re: Read values from webpage to control relay (Ethernet Shield)
|
on: April 04, 2012, 06:55:10 am
|
This is the client part of the code. It sends a request to a server for the arduino.txt file. can you explain further the arduino.txt ! Does the target page have a RSS feed or does the website provide an API? Otherwise you need to look at scraping the value from the site/page no neither an RSS feed nor an API, so will look into scrapping the values.
|
|
|
|
|
6
|
Using Arduino / Project Guidance / Re: Read values from webpage to control relay (Ethernet Shield)
|
on: March 31, 2012, 06:08:04 am
|
@ PaulS That site requires a password to access. What happens when you enter a password? It directs you to a new page that gives a more detailed account of the Kwh production form a PV plant, i.e Current and Voltage measurement values are stored in this data base. I am trying set up the ardunio to get this values and show them on the web page and also use them to actuate the relay.
|
|
|
|
|
7
|
Using Arduino / Project Guidance / Re: Read values from webpage to control relay (Ethernet Shield)
|
on: March 31, 2012, 05:19:27 am
|
First of all thanks for the help. I have managed to get the code zoomkat posted working, thanks again it worked fine with minor alterations of the ip in lan and server port [I have set the sever to 80]. I have some questions regarding the code: Should the led (pin4) remain off(low) once the off button in the web page has been clicked? ....as it is only going off for a moment and back on, i.e one blink. what is this part of the code doing? //now output HTML data header if(readString.indexOf('?') >=0) { //don't send new page client.println("HTTP/1.1 204 Zoomkat"); client.println(); client.println(); Also this part of the code is confusing me, void sendGET() //client function to send/receie GET request data. { if (client.connect(myserver, 80)) { Serial.println("connected"); client.println("GET /~shb/arduino.txt HTTP/1.0"); client.println(); ....I am assuming the client.println("GET /~shb/arduino.txt HTTP/1.0") ; is calling something and this is returned and printed to the serial port as HTTP/1.1 200 OK Date: Sat, 31 Mar 2012 10:11:40 GMT Server: Apache Last-Modified: Sat, 13 Nov 2010 16:31:40 GMT Accept-Ranges: bytes Content-Length: 51 Connection: close Content-Type: text/plain; charset=UTF-8
Woohoo! Your arduino ethernet client works! zoomkat disconnecting. ==================
is that correct ?
|
|
|
|
|
9
|
Using Arduino / Project Guidance / Read values from webpage to control relay (Ethernet Shield)
|
on: March 26, 2012, 07:18:09 am
|
|
Hi,
What I am trying to do is with arduino get values from a web site, and from the values close or open a relay (turn a digital pin high or low). While at the same time host a simple HTML page that displays the current position of the relay and the values I am reading from the website.
I am using an arduino mega (ATmega1280) board and an Ethernet shield.
I have managed to set up a simple HTML page that can be viewed on the local network and externally over internet, using the web server example. In other words I have set up the port forwarding for the arduino.
I need help or suggestions (even feasibility) on how to get values from a web site and displaying them on the html page hosted by the arduino.
Thanks
|
|
|
|
|