# Post DHT 11 Data with Push Button

In this project, you will use the **Antares Shield Workshop** on the **ESP8266** module. In this **Antares Shield Workshop**, there are temperature, humidity (DHT11), relay, LED and push button sensors. You will monitor the temperature and humidity with a push button as a trigger sender.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/o6XfAiaHoq7i5zrafATQ/wemosd1r2%20+antaresshield.jpeg" alt=""><figcaption><p>Picture of WEMOSD1R2 Attached to Antares Shield</p></figcaption></figure>

## 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="../../general-prerequisites-esp8266-wi-fi" %}
[general-prerequisites-esp8266-wi-fi](https://docs.antares.id/en/code-and-library-examples/esp8266-wi-fi/general-prerequisites-esp8266-wi-fi)
{% endcontent-ref %}

The additional materials specific to this project are as follows.

1. Shield Workshop Antares
2. Antares ESP HTTP Library. This documentation uses the **Antares ESP HTTP library version 1.4.0.**

{% hint style="info" %}
If you have not installed **Antares ESP HTTP 1.4.0**, please follow these steps.

[antares-wi-fi-http](https://docs.antares.id/en/getting-started/arduino-library-installation/antares-wi-fi-http "mention")
{% endhint %}

3. DHT11 Library. This documentation uses **DHT11 Sensor Library version 1.4.4.**

{% hint style="info" %}
If you have not installed the DHT11 Sensor Library version 1.4.4. you can follow the steps in the following link.

[dht11-sensor-library](https://docs.antares.id/en/getting-started/arduino-library-installation/dht11-sensor-library "mention")
{% endhint %}

## Follow These Steps

### **1.** Launch the Arduino IDE application

### **2.** Opening Sample Programme&#x20;

{% hint style="info" %}
You can open the programme code in the Arduino IDE via **File > Example > Antares ESP HTTP > ESP8266-Simple-Project > POST\_DATA\_DHT11\_PUSHBUTTON.**
{% endhint %}

Here is the programme code of the example **POST\_DATA\_DHT11\_PUSHBUTTON**

```cpp
#include <AntaresESPHTTP.h>  // Include the AntaresESP2866HTTP library for connecting to the Antares platform
#include "DHT.h"             // Include the DHT sensor library

#define DHTPIN D1      // Define the pin number for the DHT sensor (connected to pin D1)
#define DHTTYPE DHT11  // Define the DHT sensor type as DHT11

#define ACCESSKEY "YOUR-ACCESS-KEY"    // Replace with your Antares account access key
#define WIFISSID "YOUR-WIFI-SSID"      // Replace with your Wi-Fi SSID
#define PASSWORD "YOUR-WIFI-PASSWORD"  // Replace with your Wi-Fi password

#define projectName "YOUR-APPLICATION-NAME"  // Replace with the Antares application name that was created
#define deviceName "YOUR-DEVICE-NAME"        // Replace with the Antares device name that was created

AntaresESPHTTP antares(ACCESSKEY);  // Create an AntaresESP2866HTTP object to interact with Antares
DHT dht(DHTPIN, DHTTYPE);           // Create a DHT object for the DHT sensor

#define pushButtonPin A0  // Define the pin number for the push button (connected to pin 32)
#define ledPin D2         // Define the pin number for the LED (connected to pin 12)

bool ledState = false;         // Variable to store the state of the LED (ON or OFF)
bool lastButtonState = false;  // Variable to store the previous state of the push button

void setup() {
  Serial.begin(115200);    // Initialize serial communication with baudrate 115200
  antares.setDebug(true);  // Enable debug mode for AntaresESP32HTTP (messages will be displayed in the serial monitor)

  // Reset WiFi cache before connecting
  WiFi.disconnect();

  antares.wifiConnection(WIFISSID, PASSWORD);  // Connect to Wi-Fi with the specified SSID and password
  dht.begin();                                 // Initialize the DHT sensor

  pinMode(pushButtonPin, INPUT);  // Set the push button pin as input with internal pull-up resistor
  pinMode(ledPin, OUTPUT);        // Set the LED pin as output
  digitalWrite(ledPin, LOW);      // Turn off the LED initially
}

void loop() {
  // Read the current state of the push button
  int analogValue = analogRead(A0);
  bool currentButtonState = (analogValue < 512);  // Adjust the threshold as needed

  // Check if the button state has changed (button press detected)
  if (currentButtonState != lastButtonState && currentButtonState == LOW) {
    Serial.println("The button is pressed");

    // Toggle state of the LED (ON to OFF or OFF to ON)
    ledState = !ledState;
    digitalWrite(ledPin, ledState);

    // Read temperature and humidity from the DHT sensor
    float hum = dht.readHumidity();
    float temp = dht.readTemperature();

    // Check if the sensor reading is valid
    if (isnan(hum) || isnan(temp)) {
      Serial.println("Failed to read DHT sensor!");
      return;
    }

    // Print temperature and humidity values to the serial monitor
    Serial.println("Temperature: " + (String)temp + " *C");
    Serial.println("Humidity: " + (String)hum + " %");

    // Add temperature and humidity data to the Antares storage buffer
    antares.add("temperature", temp);
    antares.add("humidity", hum);

    // Send the data from the storage buffer to Antares
    antares.send(projectName, deviceName);

    // Add some delay to avoid multiple data sending due to button debouncing
    delay(1000);
  }

  // Update the last button state for the next iteration
  lastButtonState = currentButtonState;
}
```

### **3.** Set WiFi Credential and Antares Credential in Program Code

Change the HTTP Protocol parameters in the following variables **\*ACCESSKEY, \*WIFISSID, \*PASSWORD, \*projectName,** and **\*deviceName**. Adjust to the parameters in the Antares console.

```cpp
#define ACCESSKEY "YOUR-ACCESS-KEY"    // Replace with your Antares account access key
#define WIFISSID "YOUR-WIFI-SSID"      // Replace with your Wi-Fi SSID
#define PASSWORD "YOUR-WIFI-PASSWORD"  // Replace with your Wi-Fi password

#define projectName "YOUR-APPLICATION-NAME"  // Replace with the Antares application name that was created
#define deviceName "YOUR-DEVICE-NAME"        // Replace with the Antares device name that was created
```

{% hint style="info" %}
The **\*Access key** parameter is obtained from your Antares account page.
{% endhint %}

<figure><img src="https://3873791589-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7cujmJ5QHdJaAjH815aZ%2Fuploads%2FX67RygqohgwKEaIKSXAK%2Fimage.png?alt=media&#x26;token=aa42451b-44c7-413c-bee2-ff61fd0bd25e" alt=""><figcaption><p>Access Key Location on Antares Account Page</p></figcaption></figure>

{% hint style="info" %}
The **WIFISSID** parameter is obtained from the name of the **Wifi / Hotspot** that is currently being used by you. for example in the image below.
{% endhint %}

<div align="center" data-full-width="true"><figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/cFQiz9SqdaxrbPLOshZw/WIFI%20SSID.jpeg" alt="" width="375"><figcaption><p>The WiFi SSID being used.</p></figcaption></figure></div>

{% hint style="info" %}
The **\*PASSWORD** parameter is obtained from the **WiFi password** you are currently using.
{% endhint %}

{% hint style="info" %}
The parameters **\*projectName** and **\*deviceName** are obtained from the **Application Name** and **Device Name** that have been created in the Antares account.
{% endhint %}

<figure><img src="https://3873791589-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7cujmJ5QHdJaAjH815aZ%2Fuploads%2FNglOCdpOEyfm2lYCvelV%2Fimage.png?alt=media&#x26;token=ba5bf5e4-42e5-4efe-868b-8bb291aab849" alt=""><figcaption><p>Application Name Display</p></figcaption></figure>

<figure><img src="https://3873791589-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7cujmJ5QHdJaAjH815aZ%2Fuploads%2FbxPzN3LE6NAmTL43q0zN%2Fimage.png?alt=media&#x26;token=5163678c-df69-47b4-be2c-57c3e83623ae" alt=""><figcaption><p>Device Name Display</p></figcaption></figure>

### **4. Compile and Upload Program**

Connect **ESP 8266 WEMOS D1R2** with your computer and make sure the **Communication Port** is read.

{% hint style="info" %}
On Windows operating systems, the check can be done via **Device Manager**. If your **ESP 8266 WEMOS D1R2** is read, the **USB-Serial CH340** appears with the port adjusting the port availability (in this case it reads **COM4**).
{% endhint %}

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/y3Gzw98QKejUJsM4bvuv/Device%20Manager%20Windows.jpeg" alt=""><figcaption><p>Device Manager image on Windows.</p></figcaption></figure>

Set up the **ESP8266 WEMOS D1R2** board by clicking **Tools > Board > esp8266** in the Arduino IDE, then make sure the one used is **LOLIN (WEMOS) D1 R2 & min**i. Select the port according to the communication port that is read (in this case COM4). The result will look like the following picture.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/UxsOFPCiTXzkJzl7HOeN/Menu%20Tools%20Arduino%20IDE.jpeg" alt="" width="563"><figcaption><p>Image of Tools Menu on Arduino IDE</p></figcaption></figure>

After all the setup is complete, upload the programme by pressing the arrow icon as shown below. Wait for the compile and upload process to finish.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/hfOs6lH2flq2fSxiEMri/Icon%20Verify%20dan%20Upload%20pada%20Arduino%20IDE.jpeg" alt=""><figcaption><p>Image of the Verify and Upload icons in the Arduino IDE.</p></figcaption></figure>

{% hint style="info" %}
**The Tick icon** on the Arduino IDE is just the verify process. Usually used to **compile** the programme to find out if there are errors or not. \
**The arrow icon** on the Arduino IDE is the verify and upload process. Usually used to **compile** the programme as well as flash the programme on the target board.
{% endhint %}

If the programme upload is successful, it will look like the following image.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/dn8hzyGaz0jhfvz2At7H/Halaman%20Arduino%20IDE%20Setelah%20Upload%20Berhasil.jpeg" alt=""><figcaption><p>Arduino IDE page image after successful upload.</p></figcaption></figure>

After uploading the programme, you can view the **serial monitor** to debug the programme. The **serial monitor** icon is shown in the following image.

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/qhZf2zTKMQOpSMphjTLN/Icon%20Serial%20Monitor%20pada%20Arduino%20IDE.jpeg" alt=""><figcaption><p>Image of the Serial Monitor Icon in the Arduino IDE.</p></figcaption></figure>

Set the **serial baud** **rate** to 115200 and select BothNL & CR. The result will look like the following image.

{% hint style="danger" %}
Make sure the **serial baud rate** matches the value defined in the programme code. If the **serial baud rate** is not the same between **the programme code** and **the serial monitor**, the ASCII characters will not be read properly.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/7cujmJ5QHdJaAjH815aZ/blobs/sweaSml3XD3OIy3WgwGe/Serial%20Monitor%20POST%20DHT11%20Pushbutton.jpeg" alt=""><figcaption><p>Serial Monitor Image</p></figcaption></figure>

### **5.** Check Data in Antares

After uploading the programme successfully, then open the device antares page and see if the data has been successfully sent.

<figure><img src="https://3873791589-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7cujmJ5QHdJaAjH815aZ%2Fuploads%2Fz4x8ygbZ70J9YuQOK8Ln%2Fimage.png?alt=media&#x26;token=c624f1f3-15cf-411f-a6ef-f1d113e70dd8" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3873791589-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7cujmJ5QHdJaAjH815aZ%2Fuploads%2FbQVFb3nQliSzIJ5CsVSx%2Fimage.png?alt=media&#x26;token=195eb38d-d320-4434-86c4-5d7fd0e83452" alt=""><figcaption><p>Console Page Image When Data Successfully Received</p></figcaption></figure>

{% hint style="info" %}
Data sent from **ESP8266** with HTTP protocol in the form of temperature and humidity variables.
{% endhint %}
