pilotage sortie via ethernetshield

Parlez nous de vos projets et de vos idées, imaginez des applications

pilotage sortie via ethernetshield

Message non lude yanick » Sam 28 Juil 2012 11:50

bonjour

je continu ma decouverte arduino avec l'ethernet shield que j'ai recut recement,j'aimerai piloter les sortie de mon arduino en le reliant a mon pc directement via le port ethernet e celui ci.

j'ai realise un cable ethernet croise.

voici le prg que j'ai trouve pour tester

Code: Tout sélectionner
/*
  Web Server Demo
  thrown together by Randy Sarafan
 
 Allows you to turn on and off an LED by entering different urls.
 
 To turn it on:
 http://your-IP-address/$1
 
 To turn it off:
 http://your-IP-address/$2
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Connect an LED to pin D9 and put it in series with a 220 ohm resistor to ground
 
 Based almost entirely upon Web Server by Tom Igoe and David Mellis
 
 Edit history:
 created 18 Dec 2009
 by David A. Mellis
 modified 4 Sep 2010
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>

boolean incoming = 0;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xC8, 0x60, 0x00, 0x1D, 0x1B, 0x74 };
IPAddress ip(169,254,88,108); //<<< ENTER YOUR IP ADDRESS HERE!!!

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup()
{
  pinMode(9, OUTPUT);

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
       
        //reads URL string from $ to first blank space
        if(incoming && c == ' '){
          incoming = 0;
        }
        if(c == '$'){
          incoming = 1;
        }
       
        //Checks for the URL string $1 or $2
        if(incoming == 1){
          Serial.println(c);
         
          if(c == '1'){
            Serial.println("ON");
            digitalWrite(9, HIGH);
          }
          if(c == '2'){
            Serial.println("OFF");
            digitalWrite(9, LOW);
          }
       
        }

        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
}


avec ce code je devrai allumer ma led en pin 9 en envoyant cet url : http://169.254.88.108/$1
test:
de mon pc sous internet explorer sa ne marche pas
j'ai donc fait l'essais en reliant ma carte a ma box (au lieu de connecter direct au pc )--->idem
impossible de le faire marcher en passant par explorer
j'ai fait le test en passant par mon iphone( safari ) en wifi et la surprise ca marche!!!
je refait le tes ave fire fox sur mon pc ca ne marche pas !! :cry: :cry:

avez vous une idee d'ou cela peu venir?

merci
yanick
 
Messages: 43
Inscription: Mer 30 Mai 2012 00:39

Re: pilotage sortie via ethernetshield

Message non lude Lionel » Lun 30 Juil 2012 13:51

Bonjour,

L'exemple que vous avez posté bloque l'arduino dans mon cas

pourriez vous essayer si votre système fonctionne avec le code suivant
pensez a remplacer votre adresse IP au début et milieu du sketch
cablez une led en pin 8
puis lancez juste l'adresse ip dans la barre d'adresse de votre navigateur

Code: Tout sélectionner
/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 4 Sep 2010
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,10, 109); // << votre adresse IP ici et plus bas

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup()
{
  Serial.begin(9600);    //  open up serial port connection to PC
  pinMode(8, OUTPUT);    //  Set digital pin 8 as output
 
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    String buffer = "";  //  Declare the buffer variable

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);  //  Send every character read to serial port
        buffer+=c;        //  Assign to the buffer

        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          if (digitalRead(8)){  //  1<-- Display LED status
            client.print(" LED is ON");
          }else{
            client.print(" LED is OFF");
          }
          client.println("<br />");
         
          // 2<-- Create a form
          client.print("<FORM action=\"http://192.168.10.109/\" >"); // adresse IP ici
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"1\">ON");
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"0\">OFF");
          client.print("<P> <INPUT type=\"submit\" value=\"Submit\"> </FORM>");
           
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
          buffer="";       //  Clear the buffer at end of line
        } else if (c == '\r') {           
          if(buffer.indexOf("GET /?status=1")>=0)
            digitalWrite(8,HIGH);  // Catch ON status and set LED
         
          if(buffer.indexOf("GET /?status=0")>=0)
            digitalWrite(8,LOW);  // Catch OFF status and set LED
        }
        else {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
}


je viens de le tester, il est fonctionnel, il est issu du site
http://www.homebrew-tech.com/arduino/br ... etshieldr3
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: pilotage sortie via ethernetshield

Message non lude SesechXP » Lun 30 Juil 2012 16:08

Salut,

Même chose que Lionel, ce sketch plante mon Arduino et/ou mon shield Ethernet...

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: pilotage sortie via ethernetshield

Message non lude yanick » Lun 30 Juil 2012 17:35

merci,
je viens de tester le code de lionel resultat:

arduino relie directement au pc via cable coise plantage explorerj'arrive bien sur la page avec les deux cases on ---off a cocher et magie sa marche!!!
arduino relie a la box idem :D :D

merci a tous

reste a lui envoyer une commande pour executer une partie de prg suivant l'url qu'on lui envoie? (j'aimerais qu'il realise seulement une impulsion sur la sortie que je lui demande)
yanick
 
Messages: 43
Inscription: Mer 30 Mai 2012 00:39

Re: pilotage sortie via ethernetshield

Message non lude phil » Lun 30 Juil 2012 21:37

Petit commentaire pour la forme
Code: Tout sélectionner
IPAddress ip(169,254,88,108); //<<< ENTER YOUR IP ADDRESS HERE!!!

Cette adresse IP est une adresse APIPA (en gros,c'est une adresse qui est donnée par l'OS quand il ne trouve pas de serveur DHCP)

Si tu connecte ton montage à ta box je te conseille de mettre une adresse IP fixe sur ton Arduino dans le sous réseau de ta box

Essaye aussi de faire un Ping de l'adresse IP de ton adruino depuis ton PC, si ça réponds pas, il y a un problème....
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: pilotage sortie via ethernetshield

Message non lude yanick » Mar 31 Juil 2012 14:30

bonjour

oui en effet au depart de mes essais l'arduino prenait une adresse qui n'avait rien a voir avec celle que je lui notait dans son programme j'ai donc modifier l'adresse dans le prg pour quelle corresponde a celle donnee a l'arduino par le pc (j'ai fait les choses a l'envers).

de meme l'adresse mac ne correspondait pas non plus.
yanick
 
Messages: 43
Inscription: Mer 30 Mai 2012 00:39

Re: pilotage sortie via ethernetshield

Message non lude yanick » Lun 6 Aoû 2012 18:04

le code envoye marche tres bien mais j'aimerais ne pas ouvrir la page cree dans l'arduino :

je m'explique sous visual j'ai realise mes boutons qui serve a envoyer l'url de commande mais a chaque commande ceci m'ouvre internet explorer avec l'interface cree dans l'arduino.

j'utilise la commande suivante pour mon bouton sous visual studio

Code: Tout sélectionner
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        System.Diagnostics.Process.Start("http://169.254.88.108/?status=91")


    End Sub
yanick
 
Messages: 43
Inscription: Mer 30 Mai 2012 00:39

Re: pilotage sortie via ethernetshield

Message non lude phil » Lun 6 Aoû 2012 19:47

Est ce que tu peux poster intégralité du code que tu utilises dans ton arduino ?

Je comprends pas trop ce que tu veux faire avec visual studio... Dans ton cas, ton arduino se comporte en tant que serveur Web et donc utilise (entre autre) du code html, java, php... Le code que tu veux utiliser c'est du VB script non ? A mon avis tu n'attrapes pas le problème par le bon bout... ;)
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: pilotage sortie via ethernetshield

Message non lude yanick » Mar 7 Aoû 2012 20:15

voici le code que j'utilise dans mon arduino

Code: Tout sélectionner
/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 4 Sep 2010
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(169,254,88, 108); // << votre adresse IP ici et plus bas

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup()
{
  Serial.begin(9600);    //  open up serial port connection to PC
  pinMode(8, OUTPUT);    //  Set digital pin 8 as output
  pinMode(9, OUTPUT);
 
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    String buffer = "";  //  Declare the buffer variable

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);  //  Send every character read to serial port
        buffer+=c;        //  Assign to the buffer

        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          if (digitalRead(8)){  //  1<-- Display LED status
            client.print(" LED 8 is ON");
          }else{
            client.print(" LED 8 is OFF");
          }
          client.println("<br />");
         
          // led 9
         
          if (digitalRead(9)){  //  1<-- Display LED status
            client.print(" LED 9 is ON");
          }else{
            client.print(" LED 9 is OFF");
          }
          client.println("<br />");
         
         
         
          // 2<-- Create a form
          client.print("<FORM action=\"http://169.254.88.108/\" >"); // adresse IP ici
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"81\">ON");
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"80\">OFF");
          client.print("<P> <INPUT type=\"submit\" value=\"Submit\"> </FORM>");
          //9
          client.print("<FORM action=\"http://169.254.88.108/\" >"); // adresse IP ici
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"91\">ON");
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"90\">OFF");
          client.print("<P> <INPUT type=\"submit\" value=\"Submit\"> </FORM>");
           
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
          buffer="";       //  Clear the buffer at end of line
        } else if (c == '\r') {           
          if(buffer.indexOf("GET /?status=81")>=0)
            digitalWrite(8,HIGH); // Catch ON status and set LED
            //delay (500);
            //digitalWrite(8,LOW);
            //delay (500);
            //digitalWrite(9,HIGH);
            //delay (500);
            //digitalWrite(9,LOW);
            //delay (500);
         
          if(buffer.indexOf("GET /?status=80")>=0)
            digitalWrite(8,LOW);  // Catch OFF status and set LED
           
          if(buffer.indexOf("GET /?status=91")>=0)
            digitalWrite(9,HIGH);  // Catch ON status and set LED
           
          if(buffer.indexOf("GET /?status=90")>=0)
            digitalWrite(9,LOW);  // Catch OFF status and set LED
        }
       
        //sortie 9
       
     
        else {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
}



si j'accede via mon navigateur a l'adresse ip de l'arduino j'arrive sur une page ou je coisi les sorti a passer a 1.
mais se que j'essais de faire c'est une interface sur visual sudion pour passer a 1 ou a 0 mes sorti via un bouton, mon interface marche ,sauf quel m'ouvre une page explorer a chaque commande.

merci
yanick
 
Messages: 43
Inscription: Mer 30 Mai 2012 00:39

Re: pilotage sortie via ethernetshield

Message non lude SesechXP » Mer 8 Aoû 2012 07:26

Salut,

Si ton navigateur s'ouvre, je pense que c'est normal parce que c'est le comportement par défaut de la méthode Start. Quand elle est appelée, le système ouvre l'application qui lui semble la plus appropriée.

Je t'invite à regarder la propriété StartInfo qui permet notamment de ne pas créer de fenêtre lors de l'exécution du processus.

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: pilotage sortie via ethernetshield

Message non lude yanick » Jeu 9 Aoû 2012 10:09

bonjour

pour se qui est de l'affichage j'ai essaye StartInfo de la facon suivante

Code: Tout sélectionner
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim monstartInfo As New ProcessStartInfo("IExplore.exe")
        monstartInfo.WindowStyle = ProcessWindowStyle.Hidden

        monstartInfo.Arguments = "http://169.254.88.108/?status=81"
        Process.Start(monstartInfo)


ce qui en effet n'ouvre plus la fenetre explorer mais les processus s'ouvrent (ils sont visible dans le gestionnaire de tache) mais le probleme c'est que je n'arrive pas a les faire refermerapres leur utilisation.

j'ai essaye l'instruction close et kill mais je bloc.
yanick
 
Messages: 43
Inscription: Mer 30 Mai 2012 00:39


Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

cron