envoyer très simplement une url par arduino

Le problème exposé dans ce sujet a été résolu.

Bonsoir,

J'utilise un arduino avec son module ethernet.

J'aimerais envoyer l'url suivante "monserv.org/mapage?var1=bonjour&var2=mavar2" depuis mon arduino pour que mon site interprète l'url et récupère les résultat des variables dans une bdd.

Bien qu'il existe d’excellents tuto comme celui d'eskimon, je n'arrive pas a trouver un bout de code simple et efficace.

Ma question; est-il possible de trouver un bout de code extrêmement simple ressemblent à ça :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
on inclue les bibliothèques
on config le module : mac, ip, client.
delay(1000);
void setup() {
}

void loop() {

on envoie l'url "monserv.org/mapage?var1=bonjour&var2=mavar2"
delay(10000);

}

?

PS: Le code que j'avais repris ( du tuto d'Eskimon ) et modifié na rien donné de concluant, je me suis retrouvé vite noyé :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Ces deux bibliothèques sont indispensables pour le shield
#include <SPI.h>
#include <Ethernet.h>

// L'adresse MAC du shield
byte mac[] = { 0x90, 0x42, ~~0xGA, 0x2T~~, ****, **** };
IPAddress ip(192,168,*,***);
EthernetClient client;
char serveur[] = "*****.hopto.org";

void setup() {
  // On démarre la voie série pour déboguer
  Serial.begin(9600);

  char erreur = 0;
  // On démarre le shield Ethernet SANS adresse ip (donc donnée via DHCP)
  erreur = Ethernet.begin(mac);

  if (erreur == 0) {
    Serial.println("Parametrage avec ip fixe...");
    // si une erreur a eu lieu cela signifie que l'attribution DHCP
    // ne fonctionne pas. On initialise donc en forçant une IP
    Ethernet.begin(mac, ip);
  }
  Serial.println("Init...");
  // Donne une seconde au shield pour s'initialiser
  delay(1000);
  Serial.println("Pret !");

  // On connecte notre Arduino sur le site et le port 80 (defaut pour l'http)
  erreur = client.connect(serveur, 80);

  if(erreur == 1) {
      // Pas d'erreur ? on continu !
      Serial.println("Connexion OK, envoi en cours...");

      // On construit l'en-tete de la requete
      client.println("GET / HTTP/1.1");
      client.println("Host: *****.hopto.org/pageweb.php?var1=hi&var2=im&var3=arduino");
      Serial.println("requete envoyé, fermeture de la connection ...");
      client.println("Connection: close");
      client.println();
  } else {
    // La connexion a échoué :(
    Serial.println("Echec de la connexion");
    switch(erreur) {
      case(-1):
        Serial.println("Time out");
        break;
      case(-2):
        Serial.println("Serveur invalide");
        break;
      case(-3):
        Serial.println("Tronque");
        break;
      case(-4):
        Serial.println("Reponse invalide");
        break;
    }
    while(1); // On bloque la suite
  }
}

void loop()
{

}
+0 -0

La honte, j'ai carrément zapper que c'était de l'hexa … (pourtant j'ai pas comme habitude de faire des changements de dernière minute sans réfléchir :/ )

Bon, bref, ayant testé mon code, il à l'air de fonctionner correctement :

1
2
3
4
Init...
Pret !
Connexion OK, envoi en cours...
requete envoyé, fermeture de la connextion ...

Hors je n'ai aucune trace du passage de l'arduino sur mon site (pourtant, en tapant l'url dans le navigateur, la j'ai une trace ).

Le code php peut être utile :

version toute ma page :

