The DHT11 sensor module is the ubiquitous blue, low-cost temperature and humidity sensor found in almost every beginner's electronics kit. While it is cheap (typically $1.50 to $3.00 for the PCB module), its unconventional communication protocol trips up many makers transitioning from standard I2C or analog sensors. The direct answer to "what does it output?" is that the DHT11 does not output an analog voltage or an I2C data stream. It outputs a single-wire digital serial signal using a proprietary, timing-dependent microsecond protocol.

DHT11 Sensing Principle and Electrical Output

Inside the blue plastic housing, the DHT11 uses a composite NTC (Negative Temperature Coefficient) thermistor for temperature measurement and a resistive polymer/ceramic moisture-holding substrate for humidity. As ambient moisture increases, the substrate absorbs water vapor, which lowers its electrical resistance. Simultaneously, the NTC thermistor's resistance drops as the ambient temperature rises.

However, you never interact with these analog resistance changes directly. The module contains an internal 8-bit microcontroller that samples the analog resistance, digitizes it, and transmits a 40-bit data packet over a single GPIO pin. Because the output is a digital single-bus protocol, you cannot read it with a multimeter or an oscilloscope expecting a steady DC voltage; you must bit-bang the GPIO pin or use a hardware timer to capture the precise microsecond pulse widths.

Hardware Specifications and Wiring Pinout

Before wiring the module, it is critical to understand its environmental and electrical limits. The DHT11 is strictly an indoor, room-temperature sensor. Pushing it beyond its spec sheet guarantees saturated readings or permanent damage to the polymer substrate.

DHT11 Hardware and Environmental Specifications
Parameter Min Value Max Value Unit / Notes
Operating Voltage 3.3 5.5 V DC (3.3V safe for ESP32/RPi)
Temperature Range 0 50 °C (No sub-zero support)
Humidity Range 20 90 % RH (Condensation ruins sensor)
Resolution 1 1 1°C / 1% RH (Integer only)
Sampling Period 1 2 Seconds (Do not poll faster than 1Hz)
Standby Current - 100 µA
Measure Current - 2.5 mA (Peak during transmission)

Module Wiring and Pin Mapping

Most DHT11 modules sold today are 3-pin boards with a built-in 4.7kΩ pull-up resistor. If you are using the bare 4-pin component, you must add the pull-up resistor manually between VCC and DATA.

DHT11 Module Wiring for ESP32 and Arduino
Module Pin ESP32 DevKit V1 Pin Arduino Uno Pin Function & Notes
VCC (or +) 3V3 5V Supply range 3.3V-5.5V. 5V yields better rise times on long wires.
DATA (or OUT) GPIO 4 (or any) D2 (or any) Requires 4.7kΩ pull-up to VCC (usually on-module).
GND (or -) GND GND Common ground reference.
Bench Tip: If you are using a bare 4-pin DHT11 (not mounted on a PCB), looking at the sensor with the grille facing you, the pins from left to right are: 1: VCC, 2: DATA, 3: NC (No Connect), 4: GND. Swapping VCC and GND will instantly fry the internal 8-bit MCU.

Decoding the Output: Raw Signal Math and Timing

Because the DHT11 uses a single-bus protocol, the host microcontroller (your ESP32 or Arduino) must initiate the transfer and then listen for exactly 40 bits of data. The output signal math is straightforward because the DHT11 only outputs integers.

The 40-Bit Data Packet Structure

Every successful read yields 5 bytes (40 bits) in the following order:

  1. Byte 0: Relative Humidity Integer (e.g., 55)
  2. Byte 1: Relative Humidity Decimal (Always 0 on DHT11)
  3. Byte 2: Temperature Integer (e.g., 24)
  4. Byte 3: Temperature Decimal (Always 0 on DHT11)
  5. Byte 4: Checksum

Raw-to-Unit Math and Scaling

Unlike the DHT22, which requires you to divide the raw 16-bit integers by 10 to get the physical unit, the DHT11 scaling is 1:1.

Humidity (%RH) = Byte 0
Temperature (°C) = Byte 2

Checksum Validation Math:
To ensure data integrity over the noisy single-wire bus, you must verify the checksum. The sensor calculates this by adding the first four bytes and keeping the lowest 8 bits.

