Part 1: Connecting the NodeMCU with the DHT22 Sensor

There are a lot of monitoring solutions that can be accomplished with the DHT22  (temperature & humidity) sensor. The DHT sensors comes in two models and packings – the DHT11 and the DHT22. In addition, you might find the sensors in a small shield/board module or by itself, see pictures below.

The main different between the standalone sensor and the others, is that you will need a 4.7k-10k pull-up resistor in your circuit when connecting the standalone DHT sensors.

DHT22 Technical Details

The DHT sensors uses one digital pin to communicate with the MCU. The DHT11 is more precise in terms of readings than the DHT22.

DHT22 Specs

  • 3 to 5V power and I/O
  • 2.5mA max current use during conversion (while requesting data)
  • Humidity readings with 2-5% accuracy
  • Temperature range between -40 to 80°C with ±0.5°C accuracy
  • Only 0.5 Hz sampling rate so once every 2 seconds

Getting Started

If you haven’t install the Arduino IDE or setup your NodeMCU, then head to our Getting Started guide.

We’ll be using the Arduino IDE for this guide, hence open it and create a new sketch. Lucky for us, there is already a DHT library available so go to: Sketch > Include Library > Manage Libraries 

Now search for DHT and installed the DHT sensor library by Adafruit.

Let’s take a look at our circuit. 

Code

There are a few different DHT libraries that can decode the temperature and humidity readings from the digital read out pin. For the purpose of this tutorial let’s use the Adafruit DHT Sensor Library

Arduino IDE Library Management
DHT Sensor Library
#include <dht.h>

dht DHT;

#define DHT11_PIN 7

void setup(){
}

void loop()
{
  int chk = DHT.read11(DHT11_PIN);
  delay(1000);
}

Connecting Wemos with Cayenne using MQTT

Connecting Wemos with Cayenne using MQTT is quick and simple. The Wemos D1 is one of the smallest board using the WiFi ESP chip. These also come with a variety of shields such as the DHT11 for temperature and humidity readings. Stay tune for other articles on how to take this module to a finish product and commercializing  it.

Imagine the possibilities that these small MCUs can do when we connect it with an IoT Cloud such as Cayenne. In this tutorial, we are going to walk you through how to connect the Wemos D1, the DHT11 shield and Cayenne using MQTT. By doing so you will be able to send Temperature and Humidity data to Cayenne and visualize it. 

Cayenne makes it easy and secured to connect Wifi and LoRa devices. Make sure to create an account and follow the steps below to add your first device.

Sketch Code

The follow sketch code requires the follow libraries:

// Tinkernlearn.com - This example shows how to connect the Wemos D1 pro & DHT11 with Cayenne using MQTT 

//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
#include <WEMOS_DHT12.h>

DHT12 dht12;

// WiFi network info.
char ssid[] = "WIFI_SSID";
char wifiPassword[] = "WIFI_PASSWORD";

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "MQTT_USERNAME";
char password[] = "MQTT_PASSWORD";
char clientID[] = "MQTT_CLIENT_ID";

unsigned long lastMillis = 0;

void setup() {
	Serial.begin(9600);
	Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}

void loop() {
	Cayenne.loop();

	//Publish data every 10 seconds (10000 milliseconds). Change this value to publish at a different interval.
	if (millis() - lastMillis > 10000) {
		lastMillis = millis();

    if(dht12.get()==0){
      Cayenne.celsiusWrite(1, dht12.cTemp);
      Cayenne.virtualWrite(2, dht12.fTemp, TYPE_TEMPERATURE, UNIT_FAHRENHEIT);
      Cayenne.virtualWrite(3, dht12.humidity, TYPE_RELATIVE_HUMIDITY, UNIT_PERCENT);
    }
	}
}

//Default function for processing actuator commands from the Cayenne Dashboard.
//You can also use functions for specific channels, e.g CAYENNE_IN(1) for channel 1 commands.
CAYENNE_IN_DEFAULT()
{
	CAYENNE_LOG("CAYENNE_IN_DEFAULT(%u) - %s, %s", request.channel, getValue.getId(), getValue.asString());
	//Process message here. If there is an error set an error message using getValue.setError(), e.g getValue.setError("Error message");
}

Getting Started with Cayenne

  1. After logging in to your account you will see the screen below for the first time. If you have an existing account with devices, go ahead and click on: “Add Device” 

2. Click on “Cayenne API – Bring your Own Thing” this will generate device MQTT credentials and indicate where to connect. 

3. Copy each corresponding credential in the corresponding Sketch setting such as: MQTT_USERNAME, MQTT_PASSWORD and CLIENT_ID

4. Once you compile and flash the board the application will redirect the dashboard your connected device. 

Cayenne widgets will automatically pop up for your device with temperature and humidity reading.