DHT11 et ESP8266 version serveur


L'idée est de créer une page Web sur l'ESP8266 avec les informations de température et d'humidité. Nous utilisons le module DHT & un ESP8266.
Pour la programmation de l'ESP8266, il faut un dongle USB comme celui-ci. Prenez soin d'enlever l'ESP et le brancher sur le dongle USB

Dongle pour l'ESP8266

L'ESP8266 est un module wifi qui possède une mémoire interne et un microcontrôleur.

Des précautions sont à prendre avant d'utiliser ce module.

D'abord le tester vous pouvez avoir les éléments ICI.

La liste des commandes est ICI.

Puis le flasher pour y injecter le scripte. Pour le flasher vous aurez tout ce qu'il faut ICI.

Sonde DHT11 & ESP8266
plus
Sonde DHT11 & ESP8266
plus
Sonde DHT11 & ESP8266

Le scripte ci-dessous est a injecter dans l'ESP8266 à partir du logiciel arduino.

La configuration de cet ESP8266 doit être ainsi.

Configuration de l'ESP8266


L'Arduino doit être alimenté en 3,3 volts minimum.

Le scripte est à télécharger en version serveur ICI



#include "ESP8266WiFi.h"
#include "WiFiClient.h"
#include "ESP8266WebServer.h"
#include "DHT.h"
#define DHTTYPE DHT11 //could be DHT22
#define DHTPIN  2
const char* ssid     = "test";
const char* password = "test";
ESP8266WebServer server(80);
// Initialize DHT sensor
// NOTE: For working with a faster than ATmega328p 16 MHz Arduino chip, like an ESP8266,
// you need to increase the threshold for cycle counts considered a 1 or 0.
// You can do this by passing a 3rd parameter for this threshold.  It's a bit
// of fiddling to find the right value, but in general the faster the CPU the
// higher the value.  The default for a 16mhz AVR is a value of 6.  For an
// Arduino Due that runs at 84mhz a value of 30 works.
// This is for the ESP8266 processor on ESP-01
DHT dht(DHTPIN, DHTTYPE, 11); // 11 works fine for ESP8266
float humidity, temp_f, 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 = 5000;              // interval at which to read sensor minimum 2000
String page = "";
void handle_root() {
  server.send(200, "text/html", "Hello Karl from the weather esp8266, read from /temp or /humidity 

Temp

Humid
"); 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 // temp_f = (temp_f - 32) * 5 / 9; webString = "Temperature: " + String((int)temp_f)+ " °C"; // Arduino has a hard time with float to string server.send(200, "text/html", webString + "

Retour
"); // 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 = "Humidity: " + String((int)humidity) + " %"; server.send(200, "text/html", webString + "

Retour
"); // 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) temp_f = dht.readTemperature(); // Read temperature as Celsius //temp_f = dht.readTemperature(true); // Read temperature as Fahrenheit // Check if any reads failed and exit early (to try again). if (isnan(humidity) || isnan(temp_f)) { Serial.println("Failed to read from DHT sensor!"); return; } } }