Client - Serveur - Interpréteur de requêtes

Bonjour.

Voici mon problème.

J'aimerais faire 3 choses avec ma carte Mega + Ethernet Shield :

  • Recevoir une requête HTTP et interprété les paramètres GET résultant.
  • Afficher une page web en réponse à la requête.
  • Lancer depuis la platine Arduino une autre requête HTTP (de mise à jour sur un verseur distant).

J'arrive à faire les 3 choses séparément, le code fonctionne.
Mais les 3 ensemble (un après l'autre) j'arrive pas.
Je dois pas m'y prendre correctement.

Pourtant je voyais bien la suite dans l'ordre dans lequel je viens de l'exposer.

Quelqu'un a déjà fait quelque chose comme cela ?

salut, j'ai fait pas mal de manip web avec des pages etc et c'est vrai que des qu'il sagi de combiner une page web et d'autre réaction après une requête client j'ai souvent eu des bugs ou d'un coup tout ne marche plus, la nouvelle fonction ajouter en réaction a la requête HTTP la page web plus rien, donc ton problème ne m'étonne que moyennement, après :

  • Recevoir une requête HTTP et interprété les paramètres GET résultant.
  • Afficher une page web en réponse à la requête.

ça j'ai réussi à faire fonctionner simultanément malgré le faite que ce soit un peut délicat et que ça peut dérailler à la moindre connerie..
sinon pour:

  • Lancer depuis la platine Arduino une autre requête HTTP (de mise à jour sur un verseur distant).

La je ne vois pas trop la geul que ça aurait en code donc je peut pas trop te dire mais à mon avis en étant minutieux ça devrais être possible ! :slight_smile:
Donne ton code avec tout qui dysfonctionne et ton code pour ton autre requête HTTP seul qu'on regarde un peut tout ça.

Skizo !

Ok, merci Skizo.
Si jamais je publierais le code plus tard.
Mais en attendant, je serais interessé par la partie de ton code dont tu parles qui fonctionnais (plus ou moins :D)
Histoire d'y aller par étapes XD

ok alors attend avant qu'on ce comprenne mal, j'ai une partie de code qui trete la requête get et qui envoie un page web, c'est ça que tu veux? c'est a dire une page web avec des champ et tu récupère les valeur ou alors tu modifie ce qui s'affiche sur la page??

Si oui j'ai et je te le donne =)

Skizo !

Volontiers, car cette partie déjà j'arrive pas.
Merci d'avance.

Salut,

C'est quoi le probléme ? La gestion du GET de la pars du client ou l'affichage de la page en retour ?
Tu as des librairies toutes prêtes pour ça :

http://www.webweavertech.com/ovidiu/weblog/archives/000477.html

oui tu à ça sinon voila mon programme test weg =) avec un peu de css etc :slight_smile:

kdo !

Skizo !

exemple_web_arduino.ino (19.6 KB)

Merci à tous.

Skizoh, ton exemple est un peut trop complexe pour ce que je veux faire.
Et puis c'est pas très commenté, du coups, pas facile pour moi de m'y retrouver.
Mais merci, très intéressant et instructif.

Skywodd, merci aussi, mais ce que je cherche ressemble plus..
A quelque chose comme cela :

J'ai effectuer les modifications que je poste en commentaire.
J'ai aussi juste changé l'adresse MAC et IP.
Je joins mon fichier.
Ca fonctionne, enfin pas totalement.
J'arrive à changer l'état d'une sortie (digital No 8) à 1 et 0.
J'ai le "log" du port COM qui marche bien et qui m'indique bien tout ce que je fais.
Mais par contre, la partie affichage de la page HTML dans le browser ne marche comme sur la vidéo de démonstration.
J'ai une erreur 324 (Pas de données reçues).
Et pourtant le code confirme bien que je devrais voir un truc du genre "D8 is ON".

Test1.ino (4.84 KB)

D'accord, ouai désolé c'est vrai qu'il n'est pas du tout commenté ^^ je penserai à en faire un simple bien commenter un jour ou l'autre, je vais geter un coup d'oeuil à ton programme je te dirai un peut ce qu'il en est :slight_smile:

Skizo !

Bon, alors personne n'a une idée ?

La seul modification que je fais par rapport à son code qui semble fonctionner dans la vidéo, c'est de mettre Ethernet devant Client, car sinon, ça compile pas.
Mais c'est quand même pas cela qui pose problème ?
Lui dans la vidéo il a bien quelque chose d'affiché dans le browser.

Une autre piste, c'est que des librairies sont déclarées.
Dont une qui n'est autre que Ethernet.h qui est sans doute à l'origine des modifications du code d'origine.
Peut-être que quelque chose à changé dans une de ces librairies.

Puisque le code n'a pas l'air d'être tout frais et qu'il n'a visiblement pas été revus depuis.

Merci.

Bonjour tout le monde :slight_smile:

Je me permets de poster ici puisque ma question est en rapport avec le sujet :slight_smile:
Ayant une carte Mega + Ethernet Shield j'arrive à :

  • Recevoir une requête HTTP
  • Afficher une page web en réponse à la requête

Cependant le pauvre Arduino peine à afficher les boutons et les images qu'il va chercher sur le net ...
J'utilise cette syntaxe :   client.println(F("<form method=get action=/>"));

Après des jours de recherche je voudrais savoir si il y a une solution pour " soulager" l'arduino ...
J'ai vu les socket et serveur ( avec wamp entre autre) mais vu mon niveau en html/php je m'enlise un peu plus chaque jour :frowning:

Toute astuce est donc la bienvenue ...

Amicalement,
trigger

trigger:
Cependant le pauvre Arduino peine à afficher les boutons et les images qu'il va chercher sur le net ...

!!! Attention, ce n'est pas l'arduino qui va chercher et afficher les images mais ton navigateur qui interprétera le code (balises et url's) fournis par l'arduino.
Donc le ralentissement ou durée de chargement de l'image ne peut être imputé à l'arduino ...

Merci pour ta réponse rapide mais étant donné que l'arduino envoie le code html

 client.println(F("<input src=\"http://xxxxxxxxxxxxxxxxxx.png\" type=image name=menu >"));

C'est lui qui peine à envoyer non ?

Car parfois il manque des boutons ou la page ne se charge pas complétement ...
Cela viendrais de mon code html qui est mauvais ?

trigger:
Merci pour ta réponse rapide mais étant donné que l'arduino envoie le code html

 client.println(F("<input src=\"http://xxxxxxxxxxxxxxxxxx.png\" type=image name=menu >"));

C'est lui qui peine à envoyer non ?

Ah d'accord j'avais compris, il (l'arduino) peine à afficher et il va chercher ...

trigger:
Cependant le pauvre Arduino peine à afficher les boutons et les images qu'il va chercher sur le net ...

Donc on est bien d'accord l'arduino fourni le code html au navigateur qui lui interprètera ce code pour afficher et chercher ... :sweat_smile:
Donc oui il est possible que ton arduino peine à retourner le code html en réponse à une requête, tu effectues un traitement entre deux portion de ce code html retourné ?

tu as tout compris :slight_smile:

Alors en gros lorsque l'on click sur un des boutons, l'arduino vient lire l’URL et ensuite oui il fait un traitement de la chaine de caractères :slight_smile:

Il a pas mal de chose à faire en effet mais j'ai utilisé pas mal de switch pour lui éviter des choses inutiles, il serait pas possible de faire en sorte que l'Arduino soit client et serveur et faire un petit serveur ( je ne connais pas grand chose mais je commence à comprendre comment fonctionne WAMP) sais tu si les "sockets" pourraient venir en aide ?

Tout dépend du traitement mais si c'est un traitement du genre relevé de température par exemple qui ne doit pas être obligatoirement fais au moment de la requête tu peux les séparé ainsi le code html retourné sera pourvu du dernier relevé et non du relevé au moment de la requête.
Maintenant si c'est un traitement dépendant de la requête, il faudra peut être effectuer le traitement d'abord et ensuite seulement envoyer la totalité du code html construit.

Sinon pour les sockets ça peut être une solution, celà te permet de ne retourner que la partie, une portion de code html à modifier et non toute la page entière.
Mais c'est une solution plus complexe à mettre en place car il faut jonglé avec différents langage et technologies.
J'ai récemment essayer de faire une petite synthèse des solutions possible avec l'arduino.

Piste ? :

http://blog.weeboo.net/tutoriel-arduino-ethernet-shield-controler-led-depuis-une-page-web/

salut, quelque mots de mon expérience, effectivement le ARDUINO est très frileux quand on lui demande de réfléchir avant d’envoyer une page web, je me suis déjà retrouver avec ma page web imbriquer 30fois sur elle même ^^" bref, comme la dit osaka vaut mieux avoir ces donné préparé périodiquement et envoyer le dernier relevé quand la demande arrive, sinon pour ce qui est des interaction, préparé les page de l'inter action ( c'est a dire réponse ) explication: si tu clic sur un bouton et que ça allume quelque chose, tu envoie la page avec l'info allumé et après dans la suite de ton programme un flag qui dit on doit allumé donc allume, c'est un peut flou ce que je raconte mais essaie de resté sur le concept de page déjà élaboré avant la requête sinon c'est l'enfer l'ARDUINO part dans tout les sens.

Skizo !