Go Down

Topic: VB Expresse comunique via Arduino Ethernet shield (Read 739 times) previous topic - next topic

Jan 19, 2013, 01:26 pm Last Edit: Jan 19, 2013, 01:35 pm by matesson44 Reason: 1

Bonjour

Dans mon projet, la carte arduino monté avec le shield Ethernet communique avec un programme en VB.net et un site web en php4.
Des ordres sont envoyé via le site web ou bien via le programme en Vb sous forme de requete http
J'utilise vb expresse 2010

Le tout fonctionne.  :)

Mais le code n'est pas bien. je suis novice!

-pour vb.net
j' utlise l'objet Vb : System.Net.Sockets.TcpClient()
via un stream j'envoie la requete
voici le code VB qui fonctionne:

Code: [Select]

Private Sub liaisonEthernetArduino(ByVal commande As String)

       Dim ClientSocket As TcpClient
     
       ClientSocket = New System.Net.Sockets.TcpClient()
       Try
           ClientSocket.Connect("AdresseArduino", port)
         
           ' MessageBox.Show("<système> : connexion établie.", "My Application",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)

       Catch ex As Exception          
           MessageBox.Show("<système> : serveur introuvable.", "My Application", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)
       End Try


       'Emmission de données vers le "serveur"
       Dim Stream As NetworkStream = ClientSocket.GetStream()
       Dim DataOut As Byte() = System.Text.Encoding.Unicode.GetBytes(commande)
       Stream.Write(DataOut, 0, DataOut.Length) 'envoi des données
       Stream.Flush()
 
       'Fermeture de connexion
       ClientSocket.Close()

   End Sub


-pour le site web : un simple get de l'adresse de la box/du port utilisé/ puis l'ordre
Code: [Select]

<a href= "http://<?php echo $IpAdresse ?>/?sms=ma1"><IMG SRC="images/on.jpg"  TITLE="ON" align="left"></a>


enfin le code Arduino qui récupère les infos:  (c'est la qu'il faut que j'améliore le code)
Code: [Select]

void ethernet()
 {
     // Attente de la connexion d'un client
   EthernetClient client = server.available();    
   if (client && client.connected())
   {
 
     // si le client nous envoi quelque chose
     if (client.available() > 0)
     {
      // Serial.print(client.available());
       carnum = client.available();
       carlu = client.read();
       Serial.println(carnum);
       Serial.print("carlu :");
       Serial.println(carlu);
       if (readString.length() < 500) {
           //store characters to string
           readString+=carlu;
         }
         //Si la requete HTTP est terminée
         if (carlu == '\n') {
           //S'il s'agit d'une demande de SMS
           if(readString.indexOf("sms") >=0) {
               Serial.println("");
               Serial.println("Envoi d un Message SMS :");
               // On récupère le message SMS à envoyer
               messageString = "";
               int debutRequete = readString.indexOf('sms=');
               int finRequete = readString.indexOf('HTTP');
               messageString = readString.substring(debutRequete+1,finRequete-4);
               //on l'affiche sur la console
               Serial.println(messageString);
               
               //on renvoi une réponse web sur le navigateur
               client.println("HTTP/1.1 200 OK");
               client.println("Content-Type: text/html");
               client.println();
               client.println("<h1> <font color='blue'>test</font> </h1>");                              
               client.println("<br>");
               client.println("<font color='red'><h2>ordre recu !</font></h2>");
               client.println("<br><br>");
               client.println("<a href=\"http://siteweb\"><font color='green'>RETOUR</font></a>");
               readString="";
               //on arrete le client
               client.stop();
             }
// essaie pour gerer la requete vb.net comme Html
             /*else if(readString.indexOf("s m s") >=0) {
               Serial.println("");
               Serial.println("Envoi d un Message:");
               // On récupère le message  à envoyer
               messageString = "";
               int debutRequete = readString.indexOf('s m s =');
               int finRequete = readString.indexOf('H T T P');
               messageString = readString.substring(debutRequete+1,finRequete-7);
               //carnum = messageString.lenth();
               //int i;
               //for (i=0; i<=carnum; i++)
               {
                 
               }*/
             
           }

// partie qui gèreles info venant de vb.net
          if(carnum == 6 & (carlu == 's' || carlu == 'v' || carlu == 'l'))
               {
                 //Serial.println(carnum);
                 //Serial.println(carlu);
                  info0 = carlu;
                  Serial.print("info0:");
                  Serial.println(info0);
                 
               }
               else if(carnum == 4 & carlu == 'a' || carlu == 'b' || carlu == 'c' ||carlu == 'd'
               || carlu == 'e' ||carlu == 'f' )
               {
                  info1 = carlu;
                  Serial.print("info1:");
                  Serial.println(info1);
               }
               else if(carnum==2 & (carlu== '1' || carlu== '0'))
               {
                  info2 = carlu;
                  Serial.print("info0:");
                  Serial.println(info2);
               }
     }
   }
 }




Je voudrais utiliser le même code pour le site web et pour VB: soit via la variable "messageString". (partie du code en commentaire).

Mon problème c'est que vb.net -> System.Net.Sockets.TcpClient() envoie caractère par caractère et avec un null entre chaque caractère.

Connaissez vous un autre objet en vb.net qui enverrait l'équivalent de la requête html ?
Ou y at'il une amélioration sur le code arduino?

Merci

skywodd

Bonjour,

HttpClient ;)
http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up