ESP8266 DHT22 - Any code which works?

Hi Blynkers, I tried several times but my esp8266 doesnt work with dht22, I check that dht works fine with and arduino and I also check that my esp8266 works fine with a ultrasonic sensor, but doesnt work esp8266 and dht.

As I saw a lot of users have some issues with esp8266 and dht22, my code is here, please tell me what is wrong:


#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#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 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor for normal 16mhz Arduino
//DHT dht(DHTPIN, DHTTYPE);
// NOTE: For working with a faster chip, like an Arduino Due or Teensy, you
// might 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.
// Example to initialize DHT sensor for Arduino Due:
DHT dht(DHTPIN, DHTTYPE, 30);

void setup() {
  Serial.begin(115200); 
  Serial.println("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
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);

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

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

  Serial.print("Humidity: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
}

I used the same hardware that another user who upload the picture

This is the serial response

@alvaroaguero55 edit your first post so it looks like a regular sketch.
Where did you see the sensor wired liked that?

I saw it in another post here in Blynk Community, is something wrong about the circuit or about the hardware? I used the same circuit with Arduino Uno and works fine.

The sketch is the same that DHT Example (library example), I only add the esp8266 library and blynk library.

Please edit your first post.

I can’t see what you are doing at the back of the sensor but from the front the 2nd from the left is the data pin. Maybe it would be a good idea to feed this to a data pin on the nodemcu, right?

Yes of course, the second pin is connected to a digital pin of the nodemcu, and a pullup resistor to 3.3 volts.

Could someone share a simple code and connection (esp8266 nodemcu, dht22, temp and hum by serialprint) which works?

IT’s SOLVED! The problem was the dht library, seems to was not compatible with esp8266. With adafruit dht library goes great!

glad that you find a solution!

could you please format properly your code in the first post?
thanks!

2 Likes