Reading temperature & humidity from DHT sensors with Raspberry
DHT sensors
Have you ever wanted to build your own weather station? Then read further, because today we are going to look at how to measure temperature and humidity with our Raspberry! We are going to use DHT11/22 sensor, which you can get on Ebay for 1 to 4 dollars, depending on the type and accessory that comes with it. These sensors are smaller that s match box and quite accurate. There are two basic models of the sensor - DHT11 and DHT22, you can find their characteristics below. Generally DHT11 is cheaper and less accurate than DHT22, but the price of DHT22 is still so low that there is no reason why you should hesitate and not buy the 22 version.
The sensor can come as a bare “mini plastic box” with 4 pinouts or it can be mounted on a board and have 3 pinouts. The difference is that the version mounted on the board already has a pull-down resistor connected to it and you don’t have to worry about a NULL pin, which doesn’t have any purpose for us, on the “bare” version. The three remaining pinouts are for power input, ground and data output, how simple! Bare in mind that if you have the version without the board, you will also need a 4.7kΩ-10kΩ resistor to make it work properly!
This sensors is able to measure temperature and humidity. If you would cut the plastic box guarding the inner parts of the sensor, you would find two separate sensors there. A thermistor for temperature readings, which is simply a variable resistor that changes its resistance according to the temperature. And second sensor for humidity readings, that consists of two electrodes and a moisture holding substrate between them. This substrate sucks humidity from its surroundings - changing its conductivity, which then changes the resistance between the two electrodes.
DHT11
attribute | value |
---|---|
cost | starting on $1 |
power | 3-5V |
humidity | reads values from 20% to 80% with 5% accuarcy |
temperature | reads values from 0°C to 50°C ±2°C accuracy |
reading interval | 1Hz - can read values every second |
DTH22
attribute | value |
---|---|
cost | starting on $3 |
power | 3-5V |
humidity | reads values from 0% to 100% with 2-5% accuracy |
temperature | reads values from -40°C to 80°C ±0.5°C accuracy |
reading interval | 0.5Hz - can read values every 2 seconds |
Connecting it to Raspberry
Connecting the sensor to Raspberry is pretty simple. You can choose weather to use 3.3V or 5V output from your Raspberry to connect it to VCC pin, then connect Raspberry’s GROUND to GND and choose one GPIO to connect in to DATA pin. If you have the version not mounted on the board, connect 4.7kΩ-10kΩ resistor between VCC and DATA.
Reading the temperature
Now we have everything connected and ready to read the actual temperature and humidity from our sensor. To read the actual values, we will use a python library from Adafruit, because these amazing guys already did the hard work and figured out how to translate the changing resistance of temperature/humidity sensors to human readable values. I have forked the library and you can freely download it from my Gitlab. Remember that you need python and git to be installed on your Raspberry to make this work! Lets go step by step and measure something finally!
Open a terminal on your Raspberry and install python and git if you don’t have it yet
sudo apt-get update
sudo apt-get install git build-essential python-dev python-openssl
Now download the Adafruit DHT library and open the folder
git clone https://gitlab.com/bambusekd-dev-blog/raspberry-read-temperature-humidity-DHT.git
Install the library
sudo python setup.py install
Great, now go to the examples folder
cd examples
And here we go, there is a python script AdafruitDHT.py
that takes two arguments. First one is type of your sensor, so 11
for DHT11 and 22
for DHT22. The second one is the GPIO number (BCM number) that the DATA pinout is connected to. So if you have connected the sensor to GPIO 4
, that translates to number 7
in BCM
, just execute
sudo ./AdafruitDHT.py 22 4
And you should see the measured temperature and humidity, something like this
Temp=22.0* Humidity=60.0%
Congratz! You are now running a small weather station!