Checksum = (Byte 0 + Byte 1 + Byte 2 + Byte 3) & 0xFF
If your calculated checksum does not exactly match Byte 4, you must discard the reading and wait for the next 2-second polling window.

Microsecond Timing Sequence

According to the Adafruit DHT Sensor Guide, the timing sequence is rigid. To trigger a read:

  1. Host pulls the DATA line LOW for at least 18ms (18,000 µs).
  2. Host releases the line HIGH and switches the GPIO to input mode.
  3. Sensor pulls the line LOW for 80 µs, then HIGH for 80 µs (Acknowledge).
  4. Sensor transmits 40 bits. Each bit starts with a 50 µs LOW pulse. A '0' is represented by a 26-28 µs HIGH pulse, while a '1' is a 70 µs HIGH pulse.
Calibration Note: The DHT11 is factory-calibrated in a controlled chamber, and the calibration coefficients are permanently burned into the internal MCU's OTP memory. You cannot and do not need to apply software calibration offsets for standard room environments. However, because the sensor is notoriously noisy, you should implement a software moving-average filter (e.g., averaging the last 10 valid reads) to smooth out ±2°C jitter.

Common Interference Sources and Troubleshooting

If your serial monitor is spitting out NaN (Not a Number) or checksum errors, the issue is almost never a broken sensor. It is almost always a timing or electrical interference problem. Based on Espressif's ESP32 GPIO documentation, RTOS-based systems like the ESP32 are particularly vulnerable to single-bus timing disruptions.

Top 4 Interference Sources

  • RTOS Task Jitter (ESP32/RPi): The ESP32 runs FreeRTOS. If a Wi-Fi transmission or Bluetooth interrupt fires while the DHT11 is sending its 70 µs '1' pulse, the RTOS will pause your GPIO reading task. The host misses the pulse width, reads a '0', and the checksum fails. Fix: Disable interrupts during the 5ms read window, or use a dedicated hardware timer capture peripheral instead of software bit-banging.
  • Wire Capacitance: The single-bus protocol relies on fast rise times. If you run jumper wires longer than 2 meters, the parasitic capacitance of the wire slows the voltage rise from 0V to 3.3V. The host misinterprets the slow rise time as a longer pulse width. Fix: Keep wires under 1 meter, or drop the pull-up resistor from 4.7kΩ to 2.2kΩ to source more current and speed up the rise time.
  • Polling Too Fast: The internal MCU needs time to sample the analog substrate and reset. If you poll the sensor every 500ms, the internal MCU will lock up or return stale data from its previous cache. Fix: Enforce a strict delay(2000) or use a non-blocking millis() timer set to 2000ms minimum.
  • 3.3V Logic Thresholds: While the DHT11 operates at 3.3V, its output HIGH voltage might only reach 2.8V under load. Some 5V Arduinos require a minimum of 3.0V to register a logic HIGH. Fix: Power the DHT11 from the 5V rail when using a 5V Arduino Uno, even if the data line is shared.

When to Upgrade: DHT11 vs. Modern Alternatives

The DHT11 is fine for basic HVAC monitoring or classroom projects. If your project requires sub-zero temperatures, high precision, or fast sampling, you have outgrown it.

Sensor Comparison: DHT11 vs DHT22 vs BME280
Feature DHT11 DHT22 (AM2302) Bosch BME280
Protocol Single-Bus (Bit-bang) Single-Bus (Bit-bang) I2C / SPI
Temp Range 0 to 50 °C -40 to 80 °C -40 to 85 °C
Temp Resolution 1.0 °C 0.1 °C 0.01 °C
Humidity Accuracy ± 5% RH ± 2% RH ± 3% RH
Sampling Rate 1 Hz (1 sec) 0.5 Hz (2 sec) Up to 10 Hz
Typical Cost (2026) ~$1.50 ~$4.50 ~$6.00

For outdoor weather stations or incubator control where 0.1°C resolution matters, spend the extra $3.00 for a DHT22. If you are building an I2C sensor network on an ESP32 and want to eliminate single-bus timing headaches entirely, the BME280 is the industry standard upgrade, offering barometric pressure alongside highly stable temperature and humidity readings over a standard I2C bus.