Go Down

Topic: (Port forwarding done) now ipcam and enc28j60 (Read 5 times) previous topic - next topic

Nick Gammon


with this change, i can control trough the lan, not over internet.   


OK, well through the internet, bring up the page in question in your web browser (the page that doesn't work). Now right-click and select "view page source" or whatever it is exactly. Copy that source and paste it here, inside code tags (select the text and hit the # button above the edit box in your browser).
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

Hanrun

Code: [Select]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

    <head>
        <link rel="stylesheet" type="text/css" href="ErrorPageTemplate.css" >

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Internet Explorer ne peut pas afficher cette page Web</title>

        <script src="errorPageStrings.js" language="javascript" type="text/javascript">
        </script>
        <script src="httpErrorPagesScripts.js" language="javascript" type="text/javascript">
        </script>
    </head>

    <body onLoad="javascript:initMoreInfo('infoBlockID');">

        <table width="730" cellpadding="0" cellspacing="0" border="0">

        <!-- Error title -->
            <tr>
                <td id="infoIconAlign" width="60" align="left" valign="top" rowspan="2">
                    <img src="noConnect.png" id="infoIcon" alt="Info icon" width="48" height="48">
                </td>
                <td id="mainTitleAlign" valign="middle" align="left" width="*">
                    <h1 id="mainTitle">Internet Explorer ne peut pas afficher cette page Web</h1>
                </td>
            </tr>

            <tr>
                <!-- This row is for HTTP status code, as well as the divider-->
                <td id="errorCodeAlign" class="errorCodeAndDivider" align="right">&nbsp;
                    <div class="divider"></div>
                </td>
            </tr>

        <!-- What you can do -->
            <tr>
                <td>
                    &nbsp;
                </td>
                <td id="whatToTryAlign" valign="top" align="left">
                    <h2 id="whatToTry">Essayez la chose suivante :</h2>
                </td>
            </tr>

        <!-- Check Connection -->
            <tr>
                <td >
                    &nbsp;
                </td>
                <td id="checkConnectionAlign" align="left" valign="middle">
                    <h4>
                        <table>
                            <tr>
                                <td valign="top">
                                </td>
                                <td valign="middle">
                                    <button onclick="javascript:diagnoseConnectionAndRefresh(); return false;" id="diagnose">Diagnostiquer les problèmes de connexion</button>
                                </td>
                            </tr>
                        </table>
                    </h4>
                </td>
            </tr>


        <!-- InfoBlock -->
            <tr>
                <td id="infoBlockAlign" align="right" valign="top">
                    &nbsp;
                </td>
                <td id="moreInformationAlign" align="left" valign="middle">
                    <h4>
                      <table>
                          <tr>
                              <td valign="top">
                                  <a href="#" onclick="javascript:expandCollapse('infoBlockID', true); return false;"><img src="down.png" id="infoBlockIDImage" border="0" class="actionIcon" alt="Informations"></a>
                              </td>
                              <td valign="top">
                                  <span id="moreInfoContainer"></span>
                                  <noscript><ID id="moreInformation">Informations</ID></noscript>
                              </td>
                          </tr>
                      </table>
                    </h4>
                    <div id="infoBlockID" class="infoBlock" style="display: none">
                        <p>
                            <ID id="errorExpl1">Ce problème peut avoir différentes causes, notamment :</ID>
                            <ul>
                                <li id="errorExpl2">La connexion Internet a été perdue.</li>
                                <li id="errorExpl3">Le site Web est temporairement indisponible.</li>
                                <li id="errorExpl4">Le serveur de noms de domaine (DNS) est inaccessible.</li>
                                <li id="errorExpl5">Le serveur de noms de domaine (DNS) ne contient pas d'entrée pour le domaine du site Web.</li>
                                <li id="errorExpl7">Il se peut que l'adresse contienne une erreur de frappe.</li>
                                <li id="errorExpl6">S'il s'agit d'une adresse HTTPS (sécurisée), cliquez sur Outils, sur Options Internet, puis sur Avancées et vérifiez que les protocoles SSL et TLS sont activés dans la section relative à la sécurité.</li>
                            </ul>
                        </p>
                        <p id="offlineUsers"><b>Pour les utilisateurs hors connexion</b></p>                                     
                        <p id="viewSubscribedFeeds1">
                           Vous pouvez encore afficher les flux auxquels vous êtes abonné et certaines pages Web visitées.<br/>
                           Pour afficher les flux auxquels vous êtes abonné
                           <ol>
                               <li id="viewSubscribedFeeds2">Cliquez sur le bouton Centre des favoris <img src="favcenter.png" border="0">, cliquez sur Flux, puis cliquez sur le flux que vous souhaitez afficher.</li>
                           </ol>
                        </p>
                        <p id="viewRecentWebpages1">Pour afficher les dernières pages Web visitées (peut ne pas fonctionner pour toutes les pages)
                           <ol>
                              <li id="viewRecentWebpages2">Cliquez sur Outils <img src="tools.png" border="0">, puis sur Travailler hors connexion.</li>
                              <li id="viewRecentWebpages3">Cliquez sur le bouton Centre des favoris <img src="favcenter.png" border="0">, cliquez sur Historique, puis cliquez sur la page que vous souhaitez afficher.</li>
                           </ol>
                        </p>
                    </div>
                </td>
            </tr>

        </table>

    </body>
</html>

Hanrun


In "code" tags, not "quote" tags thanks. It makes it (almost) impossible to read. Edit those posts and change [ quote ] to [ code ] (leaving out the spaces).



sry my bad

Nick Gammon

The HTML code you posted above doesn't look the slightest bit like what you are sending in the code:

Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<left>Arduino web server test</LEFT> "));
  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<body bgcolor=\"#000000\"> "));
  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<font color=\"#FFFFFF\"><FONT FACE=\"arial\"><RIGHT><I><FONT SIZE=1>BTCAD.<U> V1.0 beta</U></h1></FONT></FONT></I> </RIGHT> "));
  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<FONT SIZE=3> <font color=\"#00FF00\"></h1><a href=\"http://192.168.1.1\">192.168.1.1<a></FONT></FONT>"));


Where is "<left>Arduino web server test</LEFT>" for example?

I want you to post the HTML code (the page) that your sketch generates.

Anyway, these lines:

Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><form METHOD=get action=\""));
  plen=es.ES_fill_tcp_data(buf,plen,baseurl);
  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));


... are going to generate a "send" to the address in baseurl.

baseurl is:

Code: [Select]
static char baseurl[]="http://192.168.1.15/";

That address is a private address, not routable, and thus this will certainly fail.
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

Hanrun

Make a try



http://guillaume.redirectme.net:/         that it is my router 

http://guillaume.redirectme.net:85/      that it is suppose to be my Arduino web server


i will test sometthing

Nick Gammon

Er, right. Then isn't baseurl supposed to be "http://guillaume.redirectme.net:85/"?
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

zoomkat

Below is a test page I use with my dynamic ip service for outside connections.

Code: [Select]

//zoomkat 9-20-11
//form GET code
//for use with IDE 0021
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html
//address will look like http://zoomkat.no-ip.com:84/ when submited
//put http://zoomkat.no-ip.com:84 in your brouser
//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
Server server(84); //server port

String readString;

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

void setup(){

  pinMode(4, OUTPUT); //pin selected to control
  //start Ethernet
  Ethernet.begin(mac, ip, 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
  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() < 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=\"http://zoomkat.no-ip.com:84\" 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)

zoomkat

one more chunk of test cod. Note the use of http://zoomkat.no-ip.com:84/ as the internet URL to get the page, and the use of the shortened URL for the buttons (href=\"/?on\") as the button URL is the same server as the page server.

Code: [Select]

//zoomkat 11-25-11
//simple button GET with iframe code
//for use with IDE 0021
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html
//address will look like http://192.168.1.102:84/ when submited
//or http://zoomkat.no-ip.com:84/ from the internet
//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
byte myserver[] = { 208, 104, 2, 86 }; // zoomkat web page
Server server(84); //server port
Client client(myserver, 80);
String readString;

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

void setup(){

  pinMode(4, OUTPUT); //pin selected to control
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.begin(9600);
  Serial.println("server/client test 11/25/11"); // so I can keep track of what is loaded
}

void loop(){
  // check for serial input
  if (Serial.available() > 0)
  {
    byte inChar;
    inChar = Serial.read();
    if(inChar == 'e')
    {
      sendGET(); // call sendGET function
    }
  } 

  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() < 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 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(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="";

        }
      }
    }
  }
}

//////////////////////////
void sendGET() //client function to send/receie GET request data.
{
  if (client.connect()) {
    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();

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

jwatte

Did you try using simply "/" as baseurl? All references are relative, so it should "just work" at that point.

Nick Gammon


one more chunk of test cod.


I clicked the on/off buttons but nothing appeared to happen. Did the cat get fed or something?
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

zoomkat

Quote
I clicked the on/off buttons but nothing appeared to happen. Did the cat get fed or something?


The page doesn't update by design so I could possibly embed a video feed like the page below using a javascript frame refresh. If you actually accessed my arduino (laptop goes into sleep mode after 20 min, shutting off the USB power to the arduino), you made pin 4 go high/low.

http://web.comporium.net/~shb/wc2000-PT-script.htm
Consider the daffodil. And while you're doing that, I'll be over here, looking through your stuff.   8)

Hanrun

Hi guys, i'm about 40 km from my house and i just tried http://guillaume.redirectme.net:85/ and it's work perfectly, and my 3 push boutons works. I don't understand why it's do not work at home through the internet but the lan.

This afternoon i will test another things at home

BTW thanks all for your reply and helps. I'm canadian and i speak french, i'm not realy good in english and you still help me. I realy appreciate!   I try to explain my problems to the French forum but they don't give help. I don't know why. Btw thanks all , i realy appreciate.

Hanrun


Quote
I clicked the on/off buttons but nothing appeared to happen. Did the cat get fed or something?


The page doesn't update by design so I could possibly embed a video feed like the page below using a javascript frame refresh. If you actually accessed my arduino (laptop goes into sleep mode after 20 min, shutting off the USB power to the arduino), you made pin 4 go high/low.

http://web.comporium.net/~shb/wc2000-PT-script.htm




work perfectly. wow!


Is it possible to merge live video from ip camera to an arduino ''webserver'' I mean  put video of my ip camera to the webserver i creates ? Also, Is it possible control the camera with it own (pan/tilt) ?    Something like you do?


duemilanove + enc28j60 ( it's what i use)



thx

zoomkat

Quote
Is it possible to merge live video from ip camera to an arduino ''webserver'' I mean  put video of my ip camera to the webserver i creates ? Also, Is it possible control the camera with it own (pan/tilt) ?    Something like you do?


You probably could put the javascript code in a web page served by the arduino that would request the frames from the ip cam. The pan/tilt servo commands sould also put in the served page.
Consider the daffodil. And while you're doing that, I'll be over here, looking through your stuff.   8)

Hanrun

GREAT!

How should I proceed? I realy don't know how do javascrypt.

More questions:


-Is there a difference between duemilanove and uno board ?
-Wich board is better, enc28j60 or w5100 ?
-Is it possible to merge more that 1 ip camera with their pan/tilt?
-Is it possible to set timer for the 3 buttons I create? I mean #1 on/off with timer,  #2 on/off with timer #3   on/off with timer?   Timer should be time schedule


Thx !

Go Up