Ignorer la navigation

Partie 1 : arduino en mode serveur

La problématique : comment rendre accessible des données issues de mesures (par exemple la température d'une pièce) de partout grâce à internet ?

 
Nous allons découvrir 2 solutions :

  • la première va consister à transformer notre carte arduino en serveur. Cette carte va faire la mesure du capteur et lorsque quelqu'un accédera à notre serveur-arduino, celui-ci va générer la page HTML avec la mesure.
  • La deuxième solution, plus réaliste, va consister à écrire dans une base de données nos mesures issues du capteur. Ensuite une page PHP va aller lire les mesures présentes dans la base de données et les afficher sur une page web.

 

 
Partie 1 : arduino en mode serveur

Précision: si le arduino est en mode serveur, c'est lui qui va générer le site web (ici en html) suivant le principe suivant :


Nous allons utiliser le module Ethernet Shield :
Ce module Ethernet Arduino permet à une carte Arduino de se connecter à un réseau ethernet. Il suffit d'utiliser la librairie Ethernet pour écrire des programmes qui se connectent à internet en utilisant ce module. Ce module possède aussi un connecteur pour carte SD, qui pourra être utilisé pour stocker des fichiers qui pourront être envoyés sur le réseau.
Votre shield Ethernet possède un numéro unique (appelé une adresse MAC pour Media Access Control address). Cette adresse MAC est l'identifiant physique stocké dans un composant de la carte et qui est utilisé pour attribuer mondialement une adresse unique à chaque élément connecté au réseau.

 

1. Relevez l'adresse MAC de la carte ethernet Shield :

adresse MAC du shield ethernet

90

A2

DA



2. Demandez au professeur de monter les 3 cartes ensemble :
 


3. Demandez au professeur l'adresse IP réservée correspondant à votre carte Ethernet Shield


Le programme ci-dessous est prévu pour fonctionner avec le Shield Ethernet version 1. Si vous avez un shield Ethernet version 2, il faut:

  • installer la librairie Arduino suivante: librairies Arduino.zip
  • remplacer #include <Ethernet.h> par #include <Ethernet2.h>



Soit le programme arduino suivant :

#include <SPI.h>  // bibliothèque de la liaison série
#include <Ethernet.h>   //Inclure la bibliothèque Ethernet

// Adresse MAC du shield l'adresse IP dépend de votre réseau local
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x15, 0x15 };
IPAddress ip(192,168,1,62);   // à choisir sur votre réseau local – version adresse IP fixée

int CAPTEUR_TEMP_PIN = 4; // adressage du capteur de temperature (PIN) //
int SLIDER1_PIN = 0;
int SLIDER2_PIN = 1;
int SLIDER3_PIN = 2;
int potentiom1 = 0; //définition de la variable entière (integer) potentiom1//
int potentiom2 = 0; //définition de la variable entière (integer) potentiom2//
int potentiom3 = 0; //définition de la variable entière (integer) potentiom3//
int temp = 0; //définition de la variable entière (integer) //
float temperature = 0; // variable temperature en flottant //
float const_can = 0.0048828; // constante du convertisseur //

EthernetServer server(80);    //Initialise le serveur Ethernet, port 80 par défaut pour HTTP

void setup()
{
  Ethernet.begin(mac,ip);   //Démarrer la connexion Ethernet et le serveur (version DHCP)
  server.begin();    
  Serial.begin(9600);    //Affichage écran du PC
  analogRead(CAPTEUR_TEMP_PIN);
  analogRead(SLIDER1_PIN);
 }

void loop()
{
  temp = analogRead(CAPTEUR_TEMP_PIN);   // lecture du capteur de température //
  temperature = (((temp*const_can)*1000)-500)/10;  //calcul//
  potentiom1 = analogRead(SLIDER1_PIN); // lecture potentiomètre 1 //
  potentiom2 = analogRead(SLIDER2_PIN); // lecture potentiomètre 2 //
  potentiom3 = analogRead(SLIDER3_PIN); // lecture potentiomètre 3 //

  // Ecouter les clients entrants
  EthernetClient client = server.available();
  if (client) {
    // Une requète HTTP terminée par une ligne vide
    boolean currentLineIsBlank = true;
    while (client.connected()) {
    Serial.println("new client");
    Serial.print("adresse IP: ");
    Serial.println(Ethernet.localIP());
      if (client.available()) {

        
         // Envoyer un header de résponse standard http
         client.println("HTTP/1.1 200 OK");    //C'est OK
         client.println();
         client.println("<!DOCTYPE html>");
         client.println("<html>");    //---- debut de la page HTML ---
         client.println("<head>");    // ---- Entete de la page HTML ----
         client.println("<meta content=\"utf-8\">");
         client.println("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">");
         client.println("<META HTTP-EQUIV=\"Content-Language\" CONTENT=\"fr-FX\">");
         client.println("<title>Connexion au Serveur Arduino</title>");
         client.println("</head>");
         client.print("<body style=background-color:black>");
         client.println();
         client.println("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"1\">");
         client.println("<center>"); // pour centrer la page HTML
         client.println("<p style=\"color: white\">************************************************* <br> </p>");
         client.println("<h2 style=\"color: red\">Bienvenue sur le serveur Arduino!</h2>");
         client.println("<p style=\"color: white\">************************************************* <br> </p>");
         client.println("<br>");  //saut de ligne
         // Sortir la valeur des mesures
         client.println("<p style=\"color: white\">");
         client.print("Temperature ambiante = ");
         client.print(temperature);  
         client.print(" &degC");
         client.println("</p>");
         client.println("<p style=\"color: white\">");
         client.print("<br/> potentiometre 1 = ");
         client.print(potentiom1);  
         client.println("<br/>");   //saut de ligne
         client.print("potentiometre 2 = ");
         client.print(potentiom2);  
         client.println("<br/>");    //saut de ligne
         client.print("potentiometre 3 = ");
         client.print(potentiom3);  
         client.println("<br/>");    //saut de ligne
         client.println("</p>");
         client.println("</center>");  // fin de la zone centrée
         client.println("</body>");    // fin du body
         client.println("</html>");    //---- fin de la page HTML
         break;
        }
      }
    }
   delay(1);    // Laisser au navigateur web le temps de recevoir les données
   client.stop();     // Refermer la connexion:
}

 
Sur le programme précédent :


4. Entourez, en couleur, les déclarations de variable.
5. Entourez, en couleur, la ligne où rentrer l'adresse MAC
6. Entourez, en couleur, la ligne où rentrer l'adresse IP
7. Surlignez toutes las balises HTML que vous trouvez.
8. Quels sont les 2 instructions Arduino qui permettent d'envoyer un code HTML à votre ordinateur. Donnez leur syntaxe (manière de les utiliser).
9. Copiez le programme précédent dans le logiciel arduino, modifier l'adresse MAC en mettant celle de votre carte Ethernet Shield et modifier l'adresse IP.
10. Téléversez ce programme dans votre arduino (il doit être relié à l'ordinateur et l'ethernet shield raccordé au réseau)
11. Dans Mozilla, tapez l'adresse IP de votre carte Ethernet (vous faites alors une demande à arduino qui va renvoyer la page web). Décrire en détail ce qui se passe.
12. Sur le programme précédent, rajoutez, en couleur, les commentaires manquants.
13. Pour afficher le °C , on a utilisé un code spécial (voir "caracteres_speciaux_HTML.pdf"). Quel est ce code ?
14. Essayez de le remplacer simplement par ° pour voir si ça fonctionne. Conclure.