ESP32 DHT Server: Monitoring Temperature and Humidity

The “ESP32 DHT Server: Monitoring Temperature and Humidity” project involves using an ESP32 microcontroller and a DHT11 sensor to monitor temperature and humidity. The ESP32 connects to a Wi-Fi network and hosts a web page that displays real-time data from the sensor. This allows users to check the temperature and humidity from any device connected to the same network.

First, the ESP32 is set up to connect to a Wi-Fi network using the provided SSID and password. Once connected, it starts an HTTP server and sets up a route to handle requests. The server reads temperature and humidity data from the DHT11 sensor and generates an HTML page displaying the current readings. The web page refreshes every four seconds to provide up-to-date information.

This project demonstrates how to use the ESP32 to create a simple IoT device that monitors environmental conditions. By connecting to the internet and displaying data on a web page, it provides an easy and accessible way to check real-time temperature and humidity levels.

Components:

Connection:

  • VCC (+ symbol) → 3.3V on ESP32
  • GND (– symbol) → GND on ESP32
  • DHT11 data pin(out symbol) → GPIO 26 on ESP32

Note:

  • Install the “Esp32” in board manager (click the board NodeMCU-32S)
  • Install the “DHT sensor library” by Adafruit
  • Change the SSID according to the Wifi name and password of networks of yours.

Code:

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <DHT.h>

const char *ssid = "CIRCUIT.ROCKS";  /*Change according to your WIFI name network*/
const char *password = "abcdefghij"; /*Change according to your WIFI pass network*/

WebServer server(80);
DHT dht(26, DHT11);

void handleRoot() {
  char msg[1500];

  snprintf(msg, 1500,
           "<html>\
  <head>\
    <meta http-equiv='refresh' content='4'/>\
    <meta name='viewport' content='width=device-width, initial-scale=1'>\
    <link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.7.2/css/all.css' integrity='sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr' crossorigin='anonymous'>\
    <title>ESP32 DHT Server</title>\
    <style>\
    html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center;}\
    h2 { font-size: 3.0rem; }\
    p { font-size: 3.0rem; }\
    .units { font-size: 1.2rem; }\
    .dht-labels{ font-size: 1.5rem; vertical-align:middle; padding-bottom: 15px;}\
    </style>\
  </head>\
  <body>\
      <h2>ESP32 DHT Server: Monitoring Temperature and Humidity</h2>\
      <p>\
        <i class='fas fa-thermometer-half' style='color:#ca3517;'></i>\
        <span class='dht-labels'>Temperature</span>\
        <span>%.2f</span>\
        <sup class='units'>&deg;C</sup>\
      </p>\
      <p>\
        <i class='fas fa-tint' style='color:#00add6;'></i>\
        <span class='dht-labels'>Humidity</span>\
        <span>%.2f</span>\
        <sup class='units'>&percnt;</sup>\
      </p>\
      <h23>@ circuitrocks</h3>\
  </body>\
</html>",
           readDHTTemperature(), readDHTHumidity()
          );
  server.send(200, "text/html", msg);
}

void setup(void) {

  Serial.begin(115200);
  dht.begin();
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("circuitrocks")) {
    Serial.println("MDNS responder started");
  }
  server.on("/", handleRoot);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  server.handleClient();
  delay(2);//allow the cpu to switch to other tasks
}


float readDHTTemperature() {
  // Sensor readings may also be up to 2 seconds
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  if (isnan(t)) {    
    Serial.println("Failed to read from DHT sensor!");
    return -1;
  }
  else {
    Serial.println(t);
    return t;
  }
}

float readDHTHumidity() {
  // Sensor readings may also be up to 2 seconds
  float h = dht.readHumidity();
  if (isnan(h)) {
    Serial.println("Failed to read from DHT sensor!");
    return -1;
  }
  else {
    Serial.println(h);
    return h;
  }
}

Troubleshooting:

  • Double-check your hardware connections to ensure they are correct. Verify that the DHT11 sensor is connected properly to the ESP32 board and that there are no loose connections or wiring.
  • Look for any error messages or warnings that are output to the Arduino IDE’s Serial Monitor when you run your code. These messages can provide valuable information about what might be going wrong.
  • If possible, test each component of your setup individually to ensure they are functioning correctly. For example, you can write a separate test sketch to verify that the DHT11 sensor is reading temperature and humidity data accurately.
  • Review your code logic to ensure it is correct and follows the intended flow. Check for any logical errors or typos.
  • Ensure that you are using any required libraries correctly and that they are compatible with your hardware and software setup. Double-check library documentation and usage examples for any specific requirements or configuration settings.
See also  Touchscreen Drawing Demo with ILI9341 Display

QUICK LINKS:

GITHUB reference