J'ai un serveur web sur arduino + shield ethernet qui me permet de gérer 8 relais.
La compil est ok, et le serveur fonctionne, le temps d'allumer entre 3 et 6 relais puis le serveur plante, l'arduino n'est plus joignable et je suis obligé de le reboot pour qu'il reparte. Sur le monitoring série je n'ai pas non plus de retour du serveur.
J'ai mis en fichier joint le .ino
J'aimerais savoir ce qui cloche et comment est ce que je pourrais débugguer ça.
while (client.available())
{ // tant qu'il a des infos à transmettre
char urlvar = client.read(); // on lit le caractère
delay(1); //delai de lecture
if (urlvar == '?')
{ //si "?" repéré
numrelais = client.read();
actionrelais = client.read();
}
}
il n'y a pas besoin d'attendre pour la lecture, le code n'est pas asynchrone...
Un souci que vous avez c'est que vous faites 2 autres read() quand vous avez trouvé le '?' mais vous ne savez pas s'il y a quelque chose dans le buffer de lecture, donc votre numéro de relay ou action peut être totalement erroné (-1)
Virez aussi le delay(10);
par contre avant de faire le client.stop(); là il faut faire une petite attente (genre 5ms) pour laisser le temps au client de recevoir tout le buffer
Un booléen c'est true ou false.. pas 1... (même si ça 'marche' pour la cohérence c'est mieux)
boolean etatRelais1 = 1; //etat du pin
Vous devriez utiliser un tableau au lieu de répéter le code 8 fois..
Leptro:
C'est peut être un bug logiciel..
mais c'est aussi possible que la commutation du relais crée des parasites qui fait planter l'Arduino.
Il faudrait nous dire comment ils sont câblés, quel module relais est utilisé, quel type de charge est commandé.
comment est alimenté l'Arduino et le module relais?
L'arduino n'alimente que les optocoupleurs de la carte relais, les bobines des relais sont alimentées par un 5V directement depuis l'alim 5/12V, et l'arduino est alimenté par le 12V
J-M-L:
Un souci que vous avez c'est que vous faites 2 autres read() quand vous avez trouvé le '?' mais vous ne savez pas s'il y a quelque chose dans le buffer de lecture, donc votre numéro de relay ou action peut être totalement erroné (-1)
Pour ça je sais pas comment faire autrement pour récupérer ces deux variables
Quelques news de mon serveur web
c'est derniers jour j'ai enfin pu y jeter un oeil et j'ai repris un exemple ultra basique de serveur web (https://www.arduino.cc/en/Tutorial/WebServer) et même dans ce cas le serveur web plante au bout de quelques minutes...
J'avais déjà changé l'arduino pour un autre donc j'ai cette fois ci change le shield ethernet et une fois remplacé le serveur web avec le code que j'avais pondu au début est stable
Il faut reconnaitre que j'ai pris les shields les moins cher donc du quasi jetable et la qualité pas toujours au rdv...