Go Down

Topic: Control Arduino from website? (Read 11168 times) previous topic - next topic

hondaguyjoe

I've done some searching on the site and I haven't really found what I'm looking for. I've found a lot of info on setting up an arduino to run a server to connect to directly.

Heres what I'm looking to do I'm hoping some one can help point me in the right direction.

I'd like to access an arduino from a webpage, like a normally hosted webpage not an arduino hosted page. Has anyone done this? My friend is helping me but hes not sure how to get the arduino to log in to a website and/or always keep the IP updated on a dynamic IP network.

pluggy

http://majestic81.plus.com/

Read up on port forwarding and Dynamic DNS, its quite complex and not much to do with the Arduino.

hondaguyjoe

#2
Jan 21, 2011, 06:04 am Last Edit: Jan 21, 2011, 06:06 am by hondaguyjoe Reason: 1
Yeah I know typically it is done at the router but is there a way to just have the arduino connect to any open network and look at a webpage for some value to change when the value you changes it blinks an led. Or something like that.

Does the link go to your arduino?

And thanks for the help folks I know its a very broad newbie question.

pluggy

http://pluggy.is-a-geek.com/

The heating controls link which you can't access does that.  In this case the Arduino is connected to the webserver by USB, the earlier link is a remote arduino with ethernet shield that provides the data for the Church graphs at the bottom of the above link.

It all kind of depends on how you want the webpage to interact with the arduino and its relationship with the server.

Code: [Select]

#include <WString.h>
#include <Ethernet.h>
/*
     Simple Ethernet Test

       Arduino server outputs simple text to browser

     The circuit:
     * Arduino Duemilanove
       * Arduino Ethernet shield
       * Basic FTDI breakout 5V
       *LED connected to GND and digital pin 4 via resistor
     
       By Minde
     http://www.sciencprog.com/
*/

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 0, 140 };                  // ip in lan
byte gateway[] = { 192, 168, 0, 254 };                  // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                   //subnet mask
Server server(80);                                      //server port
byte sampledata=50;            //some sample data - outputs 2 (ascii = 50 DEC)            
int ledPin = 4;  // LED pin
char link[]="http://www.scienceprog.com/"; //link data
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //LED status flag
void setup(){
//start Ethernet
 Ethernet.begin(mac, ip, gateway, subnet);
//Set pin 4 to output
 pinMode(ledPin, OUTPUT);  
//enable serial datada print  
 Serial.begin(9600);
}
void loop(){
// Create a client connection
Client client = server.available();
 if (client) {
   while (client.connected()) {
  if (client.available()) {
   char c = client.read();
   //read char by char HTTP request
   if (readString.length() < 30)
     {
       //store characters to string
       readString.append(c);
     }  
       //output chars to serial port
       Serial.print(c);
       //if HTTP request has ended
       if (c == '\n') {
         //lets check if LED should be lighted
        if(readString.contains("L=1"))
          {
            //led has to be turned ON
            digitalWrite(ledPin, HIGH);    // set the LED on
            LEDON = true;
          }else{
            //led has to be turned OFF
            digitalWrite(ledPin, LOW);    // set the LED OFF
            LEDON = false;            
          }
         // now output HTML data starting with standart header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         //set background to yellow
         client.print("<body style=background-color:yellow>");
         //send first heading
         client.println("<font color='red'><h1>HTTP test routines</font></h1>");
         client.println("<hr />");
         client.println("<hr />");
         //output some sample data to browser
         client.println("<font color='blue' size='5'>Sample data: ");
         client.print(sampledata);//lets output some data
         client.println("<br />");//some space between lines
         client.println("<hr />");
         //drawing simple table
         client.println("<font color='green'>Simple table: ");
         client.println("<br />");
         client.println("<table border=1><tr><td>row 1, cell 1</td><td>row 1, cell 2</td></tr>");
         client.println("<tr><td>row 2, cell 1</td><td>row 2, cell 2</td></tr></table>");          
         client.println("<br />");
         client.println("<hr />");
         //printing some link
         client.println("<font color='blue' size='5'>Link: ");
         client.print("<a href=");
         client.print(link);
         client.println(">Visit Scienceprog!</a>");
         client.println("<br />");
         client.println("<hr />");
         //controlling led via checkbox
         client.println("<h1>LED control</h1>");
         //address will look like http://192.168.1.110/?L=1 when submited
         client.println("<form method=get name=LED><input type=checkbox name=L value=1>LED<br><input type=submit value=submit></form>");      
         client.println("<br />");
         //printing LED status
         client.print("<font size='5'>LED status: ");
         if (LEDON)
             client.println("<font color='green' size='5'>ON");
         else
             client.println("<font color='grey' size='5'>OFF");    
         client.println("<hr />");
         client.println("<hr />");
         client.println("</body></html>");
         //clearing string for next read
         readString="";
         //stopping client
         client.stop();
           }
         }
       }
     }
}    



This is a sketch I come across that turns LEDs on and off under direct arduino web control, subject to port forwarding and dynamic DNS.

zoomkat

Quote
I'd like to access an arduino from a webpage, like a normally hosted webpage not an arduino hosted page. Has anyone done this?


Your arduino, is it going to have an ethernet shield for direct connection to a network, or do you want to have a pc act as a network interface and the pc communicate the web info to the arduino via the pc serial port?
Google forum search: Use Google Search box in upper right side of this page.
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

hondaguyjoe

I'd really like to get around the port forwarding if possible.

Zoom..

It would be connected via wifi through a router to the internet using the sparkfun wifly shield.

spark fun has a nice tutorial to get it to connect to the router automatically. http://www.sparkfun.com/tutorials/158

tkbyd

#6
Jan 21, 2011, 08:33 am Last Edit: Jan 21, 2011, 08:34 am by tkbyd Reason: 1
You say...

Quote
I'd really like to get around the port forwarding


... but, reading your posts, I don't think you're really talking about "port forwarding" (or not!)

I'm not trying to be pedantic... but your Google searching will be more productive.

So... Arduino to fetch a webpage (that's the hard part)
.... look at what's in it
.... do something, depending on what it finds

If the contents of the web page are predictably formatted, that should be fairly "so-able".

It isn't for the Arduino, per se, but a lot of the things you have to solve are incorporated in my FarWatchWatcher, which uses a PC at location "A" to look at a web page, and then put a message on its screen. Specifically, it looks at temperatures being posted on a web page generated by a FarWatch installation, which is on a differnt PC at location "B", and then FarWatchWatcher produces a big panel flashing red/yellow/red/yellow... if the temperature at the remotely monitored premises is nearing freezing.

The programming behind FarWatchWatcher is discussed at....

http://sheepdogguides.com/dt5j.htm

That is written in Delphi terms, but, as I said, the general principles behind what the program is doing get covered as well.

===
What you want to do is also being done by Pachube users. I find trees in the forest at the Pachube site... and the "solutions" there might vary somewhat from your EXACT proposed way of doing things, but I'm pretty sure the information is in there somewhere. There are certainly many Arduino people there, although there doesn't seem to be much overlap between those Arduinonauts and the good people here at the Arduino forum.

Much of the content at the following will seem irrelevant to your quest, but have a skim through it to orient yourself, and then have a look at the Pachube site.

Intro to Pachube:

http://sheepdogsoftware.co.uk/sc2wy.htm

===
Going back to...

"Arduino to fetch a webpage (that's the hard part)"

Especially if you control the page it is going to fetch, and can phrase the question as follows, it might pay you to launch a new, more focused thread, as follows. (Even if you can't control the page it fetches, getting the following sorted out will start you on your way to where you're going...)

"Arduino read webpage?

"I want an unattended Arduino to periodically fetch a page from a web-server out there on the net. There's some fixed-format text near the top of the page...


<html>
<head>
<title>
Temperatures from Timbucktoo
</title>
</head>
<body>
<!--FWDF:aa recreated 2009-08-->Hello Gentle Reader. File updated at....<br>
21-Jan-2011, 07:20
<br><br>
Recent temperatures... oldest reading first. And, for registered users, OnOff1
<br><pre>
 72.5 F    32.0 F  --at--  21-Jan-2011, 06:45:54   1568692
 73.4 F    32.0 F  --at--  21-Jan-2011, 06:50:56   1568725
 73.4 F    32.9 F  --at--  21-Jan-2011, 06:55:56   1568751


"I want to pick up the "72.5 F", and have it available in my Arduino in a string-type variable, from which I will do other tnings with it. The 72.5 will always be on the 13th line of the fetched web page.

"I want the Arduino to do this "all by itself"... I don't want to set up a PC near the Arduino to fetch the page, and then pass bits of it on to the Arduino.

"(If you need a page to check answers to this post, feel free to use either....

http://mon7nc.dyndns.org/

or

http://mon277rr.dyndns.org/

"(At least one of them is usually available.)"

-----
That question covers at least two things you need... how to ACCESS a page out there on the web, AND how to extract a small string from the fetched page.

I hope you WILL post that question, or a derivative... I wouldn't mind knowing the answers myself! (And concentrating on one part of a bigger project often gets you more useful responses here in the forum.)


OSGrill

#7
Jan 21, 2011, 08:44 am Last Edit: Jan 21, 2011, 08:47 am by OSGrill Reason: 1
http://code.google.com/p/arduino-json/

set up your router

add a DynDNS client on your LAN

Go Up