# DHT11 Temperature & Humidity Sensor for ESP32-C3 ESP-IDF project that reads temperature and humidity data from a DHT11 sensor and prints it to the serial console. ## Overview This project reads data from a **DHT11** digital temperature and humidity sensor using the ESP32-C3 microcontroller. It implements the DHT11 communication protocol in software, reads sensor values every 5 seconds, validates the checksum, and displays: - Current date and time (derived from compile time) - Chip information (model, cores, features, flash size, silicon revision) - Humidity percentage with 1 decimal place - Temperature in Celsius with 1 decimal place - Checksum validation status ## Hardware Requirements | Component | Details | |-----------|---------| | Microcontroller | ESP32-C3 | | Sensor | DHT11 (AM2302) | | Connection | Single wire + pull-up resistor | | Data Pin | **GPIO 0** (configurable in `main/main.c`) | | Resistor | 4.7kΩ - 10kΩ pull-up between VCC and DATA | - [Datasheet ESP32-C3 Super Mini](https://www.espboards.dev/esp32/esp32-c3-super-mini/) - [Datasheet DHT11 Supplier](https://asairsensors.com/product/dht11-sensor/) - [Datasheet DHT11 Protocol](https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf?srsltid=AfmBOoqtetK1e7kNT-24HGdKDaQMV55sFB9Yr4rK94icO4YI94qwFuFz) - [ESP IDF get started](https://docs.espressif.com/projects/esp-idf/en/v6.0/esp32c3/get-started/linux-macos-start-project.html) ### Wiring Diagram ``` DHT11 ESP32-C3 VCC ------ 3V3 DATA ----- GPIO0 GND ------ GND ``` Add a **4.7kΩ pull-up resistor** between VCC and DATA pin. ## Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----- | -------- | -------- | -------- | -------- | | ❌ | ❌ | ✅ | ❌ | ❌ | ## Project Structure ``` dht11_reader/ ├── CMakeLists.txt # Project configuration ├── sdkconfig # Build configuration ├── main/ │ ├── CMakeLists.txt # Main component configuration │ └── main.c # Application source code └── README.md # This file ``` ## Setup & Build ### Prerequisites - [ESP-IDF v6.0](https://docs.espressif.com/projects/esp-idf/en/v6.0/esp32c3/get-started/index.html) - RISC-V toolchain (riscv32-esp-elf) - Python 3.13+ with virtual environment ### Build Instructions ```bash # Activate ESP-IDF environment source "$HOME/.espressif/tools/activate_idf_v6.0.sh" # Navigate to project cd temperature_measure # Build the project idf.py build # Flash to device (replace PORT with your serial port) idf.py -p /dev/ttyUSB0 flash monitor ``` ## Configuration The DHT11 data pin is defined in `main/main.c`: ```c #define DHT11_GPIO 0 ``` To use a different GPIO, change this define and rebuild. ### Reading Interval The sensor is read every 5 seconds: ```c vTaskDelay(pdMS_TO_TICKS(5000)); ``` Note: DHT11 requires at least 1 second between readings. Adjust as needed. ## How It Works ### DHT11 Communication Protocol 1. **Start Signal**: MCU pulls DATA line low for 20ms, then high 2. **Sensor Response**: DHT11 pulls line low for ~80μs, then high for ~80μs 3. **Data Transmission**: 40 bits of data (5 bytes) in the following format: - Byte 0: Humidity integer part - Byte 1: Humidity decimal part - Byte 2: Temperature integer part - Byte 3: Temperature decimal part - Byte 4: Checksum (sum of bytes 0-3) 4. **Bit Encoding**: Each bit starts with a ~50μs low pulse: - `0`: ~26-28μs high pulse - `1`: ~70μs high pulse ### Checksum Validation The checksum byte should equal the sum of the first 4 data bytes. If validation fails, the reading is retried after 1 second. ## Output Example ``` Time: 2024-04-24 22:30:00 This is esp32c3 chip with 1 CPU core(s), WiFi/BLE, silicon revision v0.4, 4MB embedded flash Minimum free heap size: 283488 bytes Humidity: 45.2% Temperature: 23.5°C Checksum valid: Yes ``` ## Troubleshooting ### Common Issues | Issue | Solution | |-------|----------| | No sensor readings / checksum fails | Check wiring: DATA to GPIO0, pull-up resistor present | | Build fails with missing component | Run `idf.py fullclean` then rebuild | | `driver/gpio.h` not found | Ensure `esp_driver_gpio` is in PRIV_REQUIRES | | Linker errors with `.riscv.attributes` | Your toolchain may be too new; use ESP-IDF 6.0 compatible version | ### Debug Mode To enable debug output: ```bash idf.py monitor ``` ### Hardware Connection Check Verify your wiring with a multimeter: - GPIO0 should read HIGH when idle (via pull-up) - 3V3 is supplying power - GND is properly connected ## Technical Details - **Sensor Range**: 0-50°C temperature, 20-90% humidity - **Accuracy**: ±1°C temperature, ±1% humidity - **Sampling Rate**: 1Hz maximum (1 reading per second) - **Resolution**: 1° C, 1% humidity ## License This project is provided under the **CC0-1.0** license (public domain). See the SPDX identifier in the source file. ## Resources - [DHT11 Datasheet](https://www.mouser.com/datasheet/2/718/DHT11-Technical-Data-Sheet-Translated-Version-1137654.pdf) - [ESP32-C3 Documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/) - [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-guides/index.html)