// import des librairies

#include <ESP8266WiFi.h>
#include "DHT.h"                  // https://github.com/adafruit/DHT-sensor-library

// Dé-commentez la ligne qui correspond à votre capteur 

//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Changer vos SSID et Password
const char* ssid = "XXXX";  
const char* password = "YYYY";  
// On donne l'ip du serveur distant ou son nom d'hote, ici mon NAS et le port du serveur web.
const char* serveur = "192.168.0.57"; 
const int httpPort = 80;

// on defini le pin sur lequel est branché la sonde
uint8_t DHTPin = 4;  // D2 --> GPIO4
               
// on configure la sonde DHT.
DHT dht(DHTPin, DHTTYPE);                

// on definit 2 variables de type float pour stocker nos datas
float Temperature;
float Humidity;
// on definit 2 variables, un interval de 10 secondes et un compteur
const long interval = 10000;
unsigned long previousMillis = 0;

// le setup
void setup() {
  Serial.begin(115200);                        // On demarre la com serie
  Serial.println("");
  Serial.println("");
  pinMode(DHTPin, INPUT);                      // On défini le GPIO utilisé par la sonde en entrée
  dht.begin();                                 // On initialise la sonde
  Serial.print("Connexion à ");                // On précise sur la com série qu'on va se connecter
  Serial.println(ssid);                        // Au ssid
  WiFi.begin(ssid, password);                  // On se connecte au Wifi
  while (WiFi.status() != WL_CONNECTED) {      // Tant qu'on est pas connecter on écrit un point toutes les seconde 
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("");
  Serial.print("WiFi connecté, IP : ");        // On précise dans la com série qu'on est connecté  
  Serial.println(WiFi.localIP());              // On affiche l'ip dans la com série
  
}

// la boucle
void loop() {  
  readTempature();       // la lecture qui se produit toutes les 10s (interval = 10000)
}


// la fonction qui lit la sondes et envoie les datas au serveur distant 
void readTempature() {    
  unsigned long currentMillis = millis();                      // définit une variable pour stocker le temps actuel
  if (currentMillis - previousMillis >= interval) {            // si on est a 10s, ou on dépasse 10s.
    previousMillis = currentMillis;                            // on reset le compteur
    // On lit la sonde
    Humidity = dht.readHumidity();
    Temperature = dht.readTemperature();  
    // si pas de lecture    
    if (isnan(Humidity) || isnan(Temperature)) {
    Serial.println("Echec de lecture !");
    return;
    }        
    // si la lecture est ok on affiche les datas
    Serial.print("Température : ");
    Serial.print(Temperature);
    Serial.println(" °C");
    Serial.print("Humiditée : ");
    Serial.print(Humidity);
    Serial.println(" %");
    // Création de la connexion TCP
    /////////  connexion et envoi des datas  /////////////
    WiFiClient client;    
    if (!client.connect(serveur, httpPort)) {
      Serial.println("échec de la connexion");
      return;
    }
    // Envoi de toutes ces datas par l'URL et par GET au fichier data.php sur le serveur (dans le dossier test)
    client.print(String("GET /test/data.php?temp=") + String(float (Temperature)) + "&humi=" + String(float(Humidity)) +
                        " HTTP/1.1\r\n" +  "Host: " + serveur + "\r\n" + "Connection: close\r\n\r\n");       
       
    //////////////////////////////////////////////////////      
  }       
}