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 :

Problème de transaction entre un shield Ethernet 2 et une Livebox


Sujet :

Arduino

  1. #1
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut Problème de transaction entre un shield Ethernet 2 et une Livebox
    Bonjour,

    il m'arrive un problème curieux.
    J'ai créé un mini serveur sur un couple UNO V3 / Shield Ethernet 2 qui a besoin d'aller chercher des fichiers à "l'extérieur", pour des raisons évidentes de manque de mémoire, afin de les utiliser lors d'une requête adressée par un navigateur quelconque (sur mon réseau, bien sûr).

    Pour que ces fichiers soient dispos depuis n'importe quel poste, il doivent être à des adresses accessibles quels que soient les postes ouverts ou éteints. Donc, soit chaque poste a un exemplaire des fichiers nécessaires, pas très élégant ni très évident avec les tablettes, soit ces fichiers doivent se trouver à une adresse toujours valide. Les deux solutions sont, à priori, soit l’hébergement sur un site externe, soit le stockage sur la box.

    Quand j'héberge sur un site externe, ça fonctionne parfaitement, et donc, mon problème semble résolu. Mais j'aimerai que cela fonctionne également sur un réseau ethernet indépendant de la liaison internet. Je préfèrerais donc privilégier le stockage sur la box.

    Je stocke donc mes fichiers sur une clé USB connectée à ma box et j'essaye de les récupérer. Et c'est là que le problème curieux se pose. Quand j'entre l'adresse IP que j'ai assignée à mon "serveur", la page se charge mais ne trouve pas les fichiers qui sont sur la box.

    Maintenant, je fais un clic droit sur la page dans le navigateur et je clique sur "Code source de la page", je sélectionne ce code et le sauvegarde sous "toto.html". Et là, quand je clique sur "toto.html", la page s'ouvre dans le navigateur et les fichiers sont chargés. Il faut bien comprendre que c'est exactement le même code.

    Je vous poste ici le code Arduino qui génère la page (une version simplifiée à l’extrême mais totalement opérationnelle. Pour l'exemple, les fichiers en question sont réduits à un simple fichier image. Habituellement, c'est plutôt du javascript, mais ça revient au même):
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <SPI.h>
    #include <Ethernet2.h>
     
    byte mac[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    IPAddress ipLocal(192, 168, 1, 200);
    EthernetServer serveurHTTP(80);
     
    void setup()
    {
      Ethernet.begin(mac, ipLocal);
      delay(1000);
      serveurHTTP.begin();
    }
     
    void loop()
    {
      EthernetClient client = serveurHTTP.available();
      if (client)
      {
        String reception = "";
        if (client.connected())
        {
          while (client.available())
          {
            reception = reception + client.read();  //Vide le buffer pour ne charger la page qu'une fois
          }
          //Envoi de l'en-tête respectant le protocole HTTP
          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Content-Type: text/html"));
          client.println(F("Connnection: close"));
          client.println();
          //Envoi de la page html  
          client.println(F("<!DOCTYPE html>\n"));
          client.println(F("<html>\n"));
          client.println(F("  <head>"));
          client.println(F("    <meta charset=\"utf-8\" />"));
          client.println(F("    <title>Récupération d'une image sur clé USB dans la Livebox</title>"));
          client.println(F("  </head>\n"));
          client.println(F("  <body>"));
          client.println(F("    <p>La page est transmise correctement et est valide</p>"));
          client.println(F("    <img src=\"file://///Livebox/image/image.png\" alt=\"Mais l'image n'est pas téléchargée depuis la Livebox\" />"));
          client.println(F("  </body>\n"));
          client.println(F("</html>"));
          delay(1);
          client.stop();
        }
      }
    }
    Je précise que dans l'adresse du fichier "image.png", "Livebox" est le nom natif de la box et "image" est le nom de la clé USB.

    Je téléverse ce code dans l' Arduino puis j'entre "192.168.1.200" dans la barre d'adresse du navigateur.

    Voici la page qui s'affiche:

    Nom : Capture_1.PNG
Affichages : 823
Taille : 12,6 Ko

    Je clique à droite sur la page:

    Nom : Capture_2.PNG
Affichages : 860
Taille : 20,6 Ko

    pour afficher le code html de la page en cours:

    Nom : Capture_3.PNG
Affichages : 855
Taille : 37,9 Ko

    puis je sélectionne ce code

    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
     
    <!DOCTYPE html>
     
    <html>
     
      <head>
        <meta charset="utf-8" />
        <title>Récupération d'une image sur clé USB dans la Livebox</title>
      </head>
     
      <body>
        <p>La page est transmise correctement et est valide</p>
        <img src="file://///Livebox/image/image.png" alt="Mais l'image n'est pas téléchargée depuis la Livebox" />
      </body>
     
    </html>
    que je sauvegarde sous "toto.html".

    Quand je lance "toto.html", j'obtiens la page suivante:

    Nom : Capture_4.PNG
Affichages : 829
Taille : 18,8 Ko

    Je ne comprend pas pourquoi le navigateur réagit différemment au même code en fonction de la façon dont il le reçoit.

    Quelqu'un aurait-il une idée? Moi, je nage!

    Désolé d'avoir été un peu long mais j'ai voulu essayer d'être clair.

    Cordialement, naute .

  2. #2
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,


    Normal tu as enregistré la page sur ton disque dur et lorsque tu lances la page tu te connectes sur la box pas sur l'Arduino.
    Or avec l'arduino, ton navigateur ne se connecte pas sur la box mais vers ton Arduino (ton arduino est le serveur).

    Sinon en remplaçant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file://///Livebox/image/image.png
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://192.168.1.1/image/image.png
    ? Avec 192.168.1.1 l'adresse IP de la box.

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 248
    Billets dans le blog
    48
    Par défaut
    Bonjour,

    Citation Envoyé par naute Voir le message
    J'ai créé un mini serveur sur un couple UNO V3 / Shield Ethernet 2 qui a besoin d'aller chercher des fichiers à "l'extérieur", pour des raisons évidentes de manque de mémoire [...]
    Il y a un lecteur de carte micro-SD sur ce shield, pourquoi ne pas stocker les pages html et les images sur la carte SD ?

    There is an onboard micro-SD card slot, which can be used to store files for serving over the network.

  4. #4
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Bonjour Auteur.

    Merci de partager mon angoisse .

    Alors, l'adresse de ma box est bien 192.168.1.1 mais j'ai déjà fais la manip. Je crois que j'ai essayé à peu près toutes les combinaisons possibles. J'ai même essayé en plaçant mon fichier "image.png" à la racine de C: et en écrivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    client.println(F("<img src=\"c:/image.png\" />"));
    dans mon code Arduino, le fichier n'est pas trouvé. Par contre, en écrivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    client.println(F("<img src=\"http://monsite.fr/image.png\" />"));
    l'image s'affiche. On dirait que le protocole m'interdit l'accès à un fichier local.

  5. #5
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Bonjour f-leb,

    j'étais en train de répondre à Auteur quand ton message est arrivé.

    Citation Envoyé par f-leb Voir le message
    Bonjour,
    Il y a un lecteur de carte micro-SD sur ce shield, pourquoi ne pas stocker les pages html et les images sur la carte SD ?
    Oui, ça ne m'avais pas échappé, mais ça fait une librairie et du code en plus, et je vais être limite. Ce sera malgré tout, peut-être, la seule solution. J'aimerais quand même bien résoudre le problème que j'ai posté, ne serait-ce que pour le sport .

    Merci de ton intérêt.

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Je suis d'accord avec f-leb, tu devrais mettre ton image et tes pages web sur la carte SD de l'Arduino, c'est fait pour ça. Si pour une raison ou une autre tu dois déplacer ton Arduino (le brancher sur une autre box) ton système actuel ne fonctionnera plus car tu devras aussi déplacer ta clef usb. Si, au contraire, tu mets l'essentiel des fichiers (images, html) sur une carte SD, ton serveur Arduino ne sera plus dépendant de ta box. Et en plus, tu n'auras pas à générer le code de ton fichier html dans le code C++ Arduino.

  7. #7
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut


    Et moi je suis d'accord avec vous deux, du moins dans le cas de pages statiques, mais mes pages sont essentiellement dynamiques, générées en javascript/ajax et donc n'existent pas réellement en tant que fichiers. Et c'est peut-être d'ailleurs de là que vient le problème. Il n'y aura aucune image réelle sur la clé USB (ou autre), mais du code javascript dessinant dans un "canvas" les éléments se mon interface, et je butte justement sur le chargement de ces fichiers dans mes pages html (sauf s'ils se trouvent sur un serveur externe ).

    Mon exemple n'était effectivement pas explicite à ce sujet, mais il n'était là que pour mettre en évidence ce qui se passe. Je réalise en réalité (enfin, je n'en suis pour l'instant qu'au prototypage, mais ça avance) un petit système de contrôle d'un certain nombre de "paramètres domestiques" gérant des actionneurs et des capteurs, dont l'interface de commande sera affichable par le navigateur de n'importe quel ordi ou tablette connectée à mon réseau (famille ou copains). C'est pourquoi je parle de réseau indépendant, la connexion internet ne devenant obligatoire que si je stocke les fichiers sur un serveur externe, ce qui me rend, justement, dépendant de cette connexion et de l'hebergement. Mon système est, par essence, lié à mon domicile et donc à ma box, et n'a à être ni déplaçable en soi, ni accessible de l'extérieur. Mon but n'est pas de "surveiller" ma maison de l'extérieur, mais de la rendre plus "conviviale" de l'intérieur, si c'est jouable.

    En tout cas, ces considérations mises à part, je suis sûr que c'est possible de rapatrier ces fichiers depuis la box, mais je ne sais pas comment.

    Amicalement, naute

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    A mon avis, la vraie question a se poser est "comment est résolu l'adresse vers l'image ?".

    Je n'ai pas exactement compris ce qui marche est ce qui marche pas, mais visiblement
    • Ça fonctionne sur l'Arduino quand tu mets l'IP de la box ou quand tu mets l'adresse d'un site web externe.
    • Ça ne fonctionne pas sur l'Arduino quand tu mets un chemin vers un fichier.
    • Ça fonctionne toujours sur ton PC.

    Est-ce correct ? J'ai un doute pour l'IP de la box.

    Quand on est sur ton PC, le serveur et le client sont le même ordinateur et on peut imaginer que les accès sont plus simples. Par exemple, cette discussion de stackoverflow (http://stackoverflow.com/questions/4...-localfile-jpg) semble dire qu'un site ne peut pas accéder au file system du client et donc qu'on ne peut pas avoir une page avec comme adresse de l'image C:/dossier/image.png. Quand l'Arduino est serveur et que ton PC est client, tu tombes donc dans le cas décrit dans la discussion. Sauf que file://///Livebox/image/image.png, c'est aussi un accès au système de fichiers du client et je pense que c'est pour ça que ça ne fonctionne pas.

    En lisant quelques autres trucs sur Internet, tu semble bien tomber sur une sécurité des navigateurs qui empêchent un site distant d'accéder à tes fichiers
    Exemple ici : http://blog.chromium.org/2008/12/sec...web-pages.html
    For example, if you click a hyperlink to a local file, Safari won't render the local web page.
    La seule solution simple est de passer par l'adresse IP du serveur sur le réseau local. ll faut juste que cette adresse soit facilement configurable par l'utilisateur.

    PS : utilises-tu Firefox ? Essaye avec Chrome pour voir, il semble qu'il laisse passer ce genre de choses.

  9. #9
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Bonjour Bktero ,

    avant tout, en ce qui concerne
    PS : utilises-tu Firefox ? Essaye avec Chrome pour voir, il semble qu'il laisse passer ce genre de choses.
    j'utilise Firefox. Je n'ai pas installé Chrome, mais j'ai essayé avec IE, puisqu'il est là et apparemment inamovible, et il n'y a pas de différence. Mais de toute manière, je veux que ça fonctionne avec n'importe quel navigateur et pas uniquement avec un plus permissif que les autres. De plus, je suis fidèle et depuis le temps que je fréquente Firefox, la séparation serait atroce . ET puis bon! Je n'ai rien contre Google mais il faut bien que tout le monde vive.

    Alors voilà le contexte:
    Le couple Arduino/Shield Ethernet constitue le serveur. Je suis maitre de l'identité de ce serveur sur le réseau privé dans la mesure où je lui assigne, dans les déclarations et dans le "setup()", la clé MAC que je veux, bien qu'une valeur soit proposée avec le shield, et où je lui fixe moi-même une IP fixe en dehors de la plage DHCP de ma box, à savoir, ici entre 192.168.1.2 et 192.168.1.9 d'une part, et 192.168.1.151 et 192.168.1.255 d'autre part. J'ai fixé arbitrairement l'IP du serveur à 192.168.1.200 (et donné la valeur 0.0.0.0.0.0 à la clé MAC qui n'est pas utilisée). Ce serveur est connecté à mon réseau via un câble RJ45 relié à un adaptateur CPL. Je précise que le réseau est parfaitement standard et fonctionne parfaitement.
    Le couple ordi/navigateur (ou tablette/navigateur), câblé ou wifi constitue le client. Le client est relié au réseau selon le même procédé que le serveur.
    L'adresse IP de la box sur le réseau est 192.168.1.1 (non négociable).


    Dans l'Arduino, j'entre un programme qui, en utilisant bien sûr la bibliothèque qui va bien, est chargé, lorsque le shield reçoit une requête html valide, de renvoyer au client une page au standard html, pour qu'il puisse l'afficher, à l'aide d'instructions "print()". Pour envoyer la requête, il suffit, coté client, de saisir l'adresse IP du serveur, ici 192.168.1.200, dans la barre d'adresse du navigateur, et de valider. Rien d'exotique, la procédure est tout à fait standard. La page s'affiche dans le navigateur et dépend, bien sûr du texte (puisqu'il s'agit de texte, en fait) que je lui ai envoyé. Si ce texte représente bien une page html, tout va bien, si c'est un poème de Victor Hugo, eh bien... il s'affichera quand même correctement exception faite des caractères non anglo-saxons, puisqu'on n'a pas fixé le "charset". La gestion du réseau par le shield est transparente et fonctionne très bien.

    Jusque là, aucun problème. Si je demande le code de la page au navigateur, il me retourne exactement le texte que je lui ai fait parvenir avec mes instructions "print()", ce qui est satisfaisant et rassurant en soi .

    L'Arduino UNO, du moins l'ATmega328, ne disposant que de 2K de Sram, à moins de se contenter d'une page html affichant "Hello world!", ça risque de faire court. Je stocke donc mon texte en mémoire Flash à l'aide d'instructions "print(F())", car je dispose dans ce cas de ~32K théoriques de mémoire. Je dis théorique car une fois enlevée la mémoire occupée par le bootloader, celle occupée par les différentes librairies, et enfin celle prise par le programme utilisateur (à savoir mon œuvre d'art), on se sent déjà moins à l'aise.

    Alors stocker la page dans un fichier externe? Pour une page statique, c'est sans nul doute la solution, restant à déterminer le meilleur endroit où la stocker: serveur (microSD du shield), client (disque dur de l'ordinateur client), box (périphérique USB) ou hébergement distant, cela dépend du cahier des charges et des possibilité offertes par l'infrastructure. Mais pour une page dynamique qui doit, entre autre, satisfaire à des requêtes ajax, ce n'est pas possible (du moins à ma connaissance). La page ne peut être stockée en dur puisqu'elle comporte des variables qui sont ré-actualisables en permanence. Donc, pour la partie html du sketch, il reste en mémoire flash et les variables qu'il utilise sont stockées, évidemment, en Sram, ce qui impose de revenir à l'instruction "print()" pour ce qui les concerne, la mémoire flash ne pouvant pas héberger de variables.

    Je peux, par contre, parfaitement utiliser, en plus du code javascript/ajax inclus dans ma page html, du code javascript contenu dans des fichiers externes, et je n'ai d'ailleurs pas le choix en raison du manque de mémoire (flash + Sram).

    Pour charger le fichier "code.js", s'il est dans le même dossier que le fichier html qui l'appelle, j'écrirai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="code.js"></script>
    Dans tous les autres cas, pour un fichier "local" j'écrirai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="chemin/code.js"></script>
    où chemin peut être un chemin relatif ou absolu, et pour un fichier distant, chez "hebergeur.fr", par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="http://hebergeur.fr/chemin/code.js"></script>
    Pour reprendre l'exemple évoqué en début de post, avec le fichier "toto.html", dont le seul but est de charger une image et de l'afficher, ce qui permet de visualiser directement le résultat, ces trois écritures fonctionnent parfaitement si j'exécute ce fichier directement depuis mon espace adressable local, y compris la Livebox. C'est à dire que, quelque soit le poste de mon réseau, y compris la Livebox, sur lequel j'ai copié mon fichier "toto.html", et quelque soit le poste, y compris la Livebox, sur lequel j'ai copié au préalable et où je vais chercher le fichier "image.png" (en adaptant bien sur les "src=..." en conséquence), la page s'affiche correctement. J'en conclus logiquement, du moins il me semble, que pour le navigateur, la Livebox, connue sur le réseau par son IP = 192.168.1.1, n'est pas considérée comme un site distant, pas plus que les autres postes, et que, par voie de conséquence, mon serveur 192.168.1.200 n'a aucune raison d'être considéré, lui non plus, comme un site distant.

    Par contre, et c'est l'objet de ce post, si la page affichée fait suite à une requête client adressée au serveur, elle ne s'affiche correctement (c'est à dire que le fichier "image.png" n'est trouvé) que s'il se trouve hors de l'espace adressable local. Et je le répète, le code est strictement le même, ce qui est facile à vérifier en l'affichant depuis la page du navigateur.

    Il faut souligner que mon raisonnement, s'il me parait logique, ne l'est pas forcément pour tout le monde et je me plante peut-être complètement, n'étant pas spécialiste réseau, n'étant spécialiste en rien, d'ailleurs .
    Je ne sais pas si j'ai été très clair ni si j'ai correctement répondu à tes interrogations, mais en tout cas, je te remercie pour ton intervention.

    Cordialement, naute

    PS: J'ai aussi essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src="http://192.168.1.1/image/image.png"
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src="ftp://192.168.1.1/image/image.png"

  10. #10
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Par contre, et c'est l'objet de ce post, si la page affichée fait suite à une requête client adressée au serveur, elle ne s'affiche correctement (c'est à dire que le fichier "image.png" n'est trouvé) que s'il se trouve hors de l'espace adressable local. Et je le répète, le code est strictement le même, ce qui est facile à vérifier en l'affichant depuis la page du navigateur.
    Je ne pense pas avoir été très clair
    Quand, depuis ton navigateur, tu te connectes sur l'arduino (un serveur), celui-ci te renvoie la page HTML, mais d'après le code, il doit également aller chercher une autre information : ton image qui se trouve sur la live box donc ton arduino doit aussi se connecter via une adresse IP à ta box puis à ta clef usb pour récupérer l'image. C'ets pour ça que je t'ai proposé de taper dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://192.168.1.1/image/image.png
    Maintenant quand tu sauvegardes la page sur ton disque, puis que tu la charges sur ton navigateur tu fais cette opération :
    - ton code HTML est chargé depuis le PC ;
    - tu te connectes à ta box qui se charge de te renvoyer l'image.
    Dans ce second cas tu ne passes pas par ton serveur Arduino.

    Donc même si ton code HTML "est le même", les requêtes exécutées sont différentes

  11. #11
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    Pourquoi est-ce que l'Arduino se connecterait à la livebox pour charger l'image ? Ce n'est pas le navigateur qui le fait directement ?

  12. #12
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Pourquoi est-ce que l'Arduino se connecterait à la livebox pour charger l'image ? Ce n'est pas le navigateur qui le fait directement ?
    justement..... je commence à douter de ce que j'ai écrit

  13. #13
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Pourquoi est-ce que l'Arduino se connecterait à la livebox pour charger l'image ? Ce n'est pas le navigateur qui le fait directement ?
    Effectivement, le réseau existe indépendamment de la Livebox dont la fonction "n'est que" d'assurer son rôle de passerelle vers l'internet (bon, oui, de serveur DHCP aussi et deux ou trois autres "bricoles" ). En dehors de ça, elle n'est qu'un élément du réseau, comme un autre, avec son adresse IP. L'Arduino ne "connait" pas la Livebox et il n'en a pas besoin. Il envoie la page demandée au client qui la demande, suivant le protocole standard, sans passer par la Livebox et c'est normalement depuis le client que s'effectue le chargement des fichiers voulus.

    D'un autre coté, si l'Arduino ne connait pas la Livebox, la Livebox ne connait pas non plus l'Arduino, probablement en raison de son IP fixée en dehors de la plage d'adressage DHCP. C'est bien embêtant car je ne peux apparemment pas utiliser le DNS pour affecter des noms plus explicites aux différents serveurs. Et laisser la Livebox attribuer une adresse IP dans la zone DHCP consomme plusieurs Kio de mémoire flash dans l'Arduino ce qui ne m'arrange pas.

    Citation Envoyé par Auteur
    justement..... je commence à douter de ce que j'ai écrit
    Ce n'est pas un problème: je prend toutes les suggestions dans la mesure où je n'arrive pas à régler mon problème. Même une erreur (si c'est le cas ?) peut déboucher sur une bonne idée .

    S'il n'y a pas de solution, j'en viendrai probablement à la carte microSD, mais ce n'est, en soi, pas satisfaisant car il en faut une par serveur utilisant les fichiers en question. Ce n'est pas spécialement pour une question de coût (quoique les 2 et 4 Gio, le shield ne gère pas plus, commencent à être difficiles à trouver et donc augmentent, comme d'hab.), mais ce n'est pas très élégant comparé à un stockage unique centralisé.

  14. #14
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    L'arduino est connecté à la livebox donc elle est forcément au courant de sa présence Va dans la partie administration de la livebox et cherche les pages montrant la topologie du réseau, tu verras sans doute ton Arduino.

    Je vais reposer une nouvelle fois la question car je n'ai pas l'impression d'avoir eu la réponse clairement : si l'arduino sert une page contenant l'adresse ip de la livebox, ton navigateur n'arrive pas à l'afficher ? En revanche, cela fonctionne si c'est ton PC qui sert la page ?

  15. #15
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Citation Envoyé par Bktero Voir le message
    L'arduino est connecté à la livebox donc elle est forcément au courant de sa présence
    Je ne suis pas sûr-sûr que ça soit exact. L'Arduino est connecté au réseau, comme la Livebox. Point. Quand je déconnecte la Livebox du réseau, c'est à dire en la débranchant de l'adaptateur CPL, le réseau et les transactions fonctionnent de la même façon, et c'est heureux. Je n'ai simplement plus de connexion internet. Il est possible que la Livebox soit aveugle en ce qui concerne les adresses IP se trouvant en dehors de sa plage DHCP adressable. Je ne sais pas.


    Citation Envoyé par Bktero Voir le message
    Va dans la partie administration de la livebox et cherche les pages montrant la topologie du réseau, tu verras sans doute ton Arduino.
    Je suppose que tu veux parler de ce qui se trouve dans "Assistance>>Vue détaillée du réseau local", et qui affiche l'arborescence des connexions. Je confirme que mon Arduino brille par son absence. Au fait, ma Livebox est une Sagemcom v3, ça peut être utile à savoir.

    Citation Envoyé par Bktero Voir le message
    Je vais reposer une nouvelle fois la question car je n'ai pas l'impression d'avoir eu la réponse clairement : si l'arduino sert une page contenant l'adresse ip de la livebox, ton navigateur n'arrive pas à l'afficher ? En revanche, cela fonctionne si c'est ton PC qui sert la page ?
    Par contre, je ne comprend pas le sens de la phrase que j'ai surligné .

  16. #16
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Après une bonne nuit de sommeil

    Il y a en gros deux façons d'afficher une page html dans un navigateur: soit cliquer sur le fichier html qui contient son code, si ce fichier est local, soit entrer son adresse dans le navigateur, ce qui fonctionnera normalement dans tous les cas, que ce fichier soit local ou pas.

    Dans mon exemple, deux fichier distincts sont en jeux: toto.html, qui contient le code de la page à afficher, et image.png qui contient une image que le fichier toto.html a la charge d'afficher quand on l'invoque.

    Le fichier toto.html peut, pour faire simple, soit se trouver sur mon disque dur , soit n'exister que "virtuellement", sur mon serveur Arduino. Je dis virtuellement, car tant que le client ne s'est pas connecté au serveur, ce n'est pas un fichier html, comme on peut invoquer un fichier "index.html" quand on se connecte à un site distant, par exemple, mais doit être considéré comme un fichier PHP générant une page html. L'Arduino (plus le shield ethernet, mais c'est implicite) doit être vu globalement comme un serveur utilisant le C et les librairies spécifiques au système Arduino à la place du PHP pour générer la page.

    Le fichier image.png peut se trouver, toujours pour être réducteur, soit sur mon disque dur, soit sur un site distant (hébergeur), soit sur un autre poste de mon réseau, soit sur ma Livebox.

    Pour bien préciser les différents élément, j'ai donc:
    1. Le fichier toto.html sur mon disque dur: accès par un clic de la souris
    2. Le code destiné à créer l'équivalent de ce fichier en mémoire flash dans l'Arduino: accès avec l'adresse IP 192.168.1.200 entrée dans le navigateur
    3. Un fichier image.png sur mon disque dur: adresse = /////bureau/d/image.png
    4. Un fichier image.png chez mon hébergeur: adresse = http://hebergeur.fr/image.png
    5. Un fichier image.png sur un autre poste de mon réseau = /////atelier/d/image.png
    6. Un fichier image.png dur une clé USB connectée à ma Livebox = /////livebox/image/image.png


    Il y a donc huit possibilités, à savoir un mix des cas 1et 2 avec les cas 3, 4, 5 et 6.

    L'accès aux quatre localisations envisagées du fichier image.png se fera de la manière classique suivante, respectivement au cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Cas 3:    <img scr="/////bureau/d/image.png" alt="Mais l'image n'est pas téléchargée depuis la Livebox" />
    Cas 4:    <img scr="http://hebergeur.fr/image.png" alt="Mais l'image n'est pas téléchargée depuis la Livebox" />
    Cas 5:    <img scr="/////atelier/d/image.png" alt="Mais l'image n'est pas téléchargée depuis la Livebox" />
    Cas 6:    <img scr="/////livebox/image/image.png" alt="Mais l'image n'est pas téléchargée depuis la Livebox" />
    L'attribut "alt" affiche le texte passé en paramètre si l'image n'est pas trouvée.

    Quand je clique sur le fichier toto.html qui se trouve sur mon disque dur, l'affichage de la page se passe bien pour les quatre adresses (cas 1+3 , 1+4, 1+5, 1+6).

    Quand j'invoque la page depuis l'Arduino, c'est à dire en entrant 192.168.1.200 dans le navigateur, l'affichage de la page se passe bien pour les cas 2+3, 2+4 et 2+5, mais pour le cas 2+6, la page affiche bien le texte mais ne charge pas l'image. Pourquoi? C'est le sujet de ce post .

    Notes:
    • "bureau" et "atelier" sont les nom des deux postes sur le réseau, comme "livebox" est le nom de la Livebox sur le réseau
    • L'écriture "/////bureau/d/image.png" est équivalente à "file://///bureau/d/image.png"
    • Quand le fichier html et le fichier appelé se trouvent sur le même poste (cas 1+3), on n'a pas besoin de préciser l'adresse dans le réseau, et on peut écrire "d:/image.png", ou utiliser une adresse relative
    • L'utilisation du cas 1 démontre que toutes les adresses sont valides
    • Les adresses "/////atelier/d/image.png" et "/////livebox/image/image.png" sont techniquement identiques: "atelier" et "livebox" sont les noms de deux postes du réseau, "d" et "image" sont les noms des deux supports de stockage de ces deux postes


    Voilà. Je ne sais pas si j'ai été clair mais je vais avoir du mal à faire mieux.

    Cordialement, naute

  17. #17
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 248
    Billets dans le blog
    48
    Par défaut
    Bonjour,

    Peut-être qu'une analyse des échanges de trames avec Wireshark donnera des informations supplémentaires. Il y a peut-être quelque chose que l'Arduino fait mal au niveau du protocole HTTP...

  18. #18
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Bonjour,

    Citation Envoyé par f-leb Voir le message
    Peut-être qu'une analyse des échanges de trames avec Wireshark donnera des informations supplémentaires. Il y a peut-être quelque chose que l'Arduino fait mal au niveau du protocole HTTP...
    Je crains que, si c'est le cas, on ne sorte "légèrement" de mon "niveau de compétence". L'utilisation de Wireshark semble nécessiter des connaissances que je n'ai pas et, de toute manière, en cas d'erreur avérée dans le protocole, c'est, je suppose, la librairie Ethernet qu'il faudrait modifier et je ne serai pas à la hauteur. J'espère que tu te trompes .

  19. #19
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Je viens de brancher une clef usb sur ma livebox et je n'arrive même à accéder à son contenu depuis l'explorateur de fichiers Windows ou en passant par Firefox via le lien //livebox/

    En plus, je me demande aussi si tu ne dois pas autoriser le partage des fichiers.

  20. #20
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Je viens de brancher une clef usb sur ma livebox et je n'arrive même à accéder à son contenu depuis l'explorateur de fichiers Windows ou en passant par Firefox via le lien //livebox/
    Sur ma Livebox, j'ai deux prises USB: une à l'arrière et une en façade. L'accès à la clé USB ne fonctionne qu'avec la prise en façade. L'autre sert pour connecter une imprimante. Si ça peut t'être utile. De plus, la Livebox n'apparait pas immédiatement sur le réseau. Cela peut être assez long, mais elle finit toujours par arriver. Quand elle arrive, je l'ouvre et ma clé est là avec ses dossiers. C'est quand même un peu gênant cette gestion aléatoire, surtout sur une infrastructure comme la mienne qui est hyper standard. Quand à l'affichage de la clé sur l'arborescence du réseau fourni par le gestionnaire de la box, ainsi que le matériel connecté ou non, c'est assez farfelu. J'ai même un tas de matériels inconnus nommés "pc-25, pc-32 etc... (toujours pc- suivi d'un chiffre) qui n'ont pas d'adresse IP et qui ne correspondent à rien de précis.

Discussions similaires

  1. probléme accés a distance a un appareil branché sur une Livebox v3
    Par osramini dans le forum Dépannage et Assistance
    Réponses: 6
    Dernier message: 04/10/2015, 18h21
  2. Encore un petit problème de transaction
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/03/2005, 16h13
  3. Réponses: 2
    Dernier message: 21/10/2004, 15h08
  4. Problèmes de compatibilité entre sdk 9.0c et geforce 2/4
    Par Francky033 dans le forum DirectX
    Réponses: 2
    Dernier message: 01/10/2004, 14h22

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