Arduino serveur web : capteur DS18B20

Ca fait un moment que ca me titille : Arduino serveur web.
Pour faire quoi ?  Par exemple donner la température dans une pièce.

Montage Arduino serveur web

J’ai directement pris une carte arduino ethernet, pas un shield…

arduino serveur web

Bon le plus difficile est de faire des copier-coller de ce qu’on peut trouver sur le web.

voici quelques sources intéressantes :
http://phmarduino.free.fr/

Le code utilisé sur cette appli.

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>

// Remplacer les adresses MAC et IP par celles de votre Arduino Ethernet
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xF6, 0x27 };
byte ip[] = { 192,168,0, 200 };

// Création de l'objet server de type EthernetServer disponible sur le port 8080 histoire de rediriger car j'ai déjà un serveur web sur le port 80
EthernetServer server(8080);

OneWire  ds(7);  // on pin 7 (a 4.7K resistor is necessary)

void setup()
{
  // Démarrage de la connexion Ethernet et du serveur WEB server
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  analogReference(INTERNAL); //Permet de fixer la temperature de refernce à 1,1 volt
}

void loop()
{
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(10*1000);                  //10 secondes de pause
    return;
  }

  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1); 
  delay(1000);     // maybe 750ms is enough, maybe not

  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);  

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;

  //Déclaration et initialisation des variables
  float mesure=0;        //Variable pour le stockage mesure retournée par le capteur
  float tension=0;       //Variable pour le stockage de la tension 
  float temperature=0;   //Variable pour le stockage de la température 
  float tempmin=100;     //Temperature min
  float tempmax=0;       //Temperature max
  int portana0 = 0;      //Numéro du port analogique sur lequel la température est mesurée

  //Ecoute des requetes client (browser WEB)

  delay(1000);
  EthernetClient client = server.available();
  if (client) {
    // Gestion de la fin de la requête WEB qui est indiquée par l'envoi d'une ligne blanche
    boolean currentLineIsBlank = true;

    while (client.connected()) {
      if (client.available()) {
                      // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    client.println("<!DOCTYPE html>");
                    client.println("<html>");
                    client.println("<head>");
                    client.println("<title>Arduino Serveur Web et capteur temperature</title>");
                    client.println("<meta http-equiv=\"refresh\" content=\"30\" >");
                    client.println("</head><body bgcolor=\"#000000\" text=\"#ffffff\" link=\"#0000ff\" vlink=\"#0000ff\" alink=\"#ff0000\">");
                    client.print("<h1>Arduino en serveur web</h1><h2>Temp&eacute;rature</h2>");
                    client.print("Temperature ambiante dans le bureau (chez moi) = ");
                    client.print(celsius);  
                    client.print("&deg;C<br>");
                    client.println("(mise &#224; jour toutes les 30s)");

                    client.print("<h2>Luminosit&eacute;</h2>");
                    client.println("A venir<br><br>");
                    client.print("<h2>Pr&eacute;sence</h2>");

                    client.println("A venir<br><br>");

                    client.println("<br><br><p align=\"right\"><a href=\"http://www.dekloo.net/\">Dekloo</a></p></body>");
                    client.println("</html>");
                   client.stop();
                }

    }}}

Cheking et uploading plus tard…

Redirection du port 8080 vers l’IP de la carte Arduino
Et ouverture de mon adresse:8080 avec un navigateur, ca donne :

arduino_serveur_web_ds18b20_dallas

Et voila !!!!!!!!!!!

Trop simple.

Related posts

One Thought to “Arduino serveur web : capteur DS18B20”

  1. […] J’ai ajouté une photo-résistance au premier montage présenté ici […]