Tutorial ESP32 51/55 - Temperatura e Umidade via WiFi com DHT | Kit de Aprendizado IoT ESP32 da SunFounder
Neste tutorial, aprenderemos a usar o SunFounder ESP32 com um sensor DHT11 ou DHT22 para medir temperatura e umidade. Este projeto nos permitirá ler os dados do sensor em nossos dispositivos móveis ou navegadores via Wi-Fi, destacando as capacidades do ESP32 como um servidor web. Iremos configurar o ESP32, conectar os componentes corretamente e escrever o código necessário para que tudo funcione perfeitamente (no vídeo às :15).
O microcontrolador ESP32 é um dispositivo poderoso com Wi-Fi e Bluetooth integrados. Isso nos permite conectar à internet e transmitir dados de sensores sem fio. O sensor DHT medirá a temperatura e a umidade, que serão exibidas em uma página da web acessível através do endereço IP do ESP32. Esta configuração é ideal para monitorar as condições ambientais remotamente.
Hardware Explicado
Para este projeto, utilizaremos os seguintes componentes principais:
- Microcontrolador ESP32:Este é o núcleo do projeto que gerencia a conectividade Wi-Fi e serve como um servidor web para exibir os dados do sensor.
- Sensor DHT11 ou DHT22:Esses sensores medem temperatura e umidade. O DHT11 é adequado para aplicações básicas, enquanto o DHT22 oferece melhor precisão e uma faixa mais ampla.
O sensor DHT comunica-se com o ESP32 usando um único pino de dados. Ele envia leituras de temperatura e umidade em um formato digital, que o ESP32 consegue interpretar facilmente. O ESP32, então, hospedará uma página da web que exibirá essas leituras em tempo real.
Detalhes da Ficha Técnica
| Fabricante | Adafruit |
|---|---|
| Número da peça | DHT11/DHT22 |
| Tensão de lógica/entrada e saída | 3.3 V - 5.5 V |
| Tensão de alimentação | 3,3 V - 5,5 V |
| Corrente de saída (por canal) | 0,5 mA (típ.) |
| Corrente de pico (por canal) | 2,5 mA (máx.) |
| Tempo de resposta | 1 s (típ.) |
| Faixa de umidade | 20% a 90% UR |
| Faixa de temperatura | -40°C a 80°C |
| Pacote | DIP-4 |
- Certifique-se de que o sensor DHT está conectado ao pino GPIO correto no ESP32.
- Use resistores pull-up para estabilizar a linha de dados.
- Preste atenção na tensão de alimentação; tanto o DHT11 quanto o DHT22 funcionam bem a 3,3V.
- Mantenha a fiação curta para evitar degradação do sinal.
- Verifique a instalação correta da biblioteca para sensores DHT na IDE do Arduino.
Instruções de Fiação

Para conectar o sensor DHT ao ESP32, ligue os seguintes pinos:
- Sensor DHT VCC:Conecte-se ao pino de 3,3V no ESP32.
- GND do Sensor DHT:Conecte-se a um pino GND no ESP32.
- Dados do Sensor DHT:Conecte-se ao GPIO 14 no ESP32 (isso é definido no código como
DHTPIN).
Certifique-se de que você tem o resistor correto (tipicamente 4,7kΩ) conectado entre o VCC e o pino de dados para garantir a integridade do sinal. Se estiver usando o DHT22, basta alterar aDHTTYPEno código deDHT11paraDHT22para acomodar as diferenças nas características dos sensores.
Exemplos de Código e Passo a Passo
No código, começamos incluindo as bibliotecas necessárias e definindo alguns identificadores-chave. Por exemplo,refreshestá definido para 3 segundos, o que determina com que frequência as leituras de temperatura e umidade são atualizadas.
const int refresh=3; // read every 3 seconds
boolean showSerial = true; // true or false
OshowSeriala variável nos permite controlar se as leituras devem ser impressas no Monitor Serial. Em seguida, definimos o pino e o tipo do sensor:
#define DHTPIN 14 // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
Aqui, oDHTum objeto é criado, ligando-o ao pino especificado e ao tipo de sensor. A função principal para enviar dados de temperatura pela web é definida comosendTemp():
void sendTemp() {
String page = "\n";
page += "\n";
page += "\n";
page += "\n";
page += "\n";
// Additional HTML content...
}
Esta função gera uma página HTML que exibe as medições de temperatura e umidade. A página é atualizada com base narefreshintervalo definido anteriormente. Para detalhes completos do código, consulte o código completo carregado abaixo do artigo.
Demonstração / O que Esperar
Após fazer o upload do código para o ESP32, você deve ver o endereço IP impresso no Monitor Serial. Abra um navegador da web e insira o endereço IP para visualizar as leituras de temperatura e umidade. Os valores serão atualizados a cada 3 segundos, fornecendo dados em tempo real (no vídeo às 12:30).
Tenha cuidado com armadilhas comuns, como garantir que o ESP32 e seu dispositivo estejam conectados à mesma rede Wi-Fi. Se você encontrar problemas, verifique a fiação e assegure-se de que o sensor DHT esteja funcionando corretamente.
Marcação de Vídeo
- 00:00 Início
- 1:45 Introdução ao projeto de wifi DHT
- 3:59 Código Arduino para ESP32 DHT Wifi
- 13:31 Selecionando a placa ESP32 e a porta COM no Arduino IDE
- 15:13 Demonstração de Temperatura via Wifi
/*
* 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
}
Common Course Links
Common Course Files
Coisas que você pode precisar
-
AliExpressAliExpresss.click.aliexpress.com
Recursos e referências
-
ExternoAliExpresss.click.aliexpress.com
-
Interno
Arquivos📁
Nenhum arquivo disponível.