Après deux jour a essayer de mettre le site sur une ip ciblable (mon hébergement mutualisé chez ovh ça marche pas
) 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
)
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
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 ![]()