Go Down

Topic: (Port forwarding done) now ipcam and enc28j60 (Read 5538 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="";

        }
      }
    }
  }
}

Google forum search: Use Google Advanced Search and use Http://forum.arduino.cc/index in the "site or domain:" box.

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

}
Google forum search: Use Google Advanced Search and use Http://forum.arduino.cc/index in the "site or domain:" box.

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
Google forum search: Use Google Advanced Search and use Http://forum.arduino.cc/index in the "site or domain:" box.

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.
Google forum search: Use Google Advanced Search and use Http://forum.arduino.cc/index in the "site or domain:" box.

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