Est-ce normal?

Bonjour, ou bonsoir,

Voila je suis en 3ème année de cycle d’ingénieur, et j’ai un projet multimédia qui consiste en gros à afficher une page web sur un pc en fonction de la valeur d’une entrée analogique seulement je doit faire ceci sans installer de logiciel sur le pc et avec une arduino uno + shield ethernet .

donc pour la gestion de l’entrée analogique tout va bien, pour afficher une page html cale va bien aussi mais sa se corse quand je veut afficher une page html stockée sur la sd du chield car le navigateur affiche soit une série de chiffres soit un code bizarre.

Pouvez-vous m’aider à résoudre ce problème?

Je précise que j’ai bien réaliser des recherche avant et que je ne trouve pas de solution concluante.
enfin voici mon code arduino :

/* Ce script a été créé par des étudiants de polytech Orleans en 3A option EEO année 2013/2014.
Il permet grâce à une Maquette de lune d'affiché des point important de cette dernière. Grâce à une Prise jack qui sert de stylet, 
Vous pouvez affiché sur une page web des information importante.

Auteur: BOULLIER Thibault, BADEROT Julien, COSTES Sigolene
Année : 2013/2014
Version: V0.1
Option: EEO

*/

// appelle des bibliotèque nécessaire
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

//déclaration de l'adresse MAC ainsi que de l'adresse IP
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(169, 254, 73, 50);

//déclaration des varaiable importante
const byte stylet = A0;
const byte sd = 10;
float val = 0;
const int chipSelect = 4;

//initialisation de la connection internet
EthernetServer server(80);

void setup()
{
  //déclaration des différent Pin
  pinMode (stylet, INPUT);
  pinMode (sd, OUTPUT);
  analogReference(DEFAULT);
  
  //début des différente connection (Serial et Ethernet)
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");
 
}

void loop()
{
  //lecture du stylet
  val = analogRead(stylet);
  const float val_reel = (val*5/1024); // convertion de l'entrée analogique
  
  EthernetClient client = server.available(); //attente d'une connection ethernet
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close"); 
	  client.println("Refresh: 2");  
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");

  if (val_reel <= 0.71 && val_reel > 0)
  {
     Serial.println ("Point N° 1");
    File dataFile = SD.open("/P01.htm");
    if (dataFile) {
    while (dataFile.available()) {
      client.print((char)dataFile.read());
      Serial.println(dataFile.read());
    }
    dataFile.close();
  }  
  else {
    Serial.println("error opening datalog.txt");
    client.print("Page Introuvable");
  } 
  }
  else if (val_reel > 0.71 && val_reel <= 1.42)
  {
     Serial.println ("Point N° 2");
     client.println("Voici le point N° 2");
  }
  else if (val_reel > 1.41 && val_reel <= 2.13)
  {
     Serial.println ("Point N° 3");
     client.println("Voici le point N°3");
  }
  else if (val_reel > 2.13 && val_reel <= 2.84)
  {
     Serial.println ("Point N° 4");
     client.println("Voici le point N°4");
  }
  else if (val_reel > 2.84 && val_reel <= 3.55)
  {
     Serial.println ("Point N° 5");
     client.println("Voici le point N°5");
  }
  else if (val_reel > 3.55 && val_reel <= 4.26)
  {
     Serial.println ("Point N° 6");
     client.println("Voici le point N°6");
  }
  else if (val_reel > 4.26 )
  {
     Serial.println ("Point N° 7");
     client.println("Voici le point N°7");
  }
  else if (val_reel == 0)
  {
     Serial.println ("Acceuil");
     client.println("Connectez le Stylet dans un point pour afficher des informations");
  }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1000);
    client.stop();
    Serial.println("client disonnected");
  }
}

et voici ce que ça m’affiche pour le premier point :

ï¿ plo1 bd tl= it:90x akrudclr lc;> <1sye"ipa:iln-lc;vria-lg:mdl;clr ht;mri:1p;>u 's-lpsà u aLn?/1 igsye"wdh 2p;hih:10x ipa:iln-lc;vria-lg:mdl;mri:2p; r=iae/uegf l=Ln"tte"ue/ /edr scinsye"ipa:iln-lc;vria-lg:mdl;> atce h tl=clr ht;tx-lg:cne;>rme a elhmesrl ue < tl=clr ht;mri-et 0x"&mp&mp neft 's e1jilt16qe2dsatoatsd amsinAol 1/tog,Bz lrne elAmtog nps©pu apei¨efi e id u aLn. L Ãrueetd amsine npriuirlspeir a u aLn im© trtasi ndrc a n aÃr iÃocnttetu ©Ãnmn ln©ar uv u ot apaÃt a e etie emlin epronsht 'ndsatoatssrl ue pÃsaorpat©l rpaxaÃrcis /ril>

Merci d’avance pour votre aide.

Cordialement,

Premierement dans ta boucle de recopie tu copies 1 caractere sur 2 vers la console série et l'autre sur le client.

Deuzio, je pense que ton fichier html est en unicode, ce qui ne plait pas a la console série.

Troizio, cherche "webduino", une lib pratique

Bonsoir,

Merci d'avoir répondu très vite et efficacement, j'ai donc enlever ma ligne du Serial.print((char)dataFile.read()); Ensuite je ne sait pas si mon code est en UNICODE ou quoique se soit d'autre et je ne sait pas ni comment le vérifié ni sous quelle code je doit le mettre. Enfin cela fonctionne, mais avec quand même un petit soucis je n'arrive pas a avoir les images qui sont pourtant stocké à la racine de la SD comme mes page htm et le lien dans mes page htm sont de cette forme "src='PDE.jpg'" . Pour ce qui est de la librairie webduino j'ai par le passe essayé de réussir avec sur un autre projet mais sans réussite je ne comprend pas comment elle fonctionne et j'ai dû mal a trouver une bonne documentation de toute ces fonction avec les explications. Donc si vous auriez une bonne doc ou un bon lien qui m'expliquerais en détail les fonction de cette librairie je vous en remercierais.

Cordialement,

P.S: encore merci pour le coup de main

bonjour,
en html c’est pas, sauf si tu n’as pas tout mis

"src='PDE.jpg'"

mais

<img src="PDE.jpg" />

oui c’est bien mais je n’ais pas tout mis. car à vrai dire cette balise est beaucoup plus longue car pour des raisons vitesse de chargement j’ai préféré mettre mon code css dans mon code htm

Ton serveur web doit aussi fournir les images Pour l'instant tu n'as fournit que la page html Le navigateur te les demandes mais ton code ne traite pas ces demandes Webduino

ok
et comme dit plus haut je ne m’en sort pas avec webduino car je n’arrive pas a mettre la main sur un document décrivant toute les fonction de cette librairie. Auriez-vous des informations la dessus ? et sinon est-ce que c’est possible avec le html d’aller cherche les images sur le disque dur du pc ? si oui est-ce aussi simple que sa? : <img src="C:/PDE/PDE.jpg">

Merci encore de votre aide.(surtout à cette heure-ci :slight_smile: )

nop
faut une url

<img src="http://192.168.1.xx/PDE/PDE.jpg">

petit problème pour le projet, cela doit fonctionner sans un acces internet. pour que sa soit autonome.

http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-web-server-image/

Bonjour,

Plus simple que Webduino quand il s'agit d'avoir des fichiers embarqués sur carte SD : https://github.com/ovidiucp/TinyWebServer

Exemple tout prêt : https://github.com/ovidiucp/TinyWebServer/blob/master/examples/WebServerSD/WebServerSD.ino

Je suis surement totalement débile :( mais je ne comprend toujours quelle sont les fonctions importantes ? car avec l'exemple de B@tto, j'ai compris qu'il fallait que je gère l'affichage de l'image avec les requêtes HTTP mais avec la librairie TinyWebServer alors là... et bien je suis paumé il y a trop de chose en même temps avec aucune explication claires qui explique chaque point.

Mais en tout cas merci de m'aider.

colben: Je suis surement totalement débile :( mais je ne comprend toujours quelle sont les fonctions importantes ? car avec l'exemple de B@tto, j'ai compris qu'il fallait que je gère l'affichage de l'image avec les requêtes HTTP mais avec la librairie TinyWebServer alors là... et bien je suis paumé il y a trop de chose en même temps avec aucune explication claires qui explique chaque point.

Mais en tout cas merci de m'aider.

Tu as regardé là: https://github.com/ovidiucp/TinyWebServer

Colben

Juste pour que tout soit clair, je vais repréciser comment ca marche entre un navigateur Web et un serveur.
Tout passe par une requête HTTP et une réponse approprié.

A la base ton navigateur envoie une demande GET sur / que le serveur interprete comme une requete sur la page d’accueil par défaut, généralement /index.html. Donc le serveur envoi index.html au navigateur
Le navigateur analyse le fichier reçu et trouve des référence à d’autres éléments tel que des images <img src='toto.gif"> donc le navigateur va envoyer une nouvelle requête au serveur : GET /toto.gif. Ce qui veut dire que le serveur web doit être capable d’identifier quelle ressource est demandée par le navigateur pour envoyer le bon fichier.

C’est ce que ne fait pas ton code initiale qui ne cherche pas à analyser la commande reçue du client.

Webduino permet de le faire.
je ne connait pas TinyWebServer.

colben:
Je suis surement totalement débile :frowning: mais je ne comprend toujours quelle sont les fonctions importantes ? car avec l’exemple de B@tto, j’ai compris qu’il fallait que je gère l’affichage de l’image avec les requêtes HTTP mais avec la librairie TinyWebServer alors là… et bien je suis paumé il y a trop de chose en même temps avec aucune explication claires qui explique chaque point.

Mais en tout cas merci de m’aider.

bonjour
pas tres incitatif le titre de ton topic “est ce normal” :grin:
Regerde ici pour tinywebserver

lorsque je m’y suis intéréssé , je me suis rendu compte qu’il fallait ajouter des type mime dans la lib

Bonjour à tous,

Après avoir lu vos conseille j’ai voulu les suivre tout d’abord avec la librairie webduino, puis avec la tinywebserver. Et après maint essais des exemple seul tinywebserver m’as satisfait. Seulement j’ai maintenant essayer de mélanger mes deux codes et la le drame, plus rien ne fonctionnait comme prévue =( je n’arrive toujours pas à comprendre comment fonctionne cette librairie et les exemples compris avec et par conséquent je n’arrive pas à en faire ce que je veut.

Pour plus d’explication, je travail maintenant avec tinywebserver, j’ai essayer les exemple compris avec, mon code personnelle arduino sans la librairie tinywebserver fonctionne et l’exemple aussi et dès que j’essaye de mélanger les deux ça ne fonctionne pas. Pourriez-vous m’aider ? j’aimerais en fonction d’une valeur sur l’entrée analogique affiché une page html (ça j’y arrive) mais avec les images (ça j’y arrive pas du tout) le tout stocké sur la carte sd et que sa recharge toute les 5 sec de façons à ce que l’affichage change de lui-même.

Cordialement,
Un grand merci a toutes vos aides.