Aide programation carte Arduino uno + Ethernet Shields

Après deux jour a essayer de mettre le site sur une ip ciblable (mon hébergement mutualisé chez ovh ça marche pas :confused: ) j'ai pu tester le programme. j'ai héberger le site et le fux RSS sur un pc fixe avec WAMP. j'ai redirigé les port de ma freebox pour que le site soit ciblable en dehors de mon réseaux tout marche bien.

Le fichier flux.xml est a la racine : http://88.186.8.191/flux.xml (si il est tard mon pc est éteint donc ça marchera pas :slight_smile: )

pour simulé mon volet j'ai utilisé trois LED,

  • Sur le pin 13 une LED qui simule la monter
  • Sur le pin 12 une LED qui simule la descente
  • Sur le pin 11 une LED qui s'allume en cas d'erreur

Mon circuit est bien cablé, je l'ai tester avec un petit programme K2000 XD

La carte UNO est branché en usb a mon pc portable la carte ethernet est bien emboîter dessus et est branché directement a ma freebox avec un loooooooooong câble RJ45

mon flux xml est :

<?xml version="1.0" encoding="ISO-8859-1"?>
<action>ouvert</action>

avec une ligne vide a la fin.

Le programme Arduino :

#include <SPI.h> // Librairie SPI pour la communication hardware
#include <Ethernet.h> // Librairie Ethernet

byte mac[] = { // Adresse MAC (n'importe quelle adresse fait l'affaire)
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 

IPAddress server(88, 186, 8, 191); // Adresse IP du serveur distant (ici mon serveur web local)

EthernetClient client; // Objet EthernetClient 

int ledPin = 13;                 // LED connectée à la broche numérique 13  LED de monter
int ledPin2 = 12;                 // LED connectée à la broche numérique 12  LED de descente
int ledPin3 = 11;                 // LED connectée à la broche numérique 11 LED d'erreur

// setup()
void setup() {
  
  pinMode(ledPin, OUTPUT);      // met la broche numérique en sortie 
  pinMode(ledPin2, OUTPUT);      // met la broche numérique en sortie 
  pinMode(ledPin3, OUTPUT);      // met la broche numérique en sortie 
  
  Serial.begin(9600); // Initialisation du port série

  if (!Ethernet.begin(mac)) { // Opbtention d'une adresse IP par DHCP
    Serial.println("Erreur DHCP");
    for(;;); // En cas d'erreur on bloque le programme dans une boucle infini
  }
  Serial.println("DHCP OK");
}

// loop()
void loop()
{
  String str; // Chaine de char contenant une ligne de la réponse HTTP
  char c;

  delay(10000); // Delai entre deux requétes

  if (client.connect(server, 80)) { // Connexion au serveur web
    client.println("GET /flux.xml HTTP/1.0"); // Demande de flux.xml en HTTP 1.0
    client.println();
  } 
  else {
    Serial.println("Erreur TCP"); // Si erreur lors de la connexion
    return; // quitte loop()
  }

  for(;;) { // Boucle infini
    if(client.available()) { // Si des données son disponible sur l'objet EthernetClient
      c = client.read(); // Lecture d'un octet
      if(c == '\n') { // Si fin de ligne atteinte
      // (Pensez à mettre une ligne vide à la fin de flux.xml)
        if(str.startsWith("<action>")) { // Si la ligne commence par <action>
          str.replace("<action>", ""); // Enléve les balises XML
          str.replace("</action>", "");
          Serial.println(str); // Affiche la valeur du noeud XML
          //  TODO
          if(str == "ouvert") //si le flux contient "1" on ouvre le volet. (allumage de la LED du pin 11)
          {
            digitalWrite(ledPin, HIGH);   // allume la LED
            delay(1000);  // attend une seconde
          }
          if(str == "ferme") //si le flux contient "2" on ferme le volet. (allumage de la LED du pin 12)
          {
            digitalWrite(ledPin2, HIGH);   // allume la LED
            delay(1000);  // attend une seconde
          }
          else //si le flux contient autre chose il ya un un probleme, on fait clignoter la LED de probleme. (clignotage de la LED du pin 13)
          {
            digitalWrite(ledPin3, HIGH);   // allume la LED
          }
          
          
          break; // Sort de la boucle infini
        } 

        str = ""; // Vidage de la ligne
      } 
      else
        str += c; // Concaténation de l'octet recu dans la chaine de char
    }

    if(!client.connected()) // Si la connexion a été perdu
      break; // Sorti de la boucle infini
  }

  client.stop(); // Fermeture de la connexion avec le serveur
}

Et c'est malheureusement la LED d'erreur qui s’allume :confused: alors est ce que c'est une erreur réseau ou programme ? Si mon programme est juste comment vérifier que la carte est bien connecter a internet ?

Merci :smiley: