Master DHT11 to Firebase ESP8266 and ESP32 Beginner’s Guide to Send Data & Display on Website (2025)
, , ,

Master DHT11 to Firebase ESP8266 and ESP32 | Beginner’s Guide to Send Data & Display on Website (2025)

Learn how to connect Wi-Fi, read Master DHT11 to Firebase ESP8266 and ESP32 Beginner’s Guide to Send Data & Display on Website (2025), and display temperature & humidity data live on your custom HTML/CSS/JS website. Learn how to read temperature & humidity from a DHT11 using ESP8266/ESP32, send it to Firebase Realtime Database over Wi-Fi, and display live readings on a custom HTML/CSS/JS website. Full code, wiring diagram, and SEO tips included.

Master DHT11 to Firebase ESP8266 and ESP32

Quick overview (What you’ll build for DHT11 to Firebase ESP8266 and ESP32 )

  1. ESP8266/ESP32 reads temperature & humidity from a DHT11 sensor.
  2. Device connects to your Wi-Fi and posts JSON data to Firebase Realtime Database.
  3. A simple web app (HTML/CSS/JS) reads the Firebase data and displays it live.
    This is a common workflow for hobby IoT dashboards. (Random Nerd Tutorials)

Prerequisites of DHT11 to Firebase ESP8266 and ESP32

  • Hardware: ESP8266 NodeMCU (or ESP32), DHT11 sensor, jumper wires, breadboard, micro USB cable.
  • Software: Arduino IDE (or PlatformIO), DHT library (by Adafruit or other), WiFi and HTTP client libraries (built into ESP cores), Firebase Realtime Database (a Firebase project).
  • Basic familiarity with Arduino IDE and creating a Firebase project in the Firebase console. Helpful tutorials use these exact stacks. (Random Nerd Tutorials, Instructables)

Hardware wiring (simple)

  • DHT11 VCC → 3.3V (or 5V depending on module; NodeMCU uses 3.3V recommended)
  • DHT11 GND → GND
  • DHT11 DATA → D2 (GPIO4) on NodeMCU (or any digital pin on ESP32)
  • If module has a pull-up resistor, fine; if not, add a 4.7k–10k pull-up between DATA and VCC.
    This wiring pattern is standard for NodeMCU+DHT setups. (Instructables, iotbyhvm.ooo)

Step 1 : Create Firebase project & Realtime Database

  1. Go to [Firebase console] and create a new project.
  2. In “Build → Realtime Database” create a database and start in test mode for development (this allows reads/writes from the device). Important: test mode is insecure — switch to proper rules and auth before production.
  3. Note your database URL, it looks like https://your-project-id-default-rtdb.firebaseio.com/. You’ll use this as the base URL to POST JSON.
    (Using Realtime Database + direct REST writes or Firebase libraries is the common approach for IoT devices). (Random Nerd Tutorials)

Security note: For production, secure your database with rules or use authenticated tokens. Tutorials often use test mode for beginners to simplify setup. (Random Nerd Tutorials)

Step 2 : ESP code (NodeMCU / ESP8266 example using Arduino IDE)

This example uses the DHT library + ESP8266HTTPClient to POST via Firebase REST API. Replace placeholders (SSID, PASSWORD, FIREBASE_URL) with your info.

/* DHT11 -> Firebase (ESP8266) example
   Requires libraries:
   - DHT sensor library (by Adafruit) or similar
   - ESP8266WiFi (built-in)
   - ESP8266HTTPClient (built-in)
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>    // optional but convenient
#include <DHT.h>

#define DHTPIN D2           // data pin (change if needed)
#define DHTTYPE DHT11       // DHT 11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASS";
const char* firebaseUrl = "https://your-project-id-default-rtdb.firebaseio.com/"; // trailing slash

unsigned long lastSend = 0;
const unsigned long sendInterval = 15000; // 15s

void setup() {
  Serial.begin(115200);
  delay(100);
  dht.begin();
  WiFi.begin(ssid, password);
  Serial.print("Connecting WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected, IP: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (millis() - lastSend < sendInterval) return;
  lastSend = millis();

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed reading DHT sensor!");
    return;
  }

  // Build JSON
  String payload = "{";
  payload += "\"temperature\":" + String(t, 2) + ",";
  payload += "\"humidity\":" + String(h, 2) + ",";
  payload += "\"ts\":" + String(millis());
  payload += "}";

  // Firebase REST: POST to /readings.json to push a new node
  String url = String(firebaseUrl) + "readings.json"; // test mode (no auth)
  Serial.println("POST to: " + url);
  Serial.println(payload);

  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(url);
    http.addHeader("Content-Type", "application/json");
    int httpCode = http.POST(payload);
    if (httpCode > 0) {
      String resp = http.getString();
      Serial.printf("HTTP %d: %s\n", httpCode, resp.c_str());
    } else {
      Serial.printf("Failed, error: %s\n", http.errorToString(httpCode).c_str());
    }
    http.end();
  } else {
    Serial.println("WiFi not connected");
  }
}

Notes:

  • This uses the Realtime Database REST API (push to readings.json) — many community tutorials use the same method for simplicity. (How2Electronics, Instructables)
  • For ESP32, replace include/wifi classes accordingly and D2 pin selection may differ. See RandomNerdTutorials for ESP32 variants. (Random Nerd Tutorials)

Step 3 : Verify data in Firebase console

Open your Firebase Realtime Database in the console; you should see a /readings node with auto-generated keys and JSON objects containing temperature, humidity, and ts. This confirms successful writes. Many tutorials use this verify step. (Random Nerd Tutorials)

Step 4 : Simple web app to display readings (HTML/CSS/JS)

You can either:

  • Use Firebase Web SDK (recommended) to read Realtime Database easily and show live updates; or
  • Use REST calls from JS to pull latest data periodically.

Below is a minimal Firebase Web SDK example (place in index.html). Replace the firebaseConfig object with your project config (found in Firebase console → Project settings → SDK setup):

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="description" content="Live DHT11 dashboard using Firebase Realtime Database">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <title>DHT11 Firebase Dashboard</title>
  <style>
    body{font-family:Arial,Helvetica,sans-serif;display:flex;flex-direction:column;align-items:center;padding:2rem;}
    .card{border-radius:8px;padding:1rem;box-shadow:0 6px 18px rgba(0,0,0,0.08);width:320px;text-align:center;}
    .big{font-size:2.4rem;font-weight:600;}
    .small{color:#666}
  </style>
</head>
<body>
  <div class="card">
    <div class="big" id="temp">-- °C</div>
    <div class="small">Temperature</div>
  </div>
  <div style="height:12px"></div>
  <div class="card">
    <div class="big" id="hum">-- %</div>
    <div class="small">Humidity</div>
  </div>

  <!-- Firebase SDK -->
  <script src="https://www.gstatic.com/firebasejs/9.22.0/firebase-app-compat.js"></script>
  <script src="https://www.gstatic.com/firebasejs/9.22.0/firebase-database-compat.js"></script>
  <script>
    // Replace with your Firebase config
    const firebaseConfig = {
      apiKey: "YOUR_API_KEY",
      authDomain: "YOUR_PROJECT.firebaseapp.com",
      databaseURL: "https://your-project-id-default-rtdb.firebaseio.com",
      projectId: "YOUR_PROJECT",
      storageBucket: "YOUR_PROJECT.appspot.com",
      messagingSenderId: "SENDER_ID",
      appId: "APP_ID"
    };
    firebase.initializeApp(firebaseConfig);
    const db = firebase.database();

    // Listen for last reading (assumes readings/child push used in the device)
    const readingsRef = db.ref('readings'); 
    // We'll query the last item:
    readingsRef.limitToLast(1).on('child_added', snapshot => {
      const data = snapshot.val();
      if (data) {
        document.getElementById('temp').textContent = (data.temperature || '--') + " °C";
        document.getElementById('hum').textContent = (data.humidity || '--') + " %";
      }
    });
  </script>
</body>
</html>

Why this works: The Firebase Web SDK keeps a realtime socket to the DB and updates the DOM when new readings arrive. This is the same approach used in many Firebase IoT dashboards. (Random Nerd Tutorials)

Common errors & troubleshooting ESP8266 and ESP32

  • Wi-Fi won’t connect: check SSID/password, check 3.3V vs 5V for modules.
  • DHT readings nan: ensure correct wiring and a short delay after dht.begin(). DHT11 is slow (max ~1Hz).
  • Firebase write errors (403): database rules might block unauthenticated writes — either open test mode (dev only) or implement auth. Tutorials warn about test mode. (Instructables, Arduino Forum)

FAQ of DHT11 to Firebase

Q: Do I need a Firebase paid plan?

A: No — Firebase Realtime Database has a free tier sufficient for small hobby projects. For production and heavy write/read operations, consider billing & quotas. (Random Nerd Tutorials)


Q: Can I use DHT22 instead of DHT11?

A: Yes — DHT22 gives better accuracy and range; switch DHTTYPE and wiring as needed. Many guides use either sensor. (Random Nerd Tutorials)

Q: Is it safe to keep DB in test mode?

A: No — test mode is insecure. Use Firebase rules and authentication for production. (Random Nerd Tutorials)

Sources & references (most useful tutorials / examples I consulted)

Leave a Reply

Your email address will not be published. Required fields are marked *