DHT11, DHT22 and AM2302 Sensors: Created by Lady Ada
DHT11, DHT22 and AM2302 Sensors: Created by Lady Ada
DHT11, DHT22 and AM2302 Sensors: Created by Lady Ada
Guide Contents 2
Overview 3
DHT11 vs DHT22 3
Connecting to a DHTxx Sensor 5
AM2302 (wired DHT22) temperature-humidity sensor 5
Using a DHTxx Sensor 7
DHT CircuitPython Code 9
Adafruit CircuitPython Module Install 9
Wiring 9
Usage 10
Example Code 11
Python Docs 13
Downloads 14
DHT11 vs DHT22
We have two versions of the DHT sensor, they look a bit similar and have the same pinout, but have different
characteristics. Here are the specs:
DHT11 (http://adafru.it/386)
DHT22 (http://adafru.it/385)
Low cost
3 to 5V power and I/O
As you can see, the DHT22 (http://adafru.it/385) is a little more accurate and good over a slightly larger range. Both
use a single digital pin and are 'sluggish' in that you can't query them more than once every second or two.
You can pick up both the DHT11 (http://adafru.it/386) and DHT22 (http://adafru.it/385) from the adafruit shop!
$15.00
IN STOCK
ADD TO CART
Likewise, it is fairly easy to connect up to the DHT sensors. They have four pins
1. VCC - red wire Connect to 3.3 - 5V power. Sometime 3.3V power isn't enough in which case try 5V power.
2. Data out - white or yellow wire
3. Not connected
4. Ground - black wire
Simply ignore pin 3, its not used. You will want to place a 10 Kohm resistor between VCC and the data pin, to act as a
medium-strength pull up on the data line. The Arduino has built in pullups you can turn on but they're very weak, about
20-50K
This diagram shows how we will connect for the testing sketch. Connect data to pin 2, you can change it later to any
pin.
Begin by downloading the DHT library from our github repository. (https://adafru.it/aJW) To download, click
the DOWNLOADS button in the top right corner. Rename the uncompressed folder DHT and make sure that it
contains the dht.cpp file and others. Then drag the DHT folder into the arduinosketchfolder/libraries/ folder. You may
have to create that libraries sub-folder if it doesnt exist. Restart the IDE.
IMPORTANT: As of version 1.3.0 of the DHT library you will also need to install the
Adafruit_Sensor (https://adafru.it/aZm) library, which is available from the Arduino library manager:
This will make the data appear correctly for the correct sensor. Upload the sketch!
You should see the temperature and humidity. You can see changes by breathing onto the sensor (like you would to
fog up a window) which should increase the humidity.
You can add as many DHT sensors as you line on individual pins, just add new lines such as
below the declaration for the initial dht object, and you can reference the new dht2 whenever you like.
First make sure you are running the latest version of Adafruit CircuitPython (https://adafru.it/Amd) for your board. In
particular for Gemma M0, Trinket M0, and M0 basic boards you must be running CircuitPython 2.1.0 or higher to have
access to the necessary pulseio module!
Next you'll need to install the necessary libraries to use the hardware--carefully follow the steps to find and install these
libraries from Adafruit's CircuitPython library bundle (https://adafru.it/zdx). Our introduction guide has a great page on
how to install the library bundle (https://adafru.it/ABU) for both express and non-express boards.
Remember for non-express boards like the, you'll need to manually install the necessary libraries from the bundle:
adafruit_dht.mpy
You can also download the adafruit_dht.mpy from its releases page on Github (https://adafru.it/Ber).
Before continuing make sure your board's lib folder or root filesystem has the adafruit_dht.mpy module copied over.
Wiring
DHT wiring is very simple:
The left-most pin is power. We recommend powering from 5V (sometimes 3V is not enough) - this is OK even if
you are using 3.3V logic
The second pin is data. Connect a 10K pullup resistor from this pin to 3.3V. If you are using a DHT11 it's required.
If you're using a DHT22 or AM2302 you can sometimes leave this off
Skip the third pin
The right-most pin is ground
For the DATA pin you must pick a pin that has PWM support (pulseio) - Check the board's guide for what pins
have timers available
https://adafru.it/A0o
https://adafru.it/A0o
Usage
To demonstrate the usage of the DHT sensor module you can connect to your board's serial REPL and run Python
code to read the temperature and humidity.
Next connect to the board's serial REPL (https://adafru.it/Awz)so you are at the CircuitPython >>> prompt.
Next import the board and adafruit_dht modules, these are necessary modules to initialize and access the sensor:
You may also want to try powering the DHT sensor from 5V (we found sometimes it really needs more power) but still
having the 10K pull-up resistor to 3.3V volts)
Now create an instance of either the DHT11 or DHT22 class, depending on the type of sensor you're using (for the
AM2302 sensor use the DHT22 class). You must pass in the pin which is connected to the signal line, for example a
DHT22 or AM2302 sensor connected to board pin D6 would need this code:
dht = adafruit_dht.DHT22(board.D6)
Note for a DHT11 sensor you'd instead use adafruit_dht.DHT11 in place of the adafruit_dht.DHT22 code above.
At this point you're all set and ready to start reading the temperature and humidity! You can do this by reading the
temperature property which returns temperature in degrees Celsius:
dht.temperature
To read the humidity grab the value of the humidity property, it will return the percent humidity as a floating point
value from 0 to 100%:
dht.humidity
In most cases you'll always get back a temperature or humidity value when requested, but sometimes if there's
electrical noise or the signal was interrupted in some way you might see an exception thrown to try again. It's normal
for these sensors to sometimes be hard to read and you might need to make your code retry a few times if it fails to
read. However if you always get errors and can't ever read the sensor then double check your wiring (don't forget the
pull-up resistor if needed!) and the power to the device.
Example Code
Here's a full example sketch which also manages error-retry logic (which will happen once in a while.
Don't forget to change the logic pin to whatever pin you're using! Then save this as main.py on your CircuitPython
board
import adafruit_dht
import board
dht = adafruit_dht.DHT22(board.D2)
while True:
try:
temperature = dht.temperature
humidity = dht.humidity
# Print what we got to the REPL
print("Temp: {:.1f} *C \t Humidity: {}%".format(temperature, humidity))
except RuntimeError as e:
# Reading doesn't always work! Just print error and we'll try again
print("Reading from DHT failure: ", e.args)
time.sleep(1)
If you are using a DHT11, change the code to use a adafruit_dht.DHT11(board.D2) object.
Open the REPL to see the output! Breathe on the sensor to see it move temperature and humidity up (unless you are a
White Walker in which case the temperature will go down)