BTS Mesure BTS Mesure
NodeMCUArduinoCommuniqueGrapheTGauge
/*  Capteurs connectés
 *  Matériel utilisé : NodeMCU basé sur ESP-12E de ESP8266 
 *  programmé par l'IDE de l'Arduino
 *  Ce programme envoie la temperature et l'humidite à bts2m.free.fr
 *  Il envoie une requete HTTP GET https://openclassrooms.com/courses/les-requetes-http
 *
 *  Sur le site bts2m.free.fr il y a plusieurs scripts php disponibles
 *  /DHT22/communique.php : permet l'envoi de t et h sous forme de paramètres
 *  http://bts2m.free.fr/DHT22/communique.php?t=23.2&h=43
 *  
 *  Les données sont visibles sous forme de graphe à
 *  http://bts2m.free.fr/DHT22/GrapheT.php
 *  http://bts2m.free.fr/DHT22/Gauge.php
 *  http://bts2m.free.fr/DHT22/capteur.php
 *  
 *  Au lycée on utilisera comme réseau un hotspot Wifi d'un téléphone portable
 */

#include <ESP8266WiFi.h>

#include "DHT.h"
#define DHTPIN D4     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = "SFR_3CB8";
const char* password = "mot de passe";

const char* host = "bts2m.free.fr";


float temp=18;
int humi=48;
int cycle = 0;
float CTN,VCTN;
float TCTN;

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println("DHTxx test!");
  pinMode(D3,OUTPUT);            // Astuce pour éteindre et allumer DHT22
  pinMode(D2,OUTPUT);
  digitalWrite(D2,LOW); 
  digitalWrite(D3,HIGH);
  delay(500); 
  dht.begin();
  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {

  delay(5000);
  cycle++;
  temp=dht.readTemperature();
  humi=dht.readHumidity();
  CTN = analogRead(A0);  // Attention impédance d'entrée comprise entre 300k et 360k
  // Table CTN : http://bts2m.free.fr/DHT22/images/CTN_Theorie.xlsx
  TCTN = 1.543e-7*CTN*CTN*CTN-0.0002039*CTN*CTN+0.17867*CTN-27.355;  // Req=75.6 k au lieu de 100k
  VCTN=3.3*CTN/1024;
  // temp+=0.1*cycle; // Pour debug


  if (isnan(humi) || isnan(temp)) {
    Serial.println("Erreur DHT sensor!");
    Serial.println("Ini DHT sensor!");
    digitalWrite(D3,LOW);    
    delay(2000);
    digitalWrite(D3,HIGH);
    temp=TCTN;
    humi=0;
         }

  Serial.print("connecting to ");
  Serial.println(host);
  
  // utilisation de la classe WiFiClient pour créer une connection TCP
  // http://sebsauvage.net/comprendre/tcpip/
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("Echec connexion");
    return;
  }
  
  // Nous allons envoyer nos données t et h par une requête GET
  // Après l'adresse bts2m.free.fr/DHT22/communique.php
  // Nous allons ajouter la liste des variables après un ? ex: ?t=23.2&h=43
  String url = "/DHT22/communique2.php?t=";
  url +=temp ;
  url += "&h=";
  url += humi;
  Serial.println("TCTN="+String(VCTN,3)+" V      TCTN="+String(TCTN,1)+"   DTH22 = "+String(temp,1));
  Serial.print("Requete: ");
  Serial.println(url);
  Serial.println();
  
  // Mise en forme et envoi de la requête GET au serveur
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();  // attente de la réponse du serveur de timeout au maxi
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
  
  // Lecture de toutes les lignes de la réponse du serveur
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  
  Serial.println();
  Serial.println("Fermeture de la connexion.");
}