DHT11 Temperature and Humidity Sensor
Lecture 8
Uli Raich
UCC semester 2017/2018
COPYRIGHT © 2024 by the contributing authors
Slide 1 of 32
We have seen how we can drive an LED from a single GPIO pin
programmed as output pin or how we can read its state
through another GPIO pin, programmed as input pin.
Can one do more with a single pin?
COPYRIGHT © 2024 by the contributing authors
Slide 2 of 32
The DHT11 has only 3 pins:
Be careful: The pinout of the DHT11 in our sensor kit is different from the one shown on the photo! The PCB layout of the PCB board in my sensor kit is different! |
|
COPYRIGHT © 2024 by the contributing authors
Slide 3 of 32
How can we, with a single pin
- initiate a measurement
- read humidity and temperature data
- make sure the data are correct?
The answer is:
a serial protocoland the DHT11 implements its own serial protocol
COPYRIGHT © 2024 by the contributing authors
Slide 4 of 32
Reading and understanding the data sheet
Let’s have a look at the
DHT11 data sheet:
Most of the following information is just a copy from the data sheet.
COPYRIGHT © 2024 by the contributing authors
Slide 5 of 32
How does a resistive humidity measurement work?
COPYRIGHT © 2024 by the contributing authors
Slide 6 of 32
Resistive Humidity Measurement(2)
- Variations in relative humidity produce changes variations
of resistivity,which is measured.
- The resistance of certain hygroscopic materials such as
hygroscopic salts have such a property
- These materials are mounted as thin films on
the substrate with metal contacts
- The devices can be very small
COPYRIGHT © 2024 by the contributing authors
Slide 7 of 32
COPYRIGHT © 2024 by the contributing authors
Slide 8 of 32
In order to convert these measurements into numeric values
and send them to the end user through a serial protocol,
a preprogrammed micro-controller must be implemented on the chip.
In the case of the DHT11 this is an 8 bit micro-controller,
which does the conversion into binary and which creates the serial protocol
COPYRIGHT © 2024 by the contributing authors
Slide 9 of 32
COPYRIGHT © 2024 by the contributing authors
Slide 10 of 32
COPYRIGHT © 2024 by the contributing authors
Slide 11 of 32
How to connect the device
COPYRIGHT © 2024 by the contributing authors
Slide 12 of 32
As we can see from the specs below, the DHT11 power line
can be directly connected to the cobbler 3.3V (or the 5V) line
COPYRIGHT © 2024 by the contributing authors
Slide 13 of 32
Single Wire two way interface
COPYRIGHT © 2024 by the contributing authors
Slide 14 of 32
Overall Communication Process
COPYRIGHT © 2024 by the contributing authors
Slide 15 of 32
How to initiate a Measurement?
COPYRIGHT © 2024 by the contributing authors
Slide 16 of 32
What does this mean for our program?
We must:
- Program the GPIO pin onto which we connected our DHT11 as output
- We must pull this line done (send a login level zero) and
keep it low for a minimum of 18 ms
- We must pull it high again and wait for another 20-40 μs
- Finally we must re-program the pin as input and wait for the DHT11 to respond.
COPYRIGHT © 2024 by the contributing authors
Slide 17 of 32
COPYRIGHT © 2024 by the contributing authors
Slide 18 of 32
COPYRIGHT © 2024 by the contributing authors
Slide 19 of 32
COPYRIGHT © 2024 by the contributing authors
Slide 20 of 32
Wow, this looks complicated. How can we write a program to do all this?
Let's start slowly:
- Initiating a measurement seems do-able
- Why not just read the data from the device every 5 µs
and print out the information?
The zeros and ones do not look too convincing.
COPYRIGHT © 2024 by the contributing authors
Slide 21 of 32
What the user of the device wants
The user of the device would like to have a library which hides
all these details. He wants functions to
- Initialize the device
- Start a measurement
- Make sure the checksum is ok
- Read temperature and humidity values
- Maybe know when the measurement was made
COPYRIGHT © 2024 by the contributing authors
Slide 22 of 32
How do we write a library?
A library consist of min. 2 files:
- an include file (dht11.h)
- and implementation file (dht11.c)
Very often you have a single include but several implementation files.
COPYRIGHT © 2024 by the contributing authors
Slide 23 of 32
The include file of the dht11 library
COPYRIGHT © 2024 by the contributing authors
Slide 24 of 32
COPYRIGHT © 2024 by the contributing authors
Slide 25 of 32
- dht11Init simply calls wiringPiSetup()
- dht11Measurement
- Programs the gpio pin as output and sends the start sequence
- Switches back the gpio pin to input and reads the data coming from the dht11 every 5 µs and saves the data into an array
- Analyses the data and extracts temperature, humidity and the checksum
- Calculates the checksum and compares it with the one coming from the device
- If checksums are ok, sends the data to “validData”
- Keeps the time stamp of the measurement
COPYRIGHT © 2024 by the contributing authors
Slide 26 of 32
- dht11GetValidTemperature()
- dht11GetValidHumidity()
- dht11getValidMeasTime()
- dht11getChecksum()
- dht11getDeviceChecksum()
COPYRIGHT © 2024 by the contributing authors
Slide 27 of 32
The data pin has been programmed as output earlier
You can print these data and have a look at them with gnuplot. Try analyzing be hand.
COPYRIGHT © 2024 by the contributing authors
Slide 28 of 32
This is the tricky bit and you are invited to give it a try. I have written a
routine reading a single bit, which is called 40 times for all the 40 bits in the data.
Please note one nasty problem:
Linux is a multi-tasking system and permanently receives interrupts.
While these interrupts are treated the DHT11 data are continuing to flow
but are not taking into account, leading to corrupt data.
Since the duration of the protocol takes ~ 4 ms the probability is non negligible
and the checksum test in obligatory to make sure the data are consistent.
In case of a checksum error you must repeat the measurement
COPYRIGHT © 2024 by the contributing authors
Slide 29 of 32
Creating a shared library
The Makefile says it all
COPYRIGHT © 2024 by the contributing authors
Slide 30 of 32
Where is the include file, where the binary of the shared lib?
I installed the include file in /opt/ucc/include
and the library in /opt/ucc/lib.
These are non-standard directories and must be declared in the Makefile
-I /opt/ucc/include for the include file in CFLAGS
-L /opt/ucc/lib for the library path
Since the shared library is loaded separately when running the
main program, it must be found by the system:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ucc/lib
COPYRIGHT © 2024 by the contributing authors
Slide 31 of 32
When writing a library that is supposed to be used by other people,
documentation is of utmost importance
Of course the function prototypes in the include file give
some indication but this normally not enough.
I use the
doxygen in code documentation system which allows to
generate documentation from the source layout and
comments in the code with special tags.
It creates html of latex doc
COPYRIGHT © 2024 by the contributing authors
Slide 32 of 32
--
Uli Raich - 2017-10-20
Comments
This topic: Embedded_Systems
> WebHome >
LectureSlides > Lecture8:DHT11TemperatureAndHumiditySensor
Topic revision: r7 - 2023-11-19 - UliRaich
Copyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback