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

 

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : août 2015
    Messages : 16
    Points : 5
    Points
    5

    Par défaut Problème Webserveur avec fichier HTML stocké sur carte SD

    Bonjour à toutes et à tous.
    Un sujet maintes fois traité mais que je ne comprends pas suffisamment. Je sais:
    - créer une page HTML , la stocké sur mon disque dur, la lire avec mon navigateur ( ouai , je sais, c'est balèze)
    - Utiliser mon arduino avec un shield ethernet et créer une page html dessus ( petite page html) et la lire depuis mon navigateur en réseau local
    - Lire le contenu d'un fichier text sur ma CArte SD et l'afficher sur le moniteur série

    mais fusionner tout ça , je ne sais pas. Alors oui, je récupérais des programmes existants mais je ne les comprends pas et il y a toujours des trucs en plus dans la programme qui m'échappe.
    Voici une ébauche de programme avec le plus de commentaire possible parce que ..j'aime bien comprendre et ...je n'ai pas beaucoup de mémoire

    Merci pour votre aide... et ne soyez pas avare en explication même si certaines choses vous paraissent basiques
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    /*
      Web Server avec récupération de la page html sur la carte SD
    14 Avril 2018
     
     */
     
    #include <SPI.h>
    #include <Ethernet.h>
    #include <SD.h>
     
    File myFile;// je créée un fichier myFile
    byte mac[] = {//l'adresse MAC de mon shield ethernet
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    };
    IPAddress ip(192, 168, 0, 177);   //L'adresseIP
     
     
    EthernetServer server(80); //le port utilisé par mon serveur (80 pour le HTML)
     
    void setup() {
     
      Serial.begin(9600);// configuration du port série pour la communication de l'Arduino avec le PC
      while (!Serial) {
        ;
      }
     
     
      // On démarre la connection au serveur
      Ethernet.begin(mac, ip);
      server.begin();
      Serial.print("server is at ");
      Serial.println(Ethernet.localIP());//on ecrit l'adresse IP sur le moniteur serie
     
     
      //On teste la connexion à la carte SD
    Serial.print("Initializing SD card...");
      if (!SD.begin(4)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");  
    }
     
     
    void loop() {
      // on ecoute le client
      EthernetClient client = server.available();
      if (client) {
        Serial.println("J'ai reçu la requette: tu es un nouveau client");
     
        boolean currentLineIsBlank = true;//la reqeutte se finit par une ligne vide
     
        while (client.connected()) { tant que le client est connecté
          if (client.available()) { //si le client envoie des octets
            char c = client.read(); //je les stocke dans ma variable de caractères c
            Serial.write(c);//et je l'écris dans mon moniteur série pour vérifier
                    if (c == '\n' && currentLineIsBlank) { //si j'arrive à un caractère vide
              /*donc fin de ma requette, je peux envoyer ma feuille HTML que je dois aller chercher sur ma carte SD*/    
             //j'ouvre monfichier SD?? mais après je suis perdu
             //par exemple  client.write
    et ma page HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <meta charset="utf-8" />
            <title>Mon premier site web</title>
        </head>
         <body>
    	 <p> Bonjour et bienvenue sur mon premier site web ! 
        Je vous demande d'être indulgent car je viens tout juste de commencer.
     
        </p>
         </body>
    </html>

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : août 2015
    Messages : 16
    Points : 5
    Points
    5

    Par défaut Ma question n'est pas claire ou trop vague???

    par exemple la ligne:

    client.println("<!DOCTYPE HTML>");

    Il faut la mettre où et pourquoi?
    sur le fichier HTML de la carte SD (pour DOCTYPE html) ou dans le programme arduino
    A priori dans le programme arduino. Mais pourquoi ?
    Merci...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : août 2015
    Messages : 16
    Points : 5
    Points
    5

    Par défaut j'ai tenté un truc mais cela ne fonctionne pas

    ...avec le programmme suivant mais je n'ai pas ma page qui s'affiche sur le navigateur web ( le ping fonctionne
    Elle est où la boulette??? enfin, il doit y avoir toute une colonnie de boulette
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    /*
      Web Server avec récupération de la page html sur la carte SD
      14 Avril 2018
     
    */
     
    #include <SPI.h>
    #include <Ethernet.h>
    #include <SD.h>
     
    File myFile;// je créée un fichier myFile
    byte mac[] = {//l'adresse MAC de mon shield ethernet
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    };
    IPAddress ip(192, 168, 0, 177);   //L'adresseIP
     
     
    EthernetServer server(80); //le port utilisé par mon serveur (80 pour le HTML)
     
    void setup() {
     
      Serial.begin(9600);// configuration du port série pour la communication de l'Arduino avec le PC
      while (!Serial) {
        ;
      }
     
     
      // On démarre la connection au serveur
      Ethernet.begin(mac, ip);
      server.begin();
      Serial.print("server is at ");
      Serial.println(Ethernet.localIP());//on ecrit l'adresse IP sur le moniteur serie
     
     
      //On teste la connexion à la carte SD
      Serial.print("Initializing SD card...");
      if (!SD.begin(4)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
    }
     
     
    void loop() {
      // on ecoute le client
      EthernetClient client = server.available();
      if (client) {
        Serial.println("J'ai reçu la requette: tu es un nouveau client");
     
        boolean currentLineIsBlank = true;//la reqeutte se finit par une ligne vide
     
        while (client.connected()) {
    //      tant que le client est connecté
          if (client.available()) { //si le client envoie des octets
            char c = client.read(); //je les stocke dans ma variable de caractères c
     
            if (c == '\n' && currentLineIsBlank) { //si j'arrive à un caractère vide
              /*donc fin de ma requette, je peux envoyer ma feuille HTML que je dois aller chercher sur ma carte SD*/
              //j'ouvre monfichier SD?? mais après je suis perdu
              //par exemple  client.write
     
              myFile = SD.open("index.html", FILE_READ);//je mets mon fichier html dans myFile
              client.println("HTTP/1.1 200 OK");//Je ne sais pas pourquoi je mets ça
              client.println("Content-Type: text/html");//ça non plus
              client.print (myFile);//Je demande à mon client de lire le fichier Html de la carte SD
              Serial.println("j'essaie de lire le html");//Pour verifier que  le programme arrive jusque là
            }
          }
        }
      }
      myFile.close();//Je ferme la lecture du fichier sur la carte SD
    }

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 9 950
    Points : 41 151
    Points
    41 151
    Billets dans le blog
    9

    Par défaut

    Bonsoir,

    Pour retourner la page web au client depuis la carte SD, essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    myFile = SD.open("index.html");
    if (myFile) {
        while (myFile.available()) {
           client.write(myFile.read());
        }
        myFile.close();
    }

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : août 2015
    Messages : 16
    Points : 5
    Points
    5

    Par défaut merci mais...

    Cela ne fonctionne pas mais je commence à avoir un doute sur mon html
    Dosi je mettre ces lignes dans le programme arduino:


    client.println("HTTP/1.1 200 OK");//Je ne sais pas pourquoi je mets ça
    client.println("Content-Type: text/html");//ça non plus

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 9 950
    Points : 41 151
    Points
    41 151
    Billets dans le blog
    9

    Par défaut

    oui, c'est un entête HTTP standard à retourner (version HTTP avec code=200 et type de contenu=texte) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
     
    myFile = SD.open("index.html");
    if (myFile) {
        while (myFile.available()) {
           client.write(myFile.read());
        }
        myFile.close();
    }
    Il me semble que le client.println() de la ligne 3 est indispensable, car requis dans le protocole HTTP.

Discussions similaires

  1. Réponses: 18
    Dernier message: 04/04/2007, 14h34
  2. Réponses: 4
    Dernier message: 03/05/2006, 15h30
  3. Réponses: 5
    Dernier message: 30/11/2005, 09h48
  4. Problème de gravure de HTML/JS sur un CDROM
    Par TekP@f dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/10/2005, 18h05

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