Serveur Web instable

Bonjour à tous,

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.

Merci

arduino_web_relais_terasse_8_relais.ino (10.8 KB)

virez le delay(1) dans

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

j'ai un petit tuto Exemple d'usage du shield Ethernet pour faire un serveur interactif que vous pouvez regarder éventuellement

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?

Leptro:
mais c'est aussi possible que la commutation du relais crée des parasites qui fait planter l'Arduino.

Bon point

@J-M-L link

Ok merci je regarde ça

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

la carte c'est celle ci (ou un clone)
SODIAL(R) 5V Module de relais electronique

il y a t'il une charge connectée au relais?

Leptro:
il y a t'il une charge connectée au relais?

Non rien pour l'instant, j'ai même testé de debrancher l'alim des relais pour ne garder que la partie commande, mais toujours pareil

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

Tosc:
Pour ça je sais pas comment faire autrement pour récupérer ces deux variables

regardez mon tuto. récupérez toute l'URL (en fait tout le header de la requête HTTP) et analysez l'URL que vous recevez.

S'il reste des trucs dans le flux entrant, la connexion n'est pas close vraiment et peut-être votre instabilité vient de là, vous saturez les clients.

J-M-L:
regardez mon tuto. récupérez toute l'URL (en fait tout le header de la requête HTTP) et analysez l'URL que vous recevez.

S'il reste des trucs dans le flux entrant, la connexion n'est pas close vraiment et peut-être votre instabilité vient de là, vous saturez les clients.

ça à l'air de bien coller effectivement, je vais refaire ce passage de lecture du header

merci à tous pour vos réponses

Salut à tous,

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

Merci pour vos réponses

ça veut dire quoi qu’il plante ? Est-ce que l’arduino affiche toujours des choses ? C’est quel shield ethernet ?

J-M-L:
ça veut dire quoi qu’il plante ? Est-ce que l’arduino affiche toujours des choses ? C’est quel shield ethernet ?

La page web ne répond plus et plus d'affichage sur le port serie, jusqu'à ce que je relance le téléversement u restart de l'arduino

Et quel shield ?