Loading...
  Show Posts
Pages: 1 ... 151 152 [153] 154 155 ... 193
2281  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 27, 2010, 07:37:41 am
Donc pour envoyer une variable à mon fichier test.php, on va utiliser l'url...

donc coté Arduino :
Quote

    // Make a HTTP request:
    client.print("GET http://www.mon-site.com/test/test.php?echec=");
    client.print(echec);
    client.println(" HTTP/1.0");
    client.println();
 

la variable echec est envoyée dans l'url avec sa valeur :

Code:
...?echec=echec...

Coté "test.php", c'est $_GET qui récupère la valeur de la variable :
Code:
fputs($fichier_echec, $_GET[echec]); // On écrit le nouveau nombre d'échec
Avec quelques ligne autour pour ouvrir et fermer le fichier "echec.txt"

A noter qu'en faisant comme cela, la variable "echec" est envoyée à la connection établie suivante et qu'a chaque réinitialisation de l'Arduino, elle est remise à 0.

Toujours dans "test.php" :
Code:
// on écrit "coucou...nombre de lecture du fichier"
echo 'coucou
';
echo 'visite '.$ligne.'
';
echo 'echec '.$ligne_echec;
 
(le saut de ligne edst indispensable sinon le moniteur Arduino affichera tout sur une ligne)

Ce qui nous donne :
Quote
connecting...
connected
HTTP/1.1 200 OK
Date: Fri, 27 Aug 2010 12:37:23 GMT
Server: Apache
Content-Length: 24
Connection: close
Content-Type: text/html

coucou
visite 31
echec 4

disconnecting.
2282  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 27, 2010, 06:11:42 am
Oui, les bases de données ce sera pour la suite... d'abord les trucs un peu plus "simple"  ;D
2283  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 27, 2010, 05:42:12 am
Cette solution avec le while me plait bien.... smiley


Quote
Bon maintenant exercice suivant:

chaque lecture est répertoriée sur le fichier test.php, ce dernier devra renvoyer :

En fait ce n'est pas sur le fichier test.php que cela est écrit mais dans un fichier "compteur.txt" qui est dans le même répertoire, tout ça sur le serveur distant bien sur  :smiley, mais c'est bien test qui écrit dans compteur...

le fichier test.php :
Code:
<?php
// on ouvre le fichier
$fichier_compteur fopen('compteur.txt''r+');
 
// on lit la première ligne du fichier
$ligne fgets($fichier_compteur);

// on écrit "coucou...nombre de lecture du fichier"
echo 'coucou visite '.$ligne

//on incrémente le nombre de lecture
$ligne++;

// on remet le curseur au début du fichier
fseek($fichier_compteur0); // On remet le curseur au début du fichier
fputs($fichier_compteur$ligne); // On écrit le nouveau nombre de pages vues

// on ferme le fichier
fclose($fichier_compteur);

?>

exercice suivant :

L'Arduino compte le nombre de fois ou la connection échoue, envoie ce nombre à test.php qui l'inscrit dans echec.txt  pour avoir ça qui s'écrit :
Quote
coucou
visite X
échec X
2284  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 27, 2010, 03:03:35 am
L'officiel.
2285  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 27, 2010, 02:31:24 am
Ok, donc une piste à développer et à garder sous le coude  smiley-wink.

Pour l'instant j'ai encore à faire pour comprendre (à peu près) comment tout ça fonctionne, après si jamais je m'attaquerais à ce genre de chose.

Edit:

Dans la datasheet w5100:
Quote
/INT
INTERRUPT
This pin Indicates that W5100 requires MCU attention
after socket connecting, disconnecting, data receiving or
timeout. The interrupt is cleared by writing IR(Interrupt
Register) or Sn_IR (Socket nth Interrupt Register). All
interrupts are maskable. This pin is active low.
2286  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 27, 2010, 12:33:18 am
Merci pour vos réponses.

neoirto
Quote
Ensuite si tu essaies des serveurs distants differents, tu verras que sur certains tu vois passer le header http 200..., et sur d'autres non : ca se traite, mais c'est un autre probleme.
Coté serveur distant ?

neoirto
Quote
Mais il y a encore une source d'erreur : lorsque tu fais ta requete, la reponse arrive quasi immediatement (et oui fini les modems des annees 90), mais il ne faut pas pousser :

Ton arduino aura le temps de faire une boucle et donc de louper la communication au passage etc... Et rebelotte dans la suivante...
Pour ça j'ai rajouté un delay(500) ici :

Quote

    client.println("GET http://www.mon-site.com/test/test.php HTTP/1.0");
    client.println();
    delay(500);
 
Et effectivement maintenant à chaque boucle ça marche  smiley

Par contre utiliser un while me dérange un peu, n'y at-il pas une autre solution ?

Gromain
Quote
Note que si tu ne veux/peux pas bloquer le travail de l'arduino en attendant les données, tu peux activer l'interruption matériel du shield ethernet (Int0, pin2)

Est ce que tu pourrais développer ?
2287  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 26, 2010, 03:43:31 pm
Tu penses que je n'ai pas besoin de fermer la connection depuis l'Arduino, le serveur s'en occupant ?

Edit :

Si j'enlève les client.stop(), ça ne marche qu'une fois et après je n'arrive plus à me connecter
2288  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 26, 2010, 02:44:15 pm
En fait je viens de m'apercevoir que le cycle ouverture-lecture-fermeture se fait sur deux loop(), le premier passage ouvre la connection et le deuxième passage lit et ferme...  :-?

Bon maintenant exercice suivant:

chaque lecture est répertoriée sur le fichier test.php, ce dernier devra renvoyer :

Quote
coucou >nombre de lecture<

Faut que je me remette à PHP moi  ;D
2289  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 26, 2010, 02:15:26 pm
Salut Gromain,
j'ai justement changé mon code dans ce sens :

Quote
/*
  Web client
 
 This sketch connects to a website (http://www.mon-site.com)
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 18 Dec 2009
 by David A. Mellis
 
 */


#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 };
byte ip[] = {
  192,168,1,177 };
byte server[] = {
  xx;
  xx;
  xx }; // mon-site.com

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
Client client(server, 80);

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  // Serial.println("connecting...");

  // if you get a connection, report back via serial:

}

void loop()
{
  Serial.println("connecting...");
  if (client.connect()) {
    client.flush();
    Serial.flush();
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET http://www.mon-site/test/test.php HTTP/1.0");
    client.println();

  } 
  else if (!client.connect()){
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }


  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()!=0) {
    int b=client.available();
    for (int a=0; a < b;a++){
      char c = client.read();
      Serial.print(c);
      Serial.flush();

    }
    client.flush();
    Serial.flush();
    client.stop();
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.flush();
    Serial.flush();
    client.stop();

    // do nothing forevermore:
    // for(;; )
    //   ;
  }
  delay(1000);
}




J'ai changé ça :

Quote
if (!client.connected())
Du coup ça ne m'écrit pas "disconnecting" au début et à la fin de chaque boucle.

Et un pt'it delay (1000) pour ne pas faire plus d'un requête à la seconde...



Quote
connecting...
connected
connecting...
connection failed
HTTP/1.1 200 OK
Date: Thu, 26 Aug 2010 19:06:36 GMT
Server: Apache
Content-Length: 6
Connection: close
Content-Type: text/html

coucou
disconnecting.
connecting...
connected
connecting...
connection failed
HTTP/1.1 200 OK
Date: Thu, 26 Aug 2010 19:06:39 GMT
Server: Apache
Content-Length: 6
Connection: close
Content-Type: text/html

coucou
disconnecting.
connecting...
connected
connecting...
connection failed
HTTP/1.1 200 OK
Date: Thu, 26 Aug 2010 19:06:41 GMT
Server: Apache
Content-Length: 6
Connection: close
Content-Type: text/html

coucou
disconnecting.
2290  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 26, 2010, 02:01:42 pm
Ma boucle for sert bien à quelque chose :

Quote
Ethernet : Client class

available()


Description

Returns the number of bytes available for reading (that is, the amount of data that has been written to the client by the server it is connected to).


Syntax

client.available()

Parameters

none

Returns

The number of bytes available.

Par contre j'ai supprimé celle ci (tout à la fin):

Code:
for(;; );

J'ai fait des modifs et il me semble que ça marche à chaque coup, mais je dois faire encore quelques essais.
2291  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 26, 2010, 12:19:15 pm
En gros quand ça fonctionne j'ai ça :

Code:
connecting...
connected
HTTP/1.1 200 OK
Date: Thu, 26 Aug 2010 17:15:36 GMT
Server: Apache
Content-Length: 6
Connection: close
Content-Type: text/html

coucou
disconnecting.


Et après :

Code:
connecting...
connection failed
disconnecting.
pareille quand ça ne fonctionne pas depuis le début...
2292  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 26, 2010, 10:55:59 am
Et hop....

Quote
/*
  Web client
 
 This sketch connects to a website (http://www.mon-site.com)
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 18 Dec 2009
 by David A. Mellis
 
 */


#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 };
byte ip[] = {
  192,168,1,177 };
byte server[] = {
  XX,XX,XX,XX }; // mon-site.com

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
Client client(server, 80);

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect()) {
    client.flush();
    Serial.flush();
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET http://www.mon-site.com/test/test.php HTTP/1.0");
    client.println();

  } 
  else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{

  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()!=0) {
    int b=client.available();
    for (int a=0; a < b;a++){
      char c = client.read();
      Serial.print(c);
      Serial.flush();

    }
    client.flush();
    Serial.flush();
    client.stop();
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.flush();
    Serial.flush();
    client.stop();

    // do nothing forevermore:
    for(;; )
      ;
  }

}




Pas trop différent de celui de la page que j'ai mis en lien dans mon premier post.
j'ai rajouté une boucle for pour la lecture de la chaine entrante (qui fait environ 140 caractères)

En fait ce serait pas mal de segmenter cette chaine si j'ai bien compris ?
2293  Forum 2005-2010 (read only) / Français / Re: Ethernet et PHP on: August 26, 2010, 06:57:41 am
J'ai rajouté un client.flush et un serial.flush, mais c'est toujours pareil, la connection s'établit de façon aléatoire.
2294  Forum 2005-2010 (read only) / Français / Ethernet et PHP on: August 25, 2010, 02:15:01 pm
Bon finalement je m'y mets aussi....

J'ai reçu mon Ethernet shield et j'ai fais mes premiers essai.

Pour afficher une page html en local pas de soucis particulier, mais ensuite....
J'ai mis un fichier test.text dans un répertoire "test" à la racine de mon site et là ça a pas été du gâteau.

J'ai utilisé ce code :

http://arduino.cc/en/Tutorial/WebClient

J'ai remplacé l'IP de Gougle par celle de mon site.
Je pensais qu'en faisant simplement "GET /test/test.txt HTTP/1.0"

Je pourrais afficher le contenu de mon fichier.txt.... et bien non.
Donc j'ai changer cette URL dans tout les sens et rien à faire...
Ensuite j'ai été jeter un coup d'oeil sur les commandes de protocole HTTP et j'ai trouvé qu'il fallait écrire ça de cette façon "GET http://www.mon-site.com/test/test.txt HTTP/1.0"
Et là Bingo  smiley-grin le contenu s'affiche, mais précédé de touttes les informations concernant cette requête.

J'ai ensuite mis ça dans mon fichier test dont j' changé lextension en .php :

Code:
<?php echo "coucou"?>


Je change mon URL comme ceci "GET http://www.mon-site.com/test/test.php HTTP/1.0"

Et "coucou" s'affiche avec un peu moins d'info qu'avec le fichier .txt

Donc ça marche, mais pas à tout les coups, je lance le serial monitor, ça m'affiche "coucou", j'appuie sur le bouton reset du shield et la ça ne marche plus qu'une fois sur... 5ou 7 fois.

Quelqu'un aurait-il une solutions pour que cela fonctionne à chaque requête ou pression sur reset ?
2295  Forum 2005-2010 (read only) / Français / Re: Arduino Mega et Afficheur LCD 4x16 - Cablage ? on: August 30, 2010, 09:37:14 am
De rien....  smiley
Pages: 1 ... 151 152 [153] 154 155 ... 193