Webserver & carte SD

Bonsoir à toutes et tous.

Débutant sur Arduino, je me suis lancé dans un petit projet à base d'une carte MEGA 2560 et d'un shield ethernet W5100.
L'idée est de pouvoir, depuis la maison (via des pages web), contrôler et commander quelques trucs dans le garage. (température, éclairage extérieur, ...)

J'ai déjà réussi à lire la t° d'un DTH11, mesurer le niveau de lumière via une cellule LDR, afficher des messages sur un écran LCD 2 lignes 16 caractères, et piloter une LED depuis une page web.

Avant d'additionner les fonctionnalités, je fais des essais par petit bout.

A terme, l'idée est d'afficher une/des page(s) un peu plus fun qu'un simple formulaire.

Et là je suis à la recherche d'exemple de projets dans lequel la page web est stockée dans la carte SD du shield ethernet.
J'ai trouvé celui là par exemple: http://arduino.cc/forum/index.php/topic,51138.0.html

Mais quand je lance la vérification du code, j'obtiens les messages d'erreur suivants:

sketch_WebServer2_0.cpp:46:19: error: no matching function for call to ‘Server::Server(int)’
/usr/share/arduino/hardware/arduino/cores/arduino/Server.h:4:29: note: candidates are: Server::Server()
/usr/share/arduino/hardware/arduino/cores/arduino/Server.h:4:29: note: Server::Server(const Server&)
sketch_WebServer2_0.cpp:46:14: error: cannot declare variable ‘server’ to be of abstract type ‘Server’
/usr/share/arduino/hardware/arduino/cores/arduino/Server.h:4:29: note: because the following virtual functions are pure within ‘Server’:
/usr/share/arduino/hardware/arduino/cores/arduino/Print.h:48:20: note: virtual size_t Print::write(uint8_t)
/usr/share/arduino/hardware/arduino/cores/arduino/Server.h:6:16: note: virtual void Server::begin()
sketch_WebServer2_0.cpp: In function ‘void loop()’:
sketch_WebServer2_0.cpp:123:26: error: ‘class Server’ has no member named ‘available’
sketch_WebServer2_0.cpp:123:10: error: cannot declare variable ‘client’ to be of abstract type ‘Client’
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:7:30: note: because the following virtual functions are pure within ‘Client’:
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:12:18: note: virtual size_t Client::write(uint8_t)
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:13:18: note: virtual size_t Client::write(const uint8_t*, size_t)
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:14:15: note: virtual int Client::available()
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:15:15: note: virtual int Client::read()
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:17:15: note: virtual int Client::peek()
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:18:16: note: virtual void Client::flush()
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:10:15: note: virtual int Client::connect(IPAddress, uint16_t)
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:11:15: note: virtual int Client::connect(const char*, uint16_t)
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:16:15: note: virtual int Client::read(uint8_t*, size_t)
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:19:16: note: virtual void Client::stop()
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:20:19: note: virtual uint8_t Client::connected()
/usr/share/arduino/hardware/arduino/cores/arduino/Client.h:21:11: note: virtual Client::operator bool()

Pour le coup, j'en appelle à votre aide.
Avez-vous une explication possible sur ces messages d'erreur ?
Avez-vous connaissance d'autre projets de pages web embarquées sur la carte SD ?

j'ai eu le même problème
va voir ici
http://arduino.cc/forum/index.php/topic,120448.0.html
vers le milieu je donne mon code pour un arduino en serveur web avec les fichier sur la carte
tu peux t'en inspirer

Il faut faire attention avec tous les exemples qui datent d'avant le 1er trimestre 2012.
La sortie de l'IDE v1.0 a apporté de nombreux changement dans les noms des objets ou fonctions.

Dans ton cas, la classe Server s'appelle maintenant EthernetServer.
pareil pour Client qui devient EthernetClient.

Avant de regarder les exemples sur Internet qui ne sont pas documentés et pas mis à jour, il faut regarder et étudier les exemples fournis avec l'IDE Arduino

  • Soit les exemples de sketchs standards
  • Soit les exemples situés dans les répertoires des librairies concernées.

J'utilise "Tinywebserver" ça fonctionne bien, j'ai mis sur la carte SD des pages crées avec Artister, tout passe bien le CCS, les photo, le javascript, Jquery....

je rame pour le reste, échanger des valeurs entre Arduino et la page HTML c'est pas simple il va falloir apprendre le JavaScript...

mais c'est super intéressant comme projet.

Ca avance doucement.
J'ai réussi à afficher une page web embarquée sur la carte SD ...
J'ai un peu galéré à cause de la broche 4 qu'il faut bien paramétrer et sans doute un faux contact sur la carte SD ...

  // initialisation carte SD
  Serial.print("Initialisation de la carte SD");
  pinMode(4, OUTPUT); // broche 4 pour l'Ethernet Shield

  if (!SD.begin(4)) {
    Serial.println("Echec de l'initialisation");
    return;  
  }

  Serial.println("Initialisation terminée");

Objectifs suivant:

  • Mettre des boutons dans la page web embarquée pour piloter des sorties
  • Modifier des champs texte en fonction d'états de l'arduino
  • A terme, essayer d'afficher quelques images en fonction d'état ou valeurs. (exemple porte ouverte fermée, température faible/moyenne/élevée, niveau très bas/bas/haut/très haut ...)

L'idée pour arriver à ça, serait de modifier le contenu du code html au moment où je fais:

                    // ouverture du fichier
                    monFichier = SD.open("index.htm");
                    if (monFichier) {
                      
                      // lecture du contenu du fichier
                      while (monFichier.available()) {
                      	client.write(monFichier.read());
                      }
                      // fermeture du fichier
                      monFichier.close();
                    } else {
                    	// gestion de l'erreur si 'ouverture du fichier est impossible
                      Serial.println("erreur d'ouverture du fichier");
                    }

Pour la partie affichage des images, je ne sais pas encore comment faire exactement.
On va d'abord faire une version avec affichage dynamique en texte.

Bonsoir,

puppet-master:
Pour la partie affichage des images, je ne sais pas encore comment faire exactement.

skywodd parle du sujet, ici : [Arduino/Python/GLCD] Chargement d’image depuis carte SD | Skyduino - Le DIY à la française
icare