IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Wifi retour info requête


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut Wifi retour info requête
    Bonjour à tous,
    j'ai réalisé une application avec Arduino téléversée sur une wemos qui reçois des requêtes de mon smartphone android via le wifi par une application développée avec windev.

    Le smartphone est en serveur wifi ( point d'accès mobile on)

    Les requêtes du genre "http://192.168.43.203/?DET1=ON" sont bien transmise par wifi à la wemos qui les exécute.

    Toutefois, j'aurai bien aimé m'assurer de mon smartphone que la wemos a bien reçu les bons paramètres.

    Comment faire ? J'ai bien essayé de renvoyer réponse du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.println("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n");
    qui acquitte l'envoi de la requête, puis de différents client.println ( d'une page html....)

    mais question bête, comment récupérer et visualiser la réponse de cette page html dans l'application windev du smartphone ?? ou par un autre moyen sur le smartphone lequel ?

    merci de vos conseils

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    Citation Envoyé par Lepimar Voir le message
    Toutefois, j'aurai bien aimé m'assurer de mon smartphone que la wemos a bien reçu les bons paramètres.
    le protocole HTTP permet de renvoyer un code qui dit si tout s'est bien passé ou pas
    cf Codes de réponse HTTP ==> https://developer.mozilla.org/fr/docs/Web/HTTP/Status

    le plus simple si vous avez des doutes sur la transmission de l'URL serait de rajouter un dernier paramètre dans lequel vous calculez un CRC32 par exemple de l'URL.

    Vous enverrez alors http://192.168.43.203/?DET1=ON&CRC=xxxxx

    ça permettra à l'arduino de vérifier que l'URL est intègre et de répondre (code 200 ou 202 par exemple) dans ce cas où de répondre avec un code d'erreur sinon (400, 409, 417)

    Bien sûr votre code windev devra gérer le code retour de la requête HTTP et calculer ce CRC

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    merci pour votre réponse.
    Du smartphone, avec windev, j'envoie 8 requêtes consécutives avec différents paramètres et une dernière indiquant la fin :
    http://192.168.43.203/?FIN
    Dans la wemos, avec arduino, à la détection de cette requête de fin je renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.println("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n");
    mais cette réponse à cette dernière requête sur mon smartphone avec windev me retourne faux!!
    Sur l'Arduino je poursuit toutefois avec plusieurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.println(  "d'une page html codant les paramètres reçus")
    mais je ne reçois rien sur le smartphone !!
    D’où ma question, comment faire car la page html que je construit récapitule l'état des différents paramètre reçus.
    Est-ce un problème de windev ?

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    Je n’utilise pas WinDev mais je me demande si chacune des 8 transactions n’attend pas une réponse du serveur http?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    oui, c'est ce que j'ai testé depuis, à chacune des requêtes précédentes, j'ai renvoyé un acknowledge:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.println(F("HTTP/1.1 200 OK"));
    mais malheureusement cela ne change rien à la dernière réponse reçue dans WinDev, je reçois comme réponse :
    réponse fausse, Taille d# 0 , chaine recue : (rien!)
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Res_HTTP = HTTPRequête("http://192.168.43.203/?FIN")
    SI Res_HTTP = Vrai ALORS
    	Info("Requete HTTP bonne : ")
    	ResCode est une chaîne = HTTPDonneRésultat()
    	Info("chaine recue : " + ResCode)
    SINON 
    	SI Taille(Res_HTTP) = 0 ALORS		// Il y a eu une erreur du serveur Web,
    		// le détail de l'erreur est dans l'entête de la page
    		ErreurHTTP = HTTPDonneRésultat(httpEntête)
    		Erreur(ErreurHTTP)	
            Info("Requete HTTP fausse ")
       SINON  Info("Requete HTTP fausse taille # 0 ")
    	ResCode2 est une chaîne = HTTPDonneRésultat()
    	Info("chaine recue : " + ResCode2)
        ResEntête est une chaîne = HTTPDonneRésultat(httpEntête)
        Info("Entête : " + ResEntête)
       FIN

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    Il faudrait déjà maîtriser l’API windev.

    Faites une requête HTTP (je ne connais pas, mais il semble qu’il y aitune abstraction qui permet de faire ça simplement https://doc.windev.com/en-US/?3043007) et traitez la réponse sous windev.

    Quand ça fonctionnera vous pourrez faire vos 8 requêtes (pourquoi ne pas passer toutes les infos dans une seule requête ?)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    oui, peut-être que le problème que je pose vienne de windev ?
    au lieu d'envoyer un flot de requêtes pour transmettre les paramètres de 5 booléens et 3 entiers, j'ai fait un essai en n'envoyant qu'une seule requête avec windev. J'ai adapté le code sur la wemos pour renvoyer la réponse OK suivie d'une page html simplifiée.
    La réponse que je reçois sur le smartphone est toujours la même :
    réponse fausse, Taille # 0 , chaine recue : (rien!)
    Avec windev, je suis obligé de transmettre un flot de requêtes car il n'est pas possible dans la syntaxe HTTPRequet de mettre des variables, il faut mettre absolument une chaine établie entre cotes!!
    pour transmettre un booléen c'est assez facile il faut faire simplement un "if" voir code ci dessous , mais pour transmettre un entier, cela se complique!! Toutefois, l’algorithme que j'ai développé pour transmettre les valeurs entières fonctionne parfaitement, là où je bloque c'est la transmission en fin de séquence du retour de la page html codant les valeurs des paramètres vers le smartphone!! Je reçois toujours réponse fausse ...

    Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Emet, sAdresse, sRetour sont des chaînes
    nb, diz, cent sont des entiers
    //Res est un booléen
    ErreurHTTP	est une chaîne
    Res_HTTP	est une chaîne	
     
    Emet	= Gauche(BP1,2)
    SI Emet = "OF" ALORS
    Res_HTTP = HTTPRequête("http://192.168.43.203/?DET1=OF")
    SINON
    Res_HTTP = HTTPRequête("http://192.168.43.203/?DET1=ON")
    FIN
     
    SI Res_HTTP = Vrai ALORS
    	Info("Requete HTTP bonne : ")
    	ResCode est une chaîne = HTTPDonneRésultat()
    	Info("chaine recue : " + ResCode)
    SINON 
    	SI Taille(Res_HTTP) = 0 ALORS		// Il y a eu une erreur du serveur Web,
    		// le détail de l'erreur est dans l'entête de la page
    		ErreurHTTP = HTTPDonneRésultat(httpEntête)
    		Erreur(ErreurHTTP)	
            Info("Requete HTTP fausse ")
       SINON  Info("Requete HTTP fausse taille # 0 ")
    	ResCode2 est une chaîne = HTTPDonneRésultat()
    	Info("chaine recue : " + ResCode2)
        ResEntête est une chaîne = HTTPDonneRésultat(httpEntête)
        Info("Entête : " + ResEntête)
       FIN

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    il n'est pas possible dans la syntaxe HTTPRequet de mettre des variables, il faut mettre absolument une chaine établie entre cotes!!
    qu'est-ce qui vous empêche de bâtir une String qui représente cette URL ?
    cf https://doc.pcsoft.fr/?1512001


    je ne connais pas windev mais ça semble bien verbeux...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    oui, c'est bien ce que je fais dans l'exemple mentionné précédemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Emet	= Gauche(BP1,2)
    SI Emet = "OF" ALORS
    Res_HTTP = HTTPRequête("http://192.168.43.203/?DET1=OF")
    SINON
    Res_HTTP = HTTPRequête("http://192.168.43.203/?DET1=ON")
    FIN
    j'ai essayé tout en tas de choses , mais rien n'y fait!!
    comme dit précédemment j'ai toujours la même réponse
    réponse fausse, Taille # 0 , chaine recue : (rien!)
    Maintenant, quelles sont les alternatives à Windev pour transmettre par wifi 5 booléens et 3 entiers et de voir l'état des paramètres transmis sur un smartphone ?
    Je suis en train d'installer Android Studio , est-ce la bonne voie ??

  10. #10
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    Non vous émettez deux string différentes en fonction du booléen Émet
    Je parle de bâtir l’URL dynamiquement par concaténation et en profiter pour mettre tous les paramètres d’un coup

    Mais bon pour l’instant il faut faire fonctionner une requête unique

    Pour le code de retour de la requête c’est vrai ou faux. Pourquoi faite vous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SI Taille(Res_HTTP) = 0 ALORS
    La doc dit que pour obtenir des infos il faut faire

    To get the details of the error, use ErrorInfo with the errMessage constant.
    The result of the request can be saved in a backup file by HTTPDestination or it can be retrieved by HTTPGetResult.
    Universal Windows 10 AppJava The errors regarding the security of transactions are not returned by ErrorInfo: the connection is refused.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    Non vous émettez deux string différentes en fonction du booléen Émet
    Je parle de bâtir l’URL dynamiquement par concaténation et en profiter pour mettre tous les paramètres d’un coup
    non, avec le if, une seule requête est bien émise en fonction de la valeur du booléen.
    bâtir une URL dynamiquement n'est pas possible , j'ai essayé cela ne marche pas!!

    En ce qui concerne l’obtention du résultat de la requête, j'ai essayé tout un tas de combinaisons en envoyant une seule requête seulement, rien n'y fait, c'est pour cela que je jette l’éponge avec ce logiciel Windev même si à chaque fois toutes les requêtes que je génère sont bien transmisses et bien décodées dans Arduino, je le constate bien dans 'Moniteur série' avec les traces que j'ai mises et de plus, ce que je recherche s'est comment récupérer la page html générée avec Arduino pour m’assurer du bon fonctionnement sur le smartphone !!
    C'est pour cela que je recherche une autre alternative

  12. #12
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    Pour le développement sur smartphone je privilégie le code natif et les outils de l’éditeur de l’OS pour l’efficacité, être proche du matériel et de la spécification, la performance et l’indépendance d’un éditeur tiers qui est souvent en retard sur les modifications lors des nouvelles versions

    > j'ai essayé cela ne marche pas!!
    Quel code ?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    > j'ai essayé cela ne marche pas!!
    Quel code ?
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPRequête("http://192.168.43.203/?DET4"+ Emet)
    ou encore du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPRequête(ConstruitChaine("http://192.168.43.203/?DET4"+ Emet))
    les syntaxes reproduites ci-dessous ne sont peut-être pas parfaitement exactes, elles l'étaient lors de mes essais , je n'ai pas gardé de trace et de toutes façons, ceci n'est pas le sujet de ma préoccupation. Comme dit précédemment lors de l'envoi d'une seule requête j'ai une réponse fausse et de plus comment récupérer la page html que je renvoie c'est là tout mon problème!!Le reste est accessoire car j'ai une version qui envoi bien tous les paramètres et qui les décode bien sur la wemos. Seule chose qui manque :
    comment réceptionner et visualiser suer le smartphone la page html renvoyée
    c'est pour cela que je regarde maintenant comment envoyer une requête simple et réceptionner une page html avec Android Studio ...

  14. #14
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    Je pensais plus à un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    monURL est une chaîne = "http://192.168.43.203/?DET1="
    monURL += Émet
    Res_HTTP = HTTPRequête(monURL);
     
    SI Res_HTTP = Faux ALORS
    Erreur("Souci url : " + monURL, ErreurInfo())
    Mais je n’ai jamais utilisé windev donc je ne sais pas si c’est valide

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    effectivement, cette syntaxe passe et est bien transmise à la wemos, cela me permettra de n'envoyer qu'une seule requête. Mais le problème reste entier pour la réponse qui est toujours fausse avec pour libellé :
    Impossible de récupérer le résultat de la requête
    Vérifier que les redirections soient correctement paramétrées
    Détail de l'erreur système : Protocole non supporté

  16. #16
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    Est ce que vous envoyez autre chose que

    HTTP/1.1 200 OK

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    à la réception et décodage de la requête émise avec windev :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Res_HTTP = HTTPRequête("http://192.168.43.203/?DET1=ON")
    avec arduino j'envoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.println("HTTP/1.1 200 OK");
    puis la page HTML ci après
    mais la réponse sur le smartphone est toujours fausse avec le libellé :
    Impossible de récupérer le résultat de la requête
    Vérifier que les redirections soient correctement paramétrées
    Détail de l'erreur système : Protocole non supporté
    j'ai essayé de voir pourquoi il y avait 'protocole non supporté' mais je n'ai pas trouvé!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    client.println("");
      client.println("<!DOCTYPE HTML>");
      client.println("<html>");
      client.println("<head>");
      client.println("<title>Wemos paremetres</title>");
      client.println("</head>");
      client.println("<body>");
      client.println("<a href=\"/\">Refresh Status</a>");
      client.println("</br></br>");
      //check the LED status
      if (sauv_paramétres.Val_Det_Ir == 0) {
        client.print(" Detecteur IR Off</br>");
      } else {
        client.print(" Detecteur IR On</br>");
      } 
      client.println("</br>");
      client.println("</body>");
      client.println("</html>");

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    la réponse sous la forme d'un 'client.printnl unique de change rien, toujours réponse fausse et même libellé d'erreur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     String  ptr =  ("<!DOCTYPE HTML>");
      ptr += ("<html>");
      ptr += ("<head>");
      ptr += ("<title>Wemos paremetres</title>");
      ptr += ("</head>");
      ptr += ("<body>");
      ptr += ("<a href=\"/\">Refresh Status</a>");
      ptr += ("</br></br>");
      //check the LED status
      if (sauv_paramétres.Val_Det_Ir == 0) {
      ptr += (" Detecteur IR Off</br>");
      } else {
      ptr += (" Detecteur IR On</br>");
      } 
      ptr += ("</br>");
      ptr += ("</body>");
      ptr += ("</html>");
      Serial.println(" page html retournée");
      Serial.println(ptr);
      client.println(ptr);

  19. #19
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 900
    Par défaut
    essayez un petit bout de code simple côté windev qui accède une URL connue et vérifie la conformité de l'appel

    côté arduino mettez le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println("Connection: close");
      client.println();
      client.println("<!DOCTYPE HTML>");
      client.println("<html>");
      client.println("HELLO");
      client.println("</html>");
      delay(1);
      client.stop();

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 38
    Par défaut
    du smartphone avec windev, j'ai envoyé la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    URL ="http://www.pcsoft.fr"
    Res_HTTP = HTTPRequête(URL)
    j'ai la même réponse:
    Impossible de récupérer le résultat de la requête
    Vérifier que les redirections soient correctement paramétrées
    Détail de l'erreur système : Protocole non supporté
    Il semblerait donc que le souci vienne de windev ou d'un paramétrage sur le smartphone ?

    coté Arduino Le changement de code de la réponse produit le même résultat, normal, si le défaut serait coté smartphone!

Discussions similaires

  1. SL 4 + RIA : retour de requête trop conséquent
    Par Arno_94 dans le forum Silverlight
    Réponses: 4
    Dernier message: 30/08/2010, 11h00
  2. Réponses: 1
    Dernier message: 22/12/2008, 09h41
  3. [Oracle] vérification de retour de requête
    Par teen6517 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/03/2007, 08h38
  4. retour info chekbox
    Par philguio dans le forum IHM
    Réponses: 8
    Dernier message: 27/12/2006, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo