Dans ma fonction setup(), je me connecte à mon routeur en ethernet, et ensuite j'envoie une requête HTTP à intervalle régulier :
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) ?
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.
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
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
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.
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.