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:
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
<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)
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