/* 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."); }