(Ah oui, bien que certains systèmes pourraient être plus simples, je n'ai pas la contrainte de la place ou le nombre de ligne, et j'aime bien voir mon code comme ça, faudra m'en excuser )

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="fr"> <![endif]-->
<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="fr"> <![endif]-->
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="fr"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="fr"> <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>mapageweb</title>
<style>

a { color: white; }
a:hover { color: yellow;}
a{ text-decoration:none; }

body{
    font:16px/26px Helvetica, Helvetica Neue, Arial; 
}
div {
    text-align: center;
  border-top:    1px solid black; 
  border-bottom: 1px solid black;
  border-left:   1px solid black;
    border-right:  1px solid black;
  margin-left:   5%;
  margin-right:  5%;
  margin-top:    2%;
  margin-bottom: 0%;
  background-color: rgb(39,40,34); /* Pour les navigateurs anciens */
    background-color: rgba(82,83,78,1); /* Pour les navigateurs plus récents */
  color: rgb(0,0,0);
  color: rgba(255,255,255,1);
}
section
 {
  border-top:    0px solid black;
  border-bottom: 0px solid black;
  border-left:   1px solid black;
    border-right:  1px solid black;
  margin-left:   5%;
  margin-right:  5%;
  margin-top:    2%;
  margin-bottom: 2%;
  background-color: rgb(255,255,255);
    background-color: rgba(255,255,255,0.9);
  color: rgb(39,40,34);
  color: rgba(39,40,34,1);
}

h3{
    text-align: center;
}

</style>
  <?php

  //fonction permetant de lire certaines lignes d'un fichier txt :
  function AfficherLigne($Ligne)
      {
          // Fichier souhaité
          $Cible = "log.txt";
          // Ouverture du fichier en lecture avec r)
          $Fichier = @fopen($Cible, "r");
          // Si le fichier existe et a pu être ouvert
          if ($Fichier)
              {
                  // Tant que $Actuelle n'équivaut pas à $Ligne,
                  // on boucle en incrémentant $Actuelle de 1
                  for ($Actuelle=1; $Actuelle <= $Ligne; $Actuelle++)
                      {
                          // Attribution de la ligne en cours à $Temporaire
                          // Tant que la limite définie ou la fin du fichier n'a pas été
                          // atteinte, la boucle est relancée et $Contenu mis à jour
                          $Temporaire = fgets($Fichier);
                              if (empty($Temporaire)) { break; }
                              else { $Contenu = $Temporaire; }
                      }
              }
          // Sinon si le fichier n'existe pas ou n'a pas pu être ouvert
          else
              {
                  // Attribution d'un message d'erreur à $Contenu
                  $Contenu = "Erreur d'ouverture de <em>$Cible</em>";
              }
          // Fermeture du fichier
          @fclose($Fichier);
          // Affichage de $Contenu
          print $Contenu;
      }
  ?>



</head>
<body>    

  <?php 
  if (isset($_GET['var1']) && isset($_GET['var2']) && isset($_GET['var3']))
      {
          $var1 = $_GET['var1'];
          $var2 = $_GET['var2']; 
          $var3 = $_GET['var3']; 

          echo '->'.$key.' '.$action.' '.$id.' ' ;
      
          $txt = "La clef de sécurité est :".$var1.", son action est: ".$var2.",et enfin, sont id : ".$var3."";   
          
          file_put_contents("log.txt",date("[j/m/y H:i:s]")." - $txt \r\n".file_get_contents("log.txt"));


      }
  else
      {
          
      }
  ?>


<div>
  <h1><i>Dispositif de sécurité </i></h1>
</div>    
<section>
  <h3>Le contenu n'est pas disponible actuellement</h3>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l'activitée en live :
  <br>
  <br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Les dernier evenements :
  <br>
  
  <?php
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(1);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(2);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(3);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(4);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(5);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(6);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(7);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(8);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(9);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(10);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(11);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(12);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(13);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(14);
  echo "<br>";
  echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; AfficherLigne(15);
  ?>
  
</section>

<div>
  <h6> &nbsp;<a href="javascript:history.go(-1)">Retour sur la page précedente</a> | <a href="index.php">Direction l'index</a> | <a href="oups.html">Recharger la page</a> | <a href="#">Basculer vers le mode complet</a> | <a href="#">contacter l'administrateur</a> | <a href="#">Demander de l'aide</a> | <a href="http://www.google.fr">Retour sur les recherches</a></h6>
</div>
</body>
</html>

version partie utile :

1
2
3
4
5
6
7
8
9
if (isset($_GET['var1']) && isset($_GET['var2']) && isset($_GET['var3']))
      {
          $var1 = $_GET['var1'];
          $var2 = $_GET['var2']; 
          $var3 = $_GET['var3']; 
 
          echo '->'.$key.' '.$action.' '.$id.' ' ;
      
          $txt = "La clef de sécurité est :".$var1.", son action est: ".$var2.",et enfin, sont id : ".$var3."";

Yoch, Tu voudrais dire que ça donnerait ça :

1
2
3
(EDIT : effectivement y une petite erreur de "?" ->) client.println("GET /pageweb.phpvar1=hi&var2=im&var3=arTTP/1.1")duino;
(EDIT : la c'est mieu :) ->) client.println("GET /pageweb.php?var1=hi&var2=im&var3=arTTP/1.1")duino;
client.println("Host:*****.hopto.org");

Eskimon, Manuellement je la voie bien. Pour l'ip, la passerelle ou est mon serveur na pas d'ip fix (j'utilise les services de no-ip ), c'est pas problématique ?

+0 -0

Oui (il te manque juste le ? sur la 1ere ligne).

Je ne connais pas no-ip, mais plus le mécanisme sera compliqué (redirection HTTP par exemple), moins tu auras de chance que ça fonctionne out-of-the-box. Bref, je crois que tu gagnerais à afficher la réponse du serveur pour debuguer ce qui se passe. (un vrai test manuel se fait avec curl, pas avec un navigateur qui cache beaucoup de complexité)

+0 -0

Yes yoch, c'était ça le problème :)

Et comment je pourrais afficher les réponses serveur ? En tout cas merci à tous d'avoir pris le temps de m'aider.

(PS: Eskimon, au passage, si tu à le temps et l'envie, tu ne voudrais pas faire un petit tuto sur le module GSM ? après celui sur Arduino et Ethernet, je trouve que ça serait une bonne idée :) )

+0 -0

(PS: Eskimon, au passage, si tu à le temps et l'envie, tu ne voudrais pas faire un petit tuto sur le module GSM ? après celui sur Arduino et Ethernet, je trouve que ça serait une bonne idée :) )

Pas forcément le temps (ni l'argent) à dépenser pour ca… Mais c'est pas très compliqué non ? C'est des trucs qui marche sur des commandes AT (pour les SMS en tout cas…)

+0 -0

Okey :)

Après niveau commandes AT c'est effectivement pas compliqué, niveau achat et mise en route un peut plus. J'ai passer plusieurs jours avant de faire fonctionner mon clone, sur tel type d'arduino et sur des prises usb 3 (et non usb 2, alors que le câble et un câble usb 2 , m'enfin, faut pas me demander pourquoi ça marche sur l'un et pas l'autre … ) bref, je pensais qu'un sim900 fonctionnait sur tout et simple avec les AT, ba finalement pas vraiment. au moins j'en aurais tiré une bonne leçon

(Ou plutôt 2 bonnes leçons, Bien relire les CGV / MENTIONS LÉGALES / PDC de sites de vente en évitant DHL * happy * )

après,le mot compliqué deviens relatifs après ça X)

Bon aller, j'ai fini de me plaindre, encore merci pour l'aide et bonne fin de journée/soirée :)

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte