/* DHTServer - ESP8266 Webserver with a DHT sensor as an input Based on ESP8266Webserver, DHTexample, and BlinkWithoutDelay (thank you) Version 1.0 5/3/2014 Version 1.0 Mike Barela for Adafruit Industries */ #include #include #include #include #define DHTTYPE DHT11 #define DHTPIN 2 // Replace with your network details const char* ssid = "YourRouterID"; const char* password = "YourRouterPassword"; ESP8266WebServer server(80); //Initialiser le capteur DHT // REMARQUE : Pour travailler avec une puce Arduino ATmega328p 16 MHz plus rapide, comme un ESP8266, // vous devez augmenter le seuil pour les comptages de cycles considérés comme 1 ou 0. // Vous pouvez le faire en passant un 3ème paramètre pour ce seuil. C'est un peu // de bidouiller pour trouver la bonne valeur, mais en général plus le CPU est rapide plus // augmente la valeur. La valeur par défaut pour un AVR 16 MHz est une valeur de 6. Pour un // Arduino Due qui tourne à 84mhz une valeur de 30 fonctionne. // C'est pour le processeur ESP8266 sur ESP-01 DHT dht(DHTPIN, DHTTYPE, 11); // 11 works fine for ESP8266 float humidity, temp_c; // Values read from sensor String webString=""; // String to display // Generally, you should use "unsigned long" for variables that hold time unsigned long previousMillis = 0; // will store last temp was read const long interval = 2000; // interval at which to read sensor void handle_root() { server.send(200, "text/plain", "Hello from the weather esp8266, read from /temp or /humidity"); delay(100); } void setup(void) { // You can open the Arduino IDE Serial Monitor window to see what the code is doing Serial.begin(115200); // Serial connection from ESP-01 via 3.3v console cable dht.begin(); // initialize temperature sensor // Connect to WiFi network WiFi.begin(ssid, password); Serial.print("\n\r \n\rWorking to connect"); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("DHT Weather Reading Server"); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); server.on("/", handle_root); server.on("/temp", [](){ // if you add this subdirectory to your webserver call, you get text below :) gettemperature(); // read sensor webString="Temperature: "+String((int)temp_c)+" C"; // Arduino has a hard time with float to string server.send(200, "text/plain", webString); // send to someones browser when asked }); server.on("/humidity", [](){ // if you add this subdirectory to your webserver call, you get text below :) gettemperature(); // read sensor webString="Humidite: "+String((int)humidity)+"%"; server.send(200, "text/plain", webString); // send to someones browser when asked }); server.begin(); Serial.println("HTTP server started"); } void loop(void) { server.handleClient(); } void gettemperature() { // Wait at least 2 seconds seconds between measurements. // if the difference between the current time and last time you read // the sensor is bigger than the interval you set, read the sensor // Works better than delay for things happening elsewhere also unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= interval) { // save the last time you read the sensor previousMillis = currentMillis; // Reading temperature for humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor) humidity = dht.readHumidity(); // Read humidity (percent) /*Fahrenheit est une échelle de température thermodynamique, où le point de congélation de l'eau est à 32 degrés Fahrenheit (°F)et le point d'ébullition à 212 °F (sous une pression atmosphérique normale). Cela sépare les points d'ébullition et de congélation de l'eau d’exactement 180 degrés. Par conséquent, un degré sur l'échelle Fahrenheit représente 1/180 de l'intervalle entre le point de congélation et le point d'ébullition de l'eau. Le zéro absolu est défini comme égal à-459,67 °F. Celsius :Bien qu'initialement défini comme le point de congélation de l'eau (et plus tard le point de fusion de la glace), l'échelle Celsius est maintenant officiellement une échelle dérivée, définie par rapport à la l’échelle de température Kelvin .Sur l'échelle Celsius le zéro (0 °C) est maintenant défini comme égal à 273,15 K, avec une différence de température de 1 deg C équivalent à une différence de 1 K, c’est-à-dire que la taille de l'unité sur chaque échelle est la même.Cela signifie que 100 °C, préalablement défini comme le point d'ébullition de l'eau, est maintenant défini comme l'équivalent de 373,15 K.Une différence de température d’1 °F équivaut à une différence de température de 0,556 °C. */ //Pour avoir la temperature en °Celcius à partir de ° Fahrenheit appliquons la formule : // °Celius = (°F -32)/1.800 temp_c = ((dht.readTemperature(true) -32)/1.800) ; // Read temperature as °Celcius // Check if any reads failed and exit early (to try again). if (isnan(humidity) || isnan(temp_c)) { Serial.println("Failed to read from DHT sensor!"); return; } } }