Go Down

Topic: Arduino Ethernet Shield : auto reset ? (Read 1 time) previous topic - next topic

Galdon

Bonjour

J'ai un Arduino UNO R3 + Ethernet shield R3.

Dans ma fonction setup(), je me connecte à mon routeur en ethernet, et ensuite j'envoie une requête HTTP à intervalle régulier :

Code: [Select]
void setup() {
  // Connexion au réseau local
  Ethernet.begin(arduinoMAC,arduinoIP);

  // Ecoute du port UDP 9
  udp.begin(arduinoPort);
}

void loop() {
  ma_fonction(); // Envoie une requête HTTP GET sur un serveur, quelque part sur internet...
  delay(1000);
}


Quand j'allume l'arduino alors que mon routeur n'est pas sous tension, il ne va pas pouvoir s'y connecter, forcément.

Maintenant si j'allume le routeur à ce moment, ça ne devrait pas fonctionner en théorie, puisque que mon arduino est dans sa boucle loop, et le seul moment où il est sensé initialiser la connexion avec mon routeur c'est dans setup().

Et pourtant ça marche, dés que mon routeur est allumé, des requêtes HTTP sont bien envoyées au serveur.

Est-ce que par hasard il n'y aurait pas une fonction de reset automatique déclenchée quand l'arduino détecte un changement à l'autre bout du câble ethernet (ex: allumage du routeur) ?

Merci

skizoh

Bonjour,

c'est vrai que c'est louche, mais tant mieux j'ai envie de te dire, par contre l'auto reset sa m'étonnerai ^^

Skizo !
Un tien vaux mieux que deux tu l'auras !

osaka

Attention dans le code arduino, lib, etc, ce sont des instructions destiné au w5100 ... ce qui ce passe dans celui-ci (gestion des couches, etc) est totalement indépendant de ce qui ce passe dans ton arduino.

skywodd

Bonjour,

La librairie ethernet ne rend pas la main au reste du code avant 1 minute d'attente en configuration par dhcp.
Donc si ton routeur met 30 sec à s'allumer par exemple, tu te trouve encore dans le ethernet.begin() et tout fonctionne ;)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

skizoh

Sérieuxxxx? c'est jdid ça =) toi tu a lus toute la doc aTmega pour savoir ça hein ! :p

Merci pour ces petit perles gracieusement partager :)

Skizo !
Un tien vaux mieux que deux tu l'auras !

skywodd


Sérieuxxxx? c'est jdid ça =) toi tu a lus toute la doc aTmega pour savoir ça hein ! :p

Je n'ai pas eu à lire la documentation de l'ATmega ;)

J'ai juste ouvert dhcp.cpp fourni avec la librairie Ethernet officiel, et ai constaté ceci :
Code: [Select]
int beginWithDHCP(uint8_t *, unsigned long timeout = 60000, unsigned long responseTimeout = 4000);
timeout de 60000ms soit 60 secondes.

L'ATmega n'as rien a voir dans la gestion de l'ethernet c'est le W5100 et la librairie Ethernet qui fait tout le travail.

Ps: un petit effort pour le français svp, ya des fois je me demander ce que tu veut dire .... "jdid" par exemple ?
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

skizoh

désolé c'est pas français ça ^^ c'est une expression de chez nous pour génial trop bien ou coi, bref désolé ^^'

Skizo !
Un tien vaux mieux que deux tu l'auras !

Galdon

#7
Apr 28, 2012, 12:57 am Last Edit: Apr 28, 2012, 01:00 am by Galdon Reason: 1
Merci pour vos réponses.

Du coup j'ai refait un test :

Arduino hors tension, je débranche mon routeur.
J'allume l'arduino et j'attends 5 minutes (et 45 secondes ^^), puis je rebranche le routeur.

Tout fonctionne, une notification est bien envoyée au serveur dans la minute qui suit, donc c'est pas le timeout de 60 secondes qui fait ça.

J'ai pas vérifié en mettant des debug Serial dans setup() pour en être sûr (la flemme) mais apparemment il y a bien un auto reset.

D'ailleurs cet article semble aller dans ce sens : http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

osaka

#8
Apr 28, 2012, 03:03 pm Last Edit: Apr 28, 2012, 03:06 pm by osaka Reason: 1
Comme déjà spécifié l'arduino et le w5100 sont indépendant l'un de l'autre niveau hard (sauf l'alim évidement), l'auto reset de l'arduino ne concerne que l'uart pour la programmation (regarde le titre de ton lien : "DisablingAutoResetOnSerialConnection") et n'a strictement rien à voir avec le w5100 ou le fait que ton routeur s'allume.
Quand tu fais "begin(...)" dans le setup, tu configures le w5100 qui lui va faire les tentatives de connexions, etc, donc à partir de ce moment là que tu laisses ton routeur éteint 5 min ou 1h ,temps que ton w5100 garde ça config (là un reset de l'arduino provoquera un reset de la config du w5100 ) il tentera la connexion.
Donc

Code: [Select]

void setup()
{
   Ethernet.begin(arduinoMAC,arduinoIP);
}


Veut dire, je configure mon w5100 en lui attribuant une mac adr et une ip pour qu'il puisse être reconnu sur mon réseau et non connecte moi maintenant à mon réseau.

Galdon

Ok merci pour ces explications plus détaillées (j'avais pas bien compris ton premier post mais maintenant c'est bon).

osaka

Pas de prob, c'est le genre de trucs auxquels on ne pense pas quand on débute avec les µc .  ;)

skywodd


Du coup j'ai refait un test :

Arduino hors tension, je débranche mon routeur.
J'allume l'arduino et j'attends 5 minutes (et 45 secondes ^^), puis je rebranche le routeur.

Tout fonctionne, une notification est bien envoyée au serveur dans la minute qui suit, donc c'est pas le timeout de 60 secondes qui fait ça.

J'ai pas vérifié en mettant des debug Serial dans setup() pour en être sûr (la flemme) mais apparemment il y a bien un auto reset.

D'ailleurs cet article semble aller dans ce sens : http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

Comme l'as précisé osaka il faut bien différencier le reset de la carte arduino, le reset du port série, et le reset du W5100.

Un reset physique de l'arduino entrainera un reset physique du W5100 car les deux broches reset sont relié entre elles, MAIS :
Si tu reboot ton routeur SANS reboot l'arduino le W5100 aura conservé son paramétrage IP antérieur, et quand le routeur sera de nouveau en route rien n'aura changer, et par conséquent tout marchera normalement (sauf bien sur si un autre périphérique venais à utiliser l'ancienne ip qu'utilise encore l'arduino).

Tente ceci :
débranche ton arduino, débranche ton routeur, branche ton arduino, attend 5 minutes, branche ton routeur.

Normalement ton arduino n'aura pas pu se connecter dans les 60 secondes du timeout, ce qui aura généré une erreur et bloqué tout ton programme.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Galdon


Tente ceci :
débranche ton arduino, débranche ton routeur, branche ton arduino, attend 5 minutes, branche ton routeur.

Normalement ton arduino n'aura pas pu se connecter dans les 60 secondes du timeout, ce qui aura généré une erreur et bloqué tout ton programme.



Ben c'est exactement le test que j'avais fait avant ton post, et ça marchait parfaitement :


Du coup j'ai refait un test :

Arduino hors tension, je débranche mon routeur.
J'allume l'arduino et j'attends 5 minutes (et 45 secondes ^^), puis je rebranche le routeur.

Tout fonctionne...

Go Up