Page web affichage données météo

Bonjour à toutes et a tous,

Dans le cadre d'un TPE de 1ère j'ai réalisé un petite station météo sur arduino qui fonctionne avec une photorésistance et un RHT03. Cependant les données s'affichent sur le console série d'arduino. Je voulais afficher ces données sur une page web hébergée sur l'arduino grâce au shield ethernet.
Cependant la tache se révèle plus difficile que prévu et je n'ai plus le temps de me plonger dans des recherches encore plus approfondies.
Je sollicite donc votre aide pour savoir si l'un d'entre vous aurais l’extrême bonté de me sauver la mise :sweat_smile: .

Cordialement, ziskezick

Voici le code actuel :

 /** Broche "DATA" du DHT11 */
const byte DHT11_PIN = 5;
 
/** Code d'erreur de la fonction readDHT11() */
enum {
  DHT11_SUCCESS, //!< Pas d'erreur
  DHT11_TIMEOUT_ERROR, //!< Temps d'attente dépassé
  DHT11_CHECKSUM_ERROR //!< Données reçues erronées
};
 
/** Fonction setup() */
void setup() {
 
  /* Initialisation du port série */
  Serial.begin(9600);
  Serial.println(F("DHT11 DEMO"));
}
 
/** Fonction loop() */
void loop() {
 
  /* Variables d'usage */
  byte temperature, humidity;
 
  /* Lecture de la température et de l'humidité + gestion des erreurs */
  switch (readDHT11(DHT11_PIN, &temperature, &humidity)) {
  case DHT11_SUCCESS: 
     
    /* Affichage de la température et du taux d'humidité */
    Serial.print(F("Humidite (%): "));
    Serial.println((int) humidity);
    Serial.print(F("Temperature (^C): "));
    Serial.println((int) temperature);
    break;
 
  case DHT11_TIMEOUT_ERROR: 
    Serial.println(F("Temps d'attente depasse !")); 
    break;
 
  case DHT11_CHECKSUM_ERROR: 
    Serial.println(F("Erreur de checksum !")); 
    break;
  }
   
  /* Pas besoin de rafraichir l'affichage très souvent */
  delay(2000);
}
 
/**
 * Lit la température et le taux d'humidité capté par un capteur DHT11
 *
 * @param pin Broche sur laquelle est câblé le capteur
 * @param temperature Pointeur vers la variable stockant la température
 * @param humidity Pointeur vers la variable stockant le taux d'humidité
 * @return DHT11_SUCCESS si aucune erreur, DHT11_TIMEOUT_ERROR en cas de timeout, ou DHT11_CHECKSUM_ERROR en cas d'erreur de checksum
 */
byte readDHT11(byte pin, byte* temperature, byte* humidity) {
 
  /* data[] -> buffer contenant les données du cpateur
   * counter -> compteur permettant de savoir quel bit est reçu (bitwise)
   * index -> compteur permettant de savoir quel octet est reçu (bitwise)
   * timeout -> compteur pour le timeout
   */
  byte data[5] = { 0 }, counter = 7, index = 0;
  unsigned int timeout;
 
  /* Conversion du numéro de broche Arduino en ports/masque binaire "bas niveau" */
  /* Utiliser les registres du microcontrôleur est bien plus rapide que digitalWrite() */
  uint8_t bit = digitalPinToBitMask(pin);
  uint8_t port = digitalPinToPort(pin);
  volatile uint8_t *ddr = portModeRegister(port); // Registre MODE (INPUT / OUTPUT)
  volatile uint8_t *out = portOutputRegister(port); // Registre OUT (écriture)
  volatile uint8_t *in = portInputRegister(port); // Registre IN (lecture)
 
  /* Réveil du capteur */
  *ddr |= bit; // OUTPUT
  *out &= ~bit; // LOW
  delay(18); // Temps d'attente à LOW causant le réveil du capteur
  *out |= bit; // HIGH
  delayMicroseconds(40);
  *ddr &= ~bit; // INPUT
 
  /* Attente de la réponse du capteur */
  timeout = 0;
  while(!(*in & bit)) /* Attente d'un état LOW */
    if (++timeout == 10000)
      return DHT11_TIMEOUT_ERROR;
  timeout = 0;
  while(*in & bit) /* Attente d'un état HIGH */
    if (++timeout == 10000)
      return DHT11_TIMEOUT_ERROR;
 
  /* Lecture des données du capteur (40 bits) */
  for (byte i = 0; i < 40; ++i) {
 
    /* Attente d'un état LOW */
    timeout = 0;
    while(!(*in & bit))
      if (++timeout == 10000)
        return DHT11_TIMEOUT_ERROR;
 
    /* Mise en mémoire du temps courant */
    unsigned long t = micros();
 
    /* Attente d'un état HIGH */
    timeout = 0;
    while(*in & bit)
      if (++timeout == 10000)
        return DHT11_TIMEOUT_ERROR;
 
    /* Si le delta Temps est supérieur à 40µS c'est un "1", sinon c'est un "0" */
    if ((micros() - t) > 40)
      data[index] |= (1 << counter); // "1"
    // Le tableau data[] est initialisé à "0" par défaut <img src="http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif?m=1129645325g" alt=";)" class="wp-smiley"> 
 
    /* Si le compteur de bits atteint zéro */
    if (counter-- == 0) {
      counter = 7; /* On passe à l'octet suivant */
      ++index;
    }
  }
 
  /* Format des données :
   * [0] = humidité en %
   * [1] = zéro
   * [2] = température en degrés Celsius
   * [3] = zéro
   * [4] = checksum (humidité + température)
   */
  *humidity = data[0]; 
  *temperature = data[2]; 
 
  /* Vérifie la checksum */
  if (data[4] != (data[0] + data[2]))
    return DHT11_CHECKSUM_ERROR; /* Erreur de checksum */
  else
    return DHT11_SUCCESS; /* Pas d'erreur */
}

Tu as encore ce weekend pour trouver au moins !

Regardes les exemples de la librairie ethernet ... Surtout le Webserver ... Il affiche 6 valeurs sur une page html ... C'est bien ce que tu veux faire non ? Une valeur numérique est une valeur numrerique ... Que ce soit une valeur d'une entrée analogique ou l'âge du capitaine ...

Commence par le faire fonctionner et ensuite adapte le à ton projet ... Le boulot est quasiment fait

Merci à toi :wink: Mais il y a quelque chose qui m'échappe complètement : où est stockée la page web en elle même ? Parce que dans le programme Webserver il n'y a rien qui correspond à ce qui s'affiche dans le navigateur :expressionless:

Plus qu'un jour !

J'espère qu'on parle du même exemple ...

La page ethernet est générée par l'arduino lui même : c.est arduino, qui envoie le contenu de ta page html ai les commandes client.print .. La page html commence au client.println("HTTP/200... (C'est le protocole html qui veut ça) ... Et Le contenu de la page proprement dit commence au client.println("") et se fini au client.println("<\html>") il faut connaître un minimum les balises html et la syntaxe mais comme ditplus haut, cet exemple correspond exactement à ce que tu recherches

... Entre ces deux balises tu as l'affichage des textes de la page html ( très sommaire ici, juste le texte analog input x is xxx, répété 6 fois)

. Bonus : il y a un rafraîchissement automatique toutes les 5s ( le navigateur sur lequel tu regardes ta page demande tout seul à ton arduino de rafraîchir la page avec les dernières valeurs mesurées ... ; c'est à la ligne client.println("refresh :5") que ça se gère

Merci beaucoup !!! :smiley: :smiley: :smiley: :smiley: :smiley: Tu m'as sauvé la vie x) Ça fait plaisir de voir qu'il y a encore des gens qui se donnent la peine de formuler des réponses complètes sans te balancer un "google est ton ami" inutile et désagréable :slight_smile:

De rien !