Pages: [1]   Go Down
Author Topic: Arduino Ethernet Shield : auto reset ?  (Read 1355 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


83 - var
Offline Offline
God Member
*****
Karma: 4
Posts: 772
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

Un tien vaux mieux que deux tu l'auras !

Made in Belgium
Offline Offline
God Member
*****
Karma: 0
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

83 - var
Offline Offline
God Member
*****
Karma: 4
Posts: 772
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley

Skizo !
Logged

Un tien vaux mieux que deux tu l'auras !

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink

J'ai juste ouvert dhcp.cpp fourni avec la librairie Ethernet officiel, et ai constaté ceci :
Code:
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 ?
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

83 - var
Offline Offline
God Member
*****
Karma: 4
Posts: 772
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

Un tien vaux mieux que deux tu l'auras !

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: April 27, 2012, 06:00:12 pm by Galdon » Logged


Made in Belgium
Offline Offline
God Member
*****
Karma: 0
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
« Last Edit: April 28, 2012, 08:06:20 am by osaka » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Made in Belgium
Offline Offline
God Member
*****
Karma: 0
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pas de prob, c'est le genre de trucs auxquels on ne pense pas quand on débute avec les µc .  smiley-wink
Logged


France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged


Pages: [1]   Go Up
Jump to: