Code de recherche

Tutoriel ESP32 51/55 - Température et humidité via WiFi avec DHT | Kit d'apprentissage IoT ESP32 de SunFounder

Tutoriel ESP32 51/55 - Température et humidité via WiFi avec DHT | Kit d'apprentissage IoT ESP32 de SunFounder

Dans ce tutoriel, nous allons apprendre à utiliser le SunFounder ESP32 avec un capteur DHT11 ou DHT22 pour mesurer la température et l'humidité. Ce projet nous permettra de lire les données du capteur sur nos appareils mobiles ou navigateurs via Wi-Fi, mettant en avant les capacités de l'ESP32 en tant que serveur web. Nous allons configurer l'ESP32, câbler les composants correctement et écrire le code nécessaire pour que tout fonctionne sans accroc (dans la vidéo à 00:15).

esp32-51-dht-wifi

Le microcontrôleur ESP32 est un appareil puissant avec Wi-Fi et Bluetooth intégrés. Cela nous permet de nous connecter à Internet et de transmettre des données de capteurs sans fil. Le capteur DHT mesurera la température et l'humidité, qui seront ensuite affichées sur une page web accessible via l'adresse IP de l'ESP32. Ce dispositif est idéal pour surveiller à distance les conditions environnementales.

Matériel expliqué

Pour ce projet, nous utiliserons les composants principaux suivants :

  • Microcontrôleur ESP32 :C'est le cœur du projet qui gère la connectivité Wi-Fi et sert de serveur web pour afficher les données des capteurs.
  • Capteur DHT11 ou DHT22 :Ces capteurs mesurent la température et l'humidité. Le DHT11 est adapté aux applications basiques, tandis que le DHT22 offre une meilleure précision et une plus grande plage.

Le capteur DHT communique avec l'ESP32 en utilisant une seule broche de données. Il envoie des relevés de température et d'humidité au format numérique, que l'ESP32 peut facilement interpréter. L'ESP32 hébergera ensuite une page web qui affiche ces relevés en temps réel.

Détails de la fiche technique

Fabricant Adafruit
Numéro de pièce DHT11/DHT22
Tension logique/IO 3,3 V - 5,5 V
Tension d'alimentation 3,3 V - 5,5 V
Courant de sortie (par canal) 0,5 mA (typ.)
Courant de crête (par canal) 2,5 mA (max.)
Temps de réponse 1 s (typ.)
Plage d'humidité 20 % à 90 % d'humidité relative
Plage de température -40°C à 80°C
Paquet DIP-4

  • Assurez-vous que le capteur DHT est connecté au bon broche GPIO sur l'ESP32.
  • Utilisez des résistances de tirage pour stabiliser la ligne de données.
  • Faites attention à la tension d'alimentation ; les DHT11 et DHT22 fonctionnent bien à 3,3 V.
  • Gardez le câblage court pour éviter la dégradation du signal.
  • Vérifiez l'installation correcte de la bibliothèque pour les capteurs DHT dans l'IDE Arduino.

Instructions de câblage

ESP32-28_dht_temperature-sensor-wiring

Pour câbler le capteur DHT à l'ESP32, connectez les broches suivantes :

  • DHT Capteur VCC:Connectez-vous à la broche 3.3V sur l'ESP32.
  • GND du capteur DHT :Connectez-vous à une broche GND sur l'ESP32.
  • Données du capteur DHT :Connectez-vous à GPIO 14 sur l'ESP32 (cela est défini dans le code commeDHTPIN).

Assurez-vous d'avoir la résistance correcte (typiquement 4,7kΩ) connectée entre le VCC et la pin de données pour une intégrité du signal correcte. Si vous utilisez le DHT22, changez simplement leDHTTYPEdans le code deDHT11àDHT22pour tenir compte des différences dans les caractéristiques des capteurs.

Exemples de code et parcours

Dans le code, nous commençons par inclure les bibliothèques nécessaires et définir quelques identifiants clés. Par exemple,refreshest réglé sur 3 secondes, ce qui détermine la fréquence à laquelle les mesures de température et d'humidité sont mises à jour.

const int refresh=3; // read every 3 seconds
boolean showSerial = true; // true or false

LeshowSerialla variable nous permet de contrôler si nous devons imprimer les lectures sur le Moniteur Série. Ensuite, nous définissons la broche du capteur et le type :

#define DHTPIN 14  // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11 
DHT dht(DHTPIN, DHTTYPE);

Ici, leDHTun objet est créé, le liant à la broche spécifiée et au type de capteur. La fonction principale pour envoyer les données de température sur le web est définie commesendTemp():

void sendTemp() {
    String page = "\n";
    page += "\n";
    page += "\n";
    page += "\n";
    page += "\n";
    // Additional HTML content...
}

Cette fonction génère une page HTML qui affiche les relevés de température et d'humidité. La page est mise à jour en fonction de larefreshinterval défini précédemment. Pour des détails complets sur le code, veuillez vous référer au code complet chargé ci-dessous l'article.

Démonstration / À quoi s'attendre

DHT_Wifi_navigateur

Après avoir téléchargé le code sur l'ESP32, vous devriez voir l'adresse IP affichée dans le Moniteur Série. Ouvrez un navigateur web et entrez l'adresse IP pour voir les lectures de température et d'humidité. Les valeurs se mettront à jour toutes les 3 secondes, fournissant des données en temps réel (dans la vidéo à 12:30).

Soyez prudent face aux pièges courants, tels que s'assurer que l'ESP32 et votre appareil sont connectés au même réseau Wi-Fi. Si vous rencontrez des problèmes, vérifiez le câblage et assurez-vous que le capteur DHT fonctionne correctement.

Horodatages vidéo

  • 00:00 Début
  • 1:45 Introduction au projet wifi DHT
  • 3:59 Code Arduino pour ESP32 DHT Wifi
  • 13:31 Sélection de la carte ESP32 et du port COM dans l'IDE Arduino
  • 15:13 Démonstration de la température via Wifi

Images

ESP32-28_dht_temperature-sensor-wiring
ESP32-28_dht_temperature-sensor-wiring
esp32-51-dht-wifi
esp32-51-dht-wifi
DHT_Wifi_browser
DHT_Wifi_browser
368-ESP32 Tutorial 50/55- Display temperature on Browser screen using DHT11, DHT22 with ESP32
Langue: C++
/*
 * Display temperature on Browswer screen using DHT11, DHT22 with ESP32
 * 
 * Written by Ahmad Shamshiri on Dec 18, 2023
 📚⬇️ Download and resource page https://robojax.com/RJT385
 * 
 * Watch video instruciton for this video:  https://youtu.be/drrW1EHqKuM
 * 
 * I have combined DHT library of Adafruit with ESP8266 WebServer both links 
 * Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
 * and 
 * ESP8266 on GitHub : https://github.com/esp8266/Arduino
 * 
   Copyright (c) 2015, Majenko Technologies
   All rights reserved.

   Redistribution and use in source and binary forms, with or without modification,
   are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice, this
     list of conditions and the following disclaimer.

 * * Redistributions in binary form must reproduce the above copyright notice, this
     list of conditions and the following disclaimer in the documentation and/or
     other materials provided with the distribution.

 * * Neither the name of Majenko Technologies nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

const int refresh=3;//read every 3 seconds
boolean showSerial =true;//true or false

unsigned int unit=0;//0=C, 1=F, 
char *title[]={"Temperature","Temperature","Humidity"};
char *unitText[]={"°C","°F","%"};\

#include "DHT.h"
#define DHTPIN 14  // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float temperatureValue,temperatureFValue, humidityValue;// 


#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>

const char *ssid = "dars";
const char *password = "5152535455";

WebServer server(80);

void sendTemp() {
//see video 
  String page = "<!DOCTYPE html>\n";
  page +="<html>\n";  
  page +="<head>\n";
  page +="<title>Robojax DHT</title>\n";
  page +="    <meta http-equiv='refresh' content='";
  page += String(refresh);// how often temperature is read
  page +="'/>\n";  

  page +="<head>\n";  
  page +="<body>\n"; 
  page +="<h1>Robojax.com DHT Code</h1>\n";  
  page +="<p style=\"font-size:50px\"> \n";  
  page +=title[unit];  
  page +=": ";
  if (DHTTYPE ==DHT11){
    page += String((int)temperatureValue);  
  }else{
    page += String(temperatureValue, 1);
  }
  page +=unitText[unit]; 
  page +="<br/>\n";
  //humidity starts
  page +=title[2];  
  page +=": \n";  
  page += String((int)humidityValue);      
  page +=unitText[2];  
  //humidity ends
  page +="</p>\n"; 
  
  page +="</body>";  
  page +="</html>\n";  
  server.send(200,  "text/html", page);

}



void handleNotFound() {
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }

  server.send(404, "text/plain", message);

}

void setup(void) {
   dht.begin();
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Open: http://");
  Serial.print(WiFi.localIP());
  Serial.println(" to read temperature");

  if (MDNS.begin("robojaxDHT")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", sendTemp);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  //Robojax.com code for ESP32 DHT11 DHT22
  server.handleClient();
  temperatureValue = dht.readTemperature();// Read temperature as Celsius (the default)
  humidityValue = dht.readHumidity();// Reading humidity 
  temperatureFValue = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)

    if(showSerial){
        Serial.print(title[unit]);
        Serial.print(": ");
        if (DHTTYPE ==DHT11){
      Serial.println((int)temperatureValue);  
        }else{
        Serial.print(temperatureValue,1);
        }
        
    }
  Serial.println();//just adds new line

  delay(300);// change this to larger value (1000 or more) if you don't need very often reading
  // Robojax.com code for ESP32 and DHT11 DHT22  
}

Ce dont vous pourriez avoir besoin

Fichiers📁

Aucun fichier disponible.