# Temperature and Humidity Monitoring Using DHT11 Sensor

In this project, you will be directed to monitor temperature and humidity using a **DHT11** sensor connected to a **Raspberry Pi**. Furthermore, the temperature and humidity data read by the **DHT11** sensor will be sent to the **Antares IoT Platform.**

## Prerequisites

The materials required follow the **General Prerequisites** on the previous page. If you have not prepared the requirements on that page, then you can visit the following page.

{% content-ref url="common-raspberry-ssh-prerequisites" %}
[common-raspberry-ssh-prerequisites](https://docs.antares.id/en/code-and-library-examples/raspberry-pi/ssh-secure-shell/common-raspberry-ssh-prerequisites)
{% endcontent-ref %}

## Follow These Steps

### 1.Setting up equipment

Here are some of the equipment you will need for temperature and humidity monitoring using the DHT11 Sensor:

* Raspberry Pi&#x20;
* Sensor DHT11
* Resistor 10kΩ
* Breadboard
* Kabel jumper (3 jumper jantan ke betina dan 3 jumper jantan ke jantan)

{% hint style="info" %}
The **10kΩ resistor** is needed as a pull-up resistor used to stabilise the communication between the DHT11 sensor and the Raspberry Pi. This resistor is needed when you work with DHT11 sensors that have 4 pins.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/BP2EfKfzHeQDLSMHU6X6/1_Alat.png" alt=""><figcaption><p>Equipment Required for Temperature and Humidity Monitoring</p></figcaption></figure>

### 2. Assembling Hardware

For temperature and humidity monitoring, you need to connect the DHT11 sensor with the Raspberry Pi. You need to create a circuit as in the following image.

{% hint style="info" %}
Connect the DHT11 VCC pin to the Raspberry Pi's 3.3 V pin, the DHT11 GND pin to the Raspberry Pi GND pin, and the DHT11 data pin to the Raspberry Pi's GPIO 4. Finally, connect the end of the 10kΩ resistor to the DHT11 VCC pin and the other end to the DHT11 data pin.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/o4wpAMZTNlyi2ZF8C1Ft/2_Rangkaian.png" alt=""><figcaption><p>DHT11 to Raspberry Pi circuit</p></figcaption></figure>

Here is a pinout diagram of the Raspberry Pi and DHT11 sensor that can make it easier for you to build a circuit.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/iKgJpAhMfETKs20aTnr0/3_Pinout.png" alt=""><figcaption><p>Pinout Raspberry Pi</p></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/cfhGx7rKo3mS0wYAFEN8/4_pinot%20sensor%20dht.jpg" alt=""><figcaption><p>Pinout Sensor DHT11</p></figcaption></figure>

### 3. Switching on the Raspberry Pi

You can switch on the Raspberry Pi by connecting it to a power source using USB-C.

{% hint style="info" %}
A powered-on Raspberry Pi will be signalled by a lit LED indicator near the USB-C port.
{% endhint %}

### 4.Open PuTTY App

The PuTTY application is used to access the Raspberry Pi via SSH. The image below shows the initial appearance of the application when opened.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/zwyJtJOfpKMHH0lDvjFK/1_PuTTY.png" alt=""><figcaption><p>PuTTY App View</p></figcaption></figure>

### 5. Check Raspberry Pi Connection with WiFi Network

To connect the Raspberry Pi via SSH using the PuTTY application, you need to input the Host Name or IP Address of the Raspberry Pi. To check whether the Raspberry Pi is connected to a WiFi network, you can do the "ping" command to the Raspberry Pi hostname. Open a command prompt and enter the following syntax.

```
ping raspberrypiIf the Raspberry Pi is connected to a WiFi network, the device will send a reply message to the computer as shown below.
```

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/PXQFJtAisjme4uokOwTn/3_Ping.png" alt=""><figcaption><p>Ping to Raspberry Pi</p></figcaption></figure>

{% hint style="info" %}
If the ping process **fails**, then it is likely that the Raspberry Pi **has not been connected to the WiFi network** that was set up during the OS installation process. In this condition, what you can do is **wait a few moments** until ping can be done. If it still fails, you can **restart the Raspberry Pi** by unplugging and reconnecting the power source from USB.
{% endhint %}

{% hint style="info" %}
If the Raspberry Pi still cannot connect to the Wi-Fi network that you have set during the OS installation process, then the last step that can be done is to **change the Wi-Fi network used by installing the OS again** in the Configure Wireless LAN section as shown below.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/lWTbvNI3TPrsu17nwbzY/9_Uname%20&#x26;%20Password.png" alt=""><figcaption><p>Changing the WiFi Connection on Raspberry Pi</p></figcaption></figure>

### 6. Access Raspberry Pi by SSH

After ensuring that the Raspberry Pi can connect to our computer, then we can input the Raspberry Pi hostname in the PuTTY application as shown below, then press Open.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/dN1A297rmqV8kt6lOx90/4_SSH.png" alt=""><figcaption><p>Inputting Host Name in PuTTY Application</p></figcaption></figure>

Select Accept in the display that appears, then enter the username and password in the terminal that opens. Input the username and password according to what was created during OS installation. After successfully logging in, the display on the terminal will be as follows.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/dvymzUGEb5Isa0i4qed0/5_Terminal.png" alt=""><figcaption><p>Display of Raspberry Pi Terminal Accessed by SSH</p></figcaption></figure>

### 7. Install Adafruit DHT11 Library

After you have successfully accessed the Raspberry Pi terminal, you need to install the DHT11 library from Adafruit by cloning from Github. The following syntax must be typed in the terminal.

```
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
```

After you have successfully accessed the Raspberry Pi terminal, you need to install the DHT11 library from Adafruit by cloning from Github. The following syntax must be typed in the terminal.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/IyceamBFhV06ly3f91ut/5_Adafruit.png" alt=""><figcaption><p>Adafruit_Python_DHT folder that appears after the cloning process</p></figcaption></figure>

To install the DHT11 library, enter the Adafruit\_Python\_DHT folder by typing the following syntax.

```
cd Adafruit_Python_DHT
```

Once inside the folder, you can check the files inside by typing "ls" in the terminal.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/dGOwA4jmA9dYLOaQz023/6_CD%20Adafruit.png" alt=""><figcaption><p>Enter the Adafruit_Python_DHT Folder and Display the Folder Contents</p></figcaption></figure>

{% hint style="info" %}
In the terminal output above there is a **setup.py** file. This file is used to install the DHT11 library.
{% endhint %}

Type the syntax below to perform the installation.

```
sudo python setup.py install
```

### 8. Creating a Python File

After successfully installing the required libraries, you need to create a Python file to input the required programme code. You need to enter the examples directory by typing the following syntax.

```
cd examples
```

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/TUytqXmZbhWj4g5Cr5rD/7_CD%20Examples.png" alt=""><figcaption><p>Enter the Examples Directory</p></figcaption></figure>

Then you need to create a new Python file by typing the syntax below.

```
sudo nano your-file-name.py
```

{% hint style="info" %}
You need to change **your-file-name** to your preferred filename.
{% endhint %}

After that, the display on the terminal will change to the one shown below. In this view, you can start inputting the programme code required for temperature and humidity monitoring.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/8b70hM0R7Fr1SnhsVyEU/8_File%20Python.png" alt=""><figcaption><p>Empty Python file for writing programme code</p></figcaption></figure>

{% hint style="info" %}
The display above shows an empty Python file ready to be input with programme code.
{% endhint %}

### 9. Inputting Programme Code

Here is the programme code that you need to input to the Python file that you created earlier.

{% code lineNumbers="true" %}

```python
import Adafruit_DHT
import time
import datetime
import requests

# Set DHT11 sensor type
sensor = Adafruit_DHT.DHT11

# Set GPIO pin where DHT11 sensor is connected
pin = 4

# Set Antares URL and headers
antares_url = 'masukkan URL'
headers = {
    'cache-control': 'no-cache',
    'content-type': 'application/json;ty=4',
    'x-m2m-origin': 'masukkan access-key'
}

while True:
    # Read data from DHT11 sensor
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

    if humidity is not None and temperature is not None:
        print("Last valid input: " + str(datetime.datetime.now()))
        print("Temperature: %d C" % temperature)
        print("Humidity: %d %%" % humidity)

        # Create the data payload
        data = {
            "m2m:cin": {
                "con": "{\"Temperature\":%d,\"Humidity\":%d}" % (temperature, humidity)
            }
        }

        # Send the data to Antares
        try:
            response = requests.post(antares_url, headers=headers, json=data)
            response.raise_for_status()  # Check if the request was successful
            print('Data sent successfully.')
        except requests.exceptions.RequestException as e:
            print('Failed to send data:', e)

    else:
        print('Failed to get reading. Try again!')

    # Wait for 2 seconds before the next reading
    time.sleep(2)

```

{% endcode %}

{% hint style="info" %}
Don't forget to enter the device **URL** in the antares\_url section and the **access-key** in the **x-m2m-origin** section according to the **Antares IoT Platform**. Make sure there are no programme writing errors and pay attention to the indentation.After successfully inputting the programme code, the display will be as shown below.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/kSIKVkcnPXWDHweNiumm/9_DHT%20kode.png" alt=""><figcaption><p>Program Code that has been Inputted to Python File</p></figcaption></figure>

{% hint style="info" %}
After you have successfully inputted the programme code, next you need to save the Python file by pressing **Ctrl + X > Y > Enter**.
{% endhint %}

### 10. Executing Python Files

After the Node.js Request file has been successfully saved. Next you can execute the file by typing the following syntax in the terminal.

```
python your-file-name.py
```

{% hint style="info" %}
Don't forget to change **your-file-name** according to the name created earlier.
{% endhint %}

After the Python file is executed, the display on the terminal will be as shown below.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/agEUcaBj2CdhxEqx0REV/10_Output%20DHT.png" alt=""><figcaption><p>Terminal Output when Python FIle is Executed</p></figcaption></figure>

{% hint style="info" %}
The image above shows that the **DHT11 sensor** has been able to read the **temperature** and **humidity data**. The data has also been successfully sent to the Antares IoT Platform with the message **"Data sent successfully"**
{% endhint %}

### 11. Check Data on Antares IoT Platform

To ensure that the temperature and humidity data has been sent to the Antares IoT Platform, you can open your device URL. The following image shows the display on the Antares IoT Platform that has received data from the Raspberry Pi.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/iDk3Lhi1IKg4VmT5YxCc/monitoring%20RASP.png" alt=""><figcaption><p>Display on Antares IoT Platform that has Received Data from Raspberry Pi</p></figcaption></figure>
