[RESOLU] Besoin d'aide pour lire Fichier HTML

Bonjour à tous

Je dédute dans la prgrammation avec l'Arduino ( Mega + Ethernet ) et avec la programmation en général.

J'ai trouvé beaucoup d'informations qui m'ont permis d'avancer dans mon projet mais la je n'arrive pas
à trouver l'info qu'il me faut sur ce forum et sur internet.

Je vous explique brievement mon programme ainsi que mon problème.

  • Le but le mon programme est d'afficher sur un navigateur telle ou telle page HTML "fichier_x.html" en fonction de certaines conditions
    (pour moi cela ce fait avec les pins en INPUT ).

J'ai créé mes fichiers .html qui marche sans problème sur mon navigateur mais impossible de le faire afficher depuis mon Arduino.
Mes fichiers sont sur un serveur, l'adresse des différents .html sur ce serveur est : http//:192.1.1.xxx/fichier_x.html.

J'arrive a afficher une image.gif avec la commande :

client.print("<img src=http://192.1.1.xxx/image.gif>");

mais donc ne trouve pas la commande pour afficher un fichier HTML.

Je vous met la partie du code qui marche pour l'image.gif.

if (buttonState4 == HIGH) {
  if (buttonState1 == HIGH && buttonState2 == LOW && buttonState3 == LOW){    
   EthernetClient client = serveur.available();
     if (client) { 
      while (client.connected()) {
       if (client.available()) { 
         char c = client.read(); 
   }
      else { 
           client.println("HTTP/1.1 200 OK");
           client.println("Content-Type: text/html");
           client.println();
           client.println("<!DOCTYPE HTML>");
           client.println("<html>");
           client.print("<img src=http://192.1.1.113/image.gif>");
      break;
       }
     }
    delay(1);
   client.stop();
    
}}

Je pense qu'il me manque juste la bonne commade a mettre dans client.print() mais j'ai essayé
beaucoup de chose et aucune ne marche.

Merci d'avance pour votre aide

Benoit

C'est du HTML que tu envois par le client.print. Met un lien HTML dans le client.print . C'est peut être une solution???

J'ai déja essayé plusieur lien dont le plus simple

client.print("<http//:192.1.1.xxx/fichier.html>")

mais cela ne fonctionne pas.

J'en ai cherché d'autre mais aucun ne fonctionne, il se peut qu'il ne me manque pas grand chose dans mon code.

C'est du HTML que tu envois par le client.print. Met un lien HTML dans le client.print . C'est peut être une solution???

Cette solution affichera le lien seulement.
je pense que pour faire afficher une page html sur le client 'il faut mettre l'URL dans un FRAME.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<HTML>
<HEAD>
<TITLE>A simple frameset document</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
  <FRAMESET rows="100, 200">
      <FRAME src="contents_of_frame1.html">
      <FRAME src="contents_of_frame2.gif">
  </FRAMESET>
  <FRAME src="contents_of_frame3.html">
</FRAMESET>
</HTML>

(extrait de HTML 4.0 specification)

Bonjour, pour un code source HTML plus simple, je mettrais

<html>
<head>
<title>Titre</title>
</head>
<body>
<iframe src="http//:192.1.1.xxx/fichier.html" height="99%" width="100%"></iframe>
</body>
</html>

/!\ : Ne pas mettre 100% dans height, sinon un ascenseur apparaitra.

Merci beaucoup,

j'assaye les deux codes demain et je vous tiens au courant.

Par contre avec les " comment transcrire en langage Arduino car dans client.print() plusieurs " ne passe pas ?

mon code serai par exemple:

client.print("<html>")
client.print("<head>")
client.print("<title>Titre</title>")
client.print("<body>")
client.print("<iframe src=http//:192.1.1.xxx/fichier.html height=99% width=100%></iframe>")
client.print("</body>")
client.print("</html>")

?

Benoit

Il faut mettre " à la place de ".
Le \ est chez mac Maj. + alt + / et chez Window se fait Alt Gr + 8 (sans Maj.).
Je ne suis pas sûr, n'ayant pas de clavier PC sous la main.

numero_744:
Il faut mettre " à la place de ".
Le \ est chez mac Maj. + alt + / et chez Window se fait Alt Gr + 8 (sans Maj.).
Je ne suis pas sûr, n'ayant pas de clavier PC sous la main.

merci en remplaçant comme tu l'as dis ça prend la commande.

<html>
<head>
<title>Titre</title>
</head>
<body>
<iframe src="\http//:192.1.1.xxx/fichier.html\" height=\"99%\" width=\"100%\"></iframe>
</body>
</html>

Je n'arrvive pas a faire fonctionner ce code , il m'affiche des fenetres vides les unes dans les autres sans afficher
mon fichier html.

J'ai essayé les 2 codes donné précédement et cela fait quasiment la même chose.

Quand je tape directement l'adresse de mon fichier html, il s'affiche correctement dans le navigateur.

un iframe est juste un contenant qui affiche l'URL passée en argument. Après cela dépend aussi de ce que tu fais dans la page appelée.

fdufnews:
un iframe est juste un contenant qui affiche l'URL passée en argument. Après cela dépend aussi de ce que tu fais dans la page appelée.

Avec la page appelée je ne fait que l'afficher sur mon navigateur, j'ai plusieurs pages différentes et en fonction des action sur l'arduino
j'affiche telle ou telle page c'est tout.

bonjour,
déjà une erreur à première vue

au lieu de

est ce que ton nono est sur la même plage ip que le pc hébergeant tes pages?
donne ton code entier pour voir, tu dois avoir une BIIIIIIP dedans qui fait que même sans appuyer sur une touche, il tourne en boucle.
d'ou les cadres imbriqués et la page vide.

infobarquee:
bonjour,
déjà une erreur à première vue

au lieu de

est ce que ton nono est sur la même plage ip que le pc hébergeant tes pages?
donne ton code entier pour voir, tu dois avoir une BIIIIIIP dedans qui fait que même sans appuyer sur une touche, il tourne en boucle.
d'ou les cadres imbriqués et la page vide.

Le code était bon c'est le recopiage qui était mauvais.

Mon arduino à pour IP 192.1.1.190 et mon serveur 192.1.1.113.

Ci-joint la prog ( c'est mon premier "grand" programme ) il y a surement des choses à améliorer pour le reste du programme
pour le moment c'est l'affichage de mes pages HTML qui m'embete.

 #include <SPI.h>
 #include <Ethernet.h>
 #include <EthernetServer.h>
 #include <EthernetClient.h>
 
 byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x3F, 0x90 };
 byte ip[] = { 192,1,1,190 };
 EthernetServer serveur(80);

 const int buttonPin1 = 22; // Condition 1
 const int buttonPin2 = 23; // Condition 2
 const int buttonPin3 = 24; // Condition 3
 const int buttonPin4 = 25; // Bâtiment A
 const int buttonPin5 = 26; // Bâtiment B
 const int buttonPin6 = 27; // Bâtiment C
  
 int buttonState1 = 0;
 int buttonState2 = 0;
 int buttonState3 = 0;
 int buttonState4 = 0;
 int buttonState5 = 0;
 int buttonState6 = 0;
  
void setup() {

  pinMode(buttonPin1, INPUT);   
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
  pinMode(buttonPin5, INPUT);
  pinMode(buttonPin6, INPUT);
  pinMode(buttonPin7, INPUT);
  
 Serial.begin(115200);
     
 Ethernet.begin(mac, ip);
 }

void loop()
{
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
  buttonState4 = digitalRead(buttonPin4);
  buttonState5 = digitalRead(buttonPin5);
  buttonState6 = digitalRead(buttonPin6);
  
 //---------------------------------------------------------------AUCUNE ACTIVITE-------------------------------------------------------------------------------//
  if (buttonState1 == HIGH && buttonState2 == LOW && buttonState3 == LOW ) {
   Serial.println("Aucune Activite");
   EthernetClient client = serveur.available();  
   if (client) { 
    Serial.println ("Client present !"); 
    while (client.connected()) {
      if (client.available()) { 
     char c = client.read();
   }
   else { 
           client.println("HTTP/1.1 200 OK");
           client.println("Content-Type: text/html");
           client.println();
           client.println("<html>");
           client.println("<body>");
           client.println("<iframe src=\"http//:192.1.1.113/Zone_Y.html\" height=\"99%\" width=\"100%\"></iframe>");
           client.println("</iframe>");
           client.println("</body>");
           client.println("</html>");
         break;
       }
     }
     delay(1);
  client.stop();
    
}}
if (buttonState1 == LOW && buttonState2 == HIGH && buttonState3 == LOW ) {
   Serial.println("Aucune Activite");
   EthernetClient client = serveur.available();  
   if (client) { 
    Serial.println ("Client present !"); 
    ............

La suite du programme reste dans le même principe en affichant d'autres pages HTML sous d'autres conditions.

Ce programme marche très bien lorsque j'affiche des fichiers .gif avec le code

client.print("<img src=http://192.1.1.113/image.gif>");

Merci pour votre aide

Benoit

cherchez l'erreur

client.println("<iframe src="http//:192.1.1.113/Zone_Y.html" height="99%" width="100%">");
client.println("");

déjà pour etre sur que tout fonctionne comme il faut, tu créé une page html simple avec l'iframe dedans et tu regarde si ca fonctionne.

cherchez l'erreur

client.println("<iframe src="http//:192.1.1.113/Zone_Y.html" height="99%" width="100%">");
client.println("");

:astonished: pourquoi ne l'ai ja pas vu .

J'ai essayé d'afficher ma page html avec l'iframe sous windows et ça marche bien même avec mon erreur :~

Je charge ça demain dans mon arduino

[EDIT] l'erreur venait du doublon du et aussi je pense du "http//:" au lieu du "http://"

Merci de votre aide pour l'iframe.

Benoit

Merci

content pour toi alors :slight_smile:
j'avais pas vu non plus le http//: :fearful: