Sensor DHT11 com ESP32-S2 Franzininho 

Posted by

Vamos falar sobre o Sensor DHT11 com ESP32-S2 Franzininho WiFi. Porém este mesmo código serve para qualquer Arduino. O DHT11 é um sensor de umidade e temperatura que funciona através de uma interface “single wire serial interface”, interface serial de fio único.

Dentro do sensor há um elemento de medição de umidade resistivo e um termistor NTC para temperatura. Ele vem pré-calibrado de fábrica para medir umidade entre 20% e 90% e temperatura entre 0ºC e 50ºC. A resolução da medição de umidade é unitária (de 1% em 1%). A temperatura também é medida em passos de 1ºC.

Para elaboração deste tutorial eu segui estas informações. Dito isto, a forma de conexão é através de três fios: 3,3V, GND e sinal. Sendo que é necessário um resistor de pull-up de 10k Ohm entre o 3,3V e o sinal. Veja abaixo a forma de conexão.

Conexão do DHT11 à Franzininho WiFi
Conexão do DHT11 à Franzininho WiFi
DHT11 com ESP32
Sensor DHT11 com ESP32

A biblioteca necessária se chama “DHT sensor library” da Adafruit, pode ser baixada diretamente na IDE do Arduino. Clique em “Rascunho > Incluir biblioteca > Gerenciar bibliotecas” e digite “DHT sensor”; instale aquela que for da Adafruit.

Para abrir um exemplo de teste do DHT11, vá em “Arquivo > Exemplos > DHT sensor library > DHTtester”. Veja o sketch completo abaixo. Note que a única coisa que modifiquei foi o pino digital onde o sensor está conectado, mudei para o 17:

#define DHTPIN 17     // Digital pin connected to the DHT sensor

E as linhas abaixo tem que estar exatamente como colocado, para poder usar o DHT11 e não DHT22:

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#include "DHT.h"

#define DHTPIN 17     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}

O código acima vai proporcionar a saída abaixo, no monitor serial (ou em baixo da tela ou em “Ferramentas > Monitor serial”. Então é mostrada umidade, temperatura em ºF, em ºC e “heat index”, que é a sensação térmica.

Saída do console - DHT11 com ESP32
Saída do console – DHT11 com ESP32

O que mais é importante

O sensor DHT11 é muito barato, facilmente encontrável (compre aqui) e fácil de usar. Isto o torna muito usado em projetos de estações meteorológicas com Arduino. É um sensor lento, porém quando se fala de temperatura e umidade a velocidade não importa muito, as inércias térmicas são naturais.

Quer conhecer mais sensores de temperatura? veja sobre o SHT21.

3 respostas

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *