// Ces trois bibliothèques sont indispensables pour le shield #include #include #include // Pour la communication avec la carte SD // Fonctions permettant la lecture de fichiers html sur la carte SD // et leur envoi (avec modifications éventuelles) sur le port éthernet #include "trthtml.h" // Broche CS de la carte SD const byte SDCARD_CS_PIN = 4; // pour Arduino UNO c'est quelquefois indiqué 10 // L'adresse MAC du shield byte mac[] = { 0x90, 0xA2, 0xDA, 0xHH, 0xHH, 0xHH }; // L'adresse IP que prendra le shield IPAddress ip (192, 168, n1, n2); // Notre serveur écoutera sur le port 80 EthernetServer serveur (80); // Nom du fichier à récupérer char url [14]; // affiche l'adresse IP sur le moniteur série void affiche_ip () { int i; for (i = 0; i < 4; ) { Serial.print (ip [i]); if (++ i < 4) Serial.print ("."); } Serial.println (); } void setup () { // On démarre la voie série pour déboguer Serial.begin (9600); // On démarre le shield Ethernet avec l'adresse IP et l'adresse MAC Ethernet.begin (mac, ip); Serial.println (F("ethernet ok ")); // afficher l'adresse IP affiche_ip (); // Initialisation du port SPI pinMode (SDCARD_CS_PIN, OUTPUT); // Initialisation de la carte SD Serial.print ("Initialisation carte SD "); if (!SD.begin (SDCARD_CS_PIN)) Serial.println (F("Echec !")); else Serial.println (F("Succès")); // laisse du temps au shield pour s'initialiser delay (100); // on lance le serveur serveur.begin (); delay (100); Serial.println (F("Pret !")); } void loop () { EthernetClient client; File descfic; // Regarde si un client est connecté et attend une réponse client = serveur.available (); // si c'est le cas, quelqu'un est connecté if (client) { // récupérer ce qu'il a envoyé lire_trame_client (client, url, sizeof (url)); // si aucun nom de fichier ne figure dans l'url if (! url [1]) // mettre le nom du fichier d'accueil strcpy (url, "index.htm"); // tenter d'accéder à au fichier HTML descfic = SD.open (url, FILE_READ); // si on n'a pas réussi, tenter la page d'erreur if (! descfic) descfic = SD.open (F("/err404.htm"), FILE_READ); // envoi de l'entête de la page web envoie_entete_reponse (client, url); // si on accède au fichier html if (descfic) { // envoi de la page copie_jusque_fin (descfic, client); // ferner le fichier HTML descfic.close (); } // sinon message d'erreur else client.println (F("Probleme probable d'acces a la carte SD")); Serial.println (F("Page envoyée\n")); // Donne le temps au client de prendre les données delay (10); // Ferme la connexion avec le client client.stop (); } }