Recently, we organized the first Losant Input/Output event; we helped a group of teenage girls create devices to monitor temperature and humidity in the Cincinnati Museum Center to help protect the exhibits. For this project, we used the ESP8266 NodeMCU and a DHT22 temperature and humidity sensor.
The DHT22 is a very low-cost sensor. It's made up of two components: a capacitive humidity sensor and a thermistor, which measures temperature. Because it's a digital sensor, you can read the sensor data over a GPIO pin.
In this tutorial, we'll look at how to connect the DHT22 to the ESP8266 NodeMCU.
Once you have your materials together, we can wire it up.
Here are the instructions in detail:
3v3
or Vin
on the MCU. D2
on the MCU.GND.
In this tutorial, to program the NodeMCU, we are going to use Arduino's IDE. It's the easiest way to get up and running with the DHT22.
First, you'll have to set up your machine: Environment Setup Instructions. These instructions take you through installing the IDE and the proper libraries.
In addition to this, you'll have to install two more libraries. To read the sensor, we are going to use Adafruit's DHT22 library. It can be installed using Arduino's library manager. It comes in two components. First, you'll want to download the Adafruit Unified Sensor library:
Important: Lastly, you'll need to increase the underlying MQTT library's memory limit. The PubSubClinet MQTT library has a default memory limit that is not enough to support all the values that the DHT22 sensor can collect. The error is also not apparent, which makes it hard to track. To increase the memory limit, please check out this forum post.
Now were are ready to write some code.
Note (April 2023): Several users following this guide have noted that newer versions of the Arduino ESP8266 library do not work when following this guide. It is suggested to use a legacy version of the library, such as 3.1.0. Choosing a version depends on your use case and your hardware.
Here is a basic example of reading the sensor and logging the data to the serial monitor:
If you open up your serial monitor, you should see the data:
Now that we have the data let's send it to Losant.
When just logging to the serial monitor, our data isn't that useful. Once in Losant, we can graph and react to the data. For example, we can send an SMS message if the temperature and humidity go out of range. Let's set this up:
1. If you don't have one, create a Losant account
2. Create a standalone Device - Make sure you save the Device ID.
Set up five attributes of type number: humidity
, tempC
, tempF
, heatIndexC
, heatIndexF
.
4. Create an Access Key and Secret - You should save these keys somewhere safe.
We need to change up the previous program because now we need to connect to WiFi and Losant. In this example, we make the connections to WiFi and Losant, then report that data to Losant every two seconds.
Before you run, you need to update the config values:
Now, if you open up your serial monitor, you should see it connect and report the data.
If you've having diffulty connecting the device to Losant, please check your Application Communication Log for detailed error messages.
With Losant, in a few clicks, you can visualize the sensor data. To graph the temperature and humidity data, we just need to create a dashboard. Each dashboard is made up of smaller components called blocks.
Let's create a block for humidity
. For this example, we will use the Time Series Block.
In the block settings, choose the device that you created earlier, and you want to select the attribute called humidity
.
We can also do the same for temperature.
After you add the block to your dashboard, you can now see a graph of the ESP8266 reporting temperature and humidity. There are also more types of dashboard blocks that you can explore.
At this point, you are collecting and visualizing data. But, what about reacting to it? The next step is to build a Workflow in Losant to send yourself a text message whenever the humidity gets too high.
If you have any questions or feedback, let us know!