mirror of
https://github.com/OMGeeky/homecontrol.esp-sensors.git
synced 2025-12-26 17:02:29 +01:00
4.8 KiB
4.8 KiB
DHT22 Sensor Implementation for ESP32
This document provides information about the DHT22 sensor implementation for ESP32 microcontrollers in this project.
Overview
The DHT22 (also known as AM2302) is a digital temperature and humidity sensor that provides high-precision temperature and humidity readings. This implementation allows you to easily integrate DHT22 sensors with your ESP32 projects using MicroPython.
Features
- Temperature readings in Celsius or Fahrenheit
- Humidity readings as percentage
- Automatic detection of simulation vs. hardware mode
- Error handling for sensor reading failures
- Temperature unit conversion methods
- Comprehensive metadata including sensor type and last readings
- Configuration-based initialization
- Separate configuration options for temperature and humidity components
- Inherits functionality from both TemperatureSensor and HumiditySensor classes
Hardware Requirements
- ESP32 microcontroller
- DHT22/AM2302 temperature and humidity sensor
- MicroPython firmware installed on the ESP32
- Appropriate wiring:
- Connect VCC to 3.3V or 5V power supply
- Connect GND to ground
- Connect DATA to a GPIO pin (default is GPIO4)
- A 10K pull-up resistor between VCC and DATA is recommended
Software Dependencies
- MicroPython with
dhtandmachinemodules - For simulation mode, only the standard Python libraries are required
Usage
Basic Usage
from src.esp_sensors.dht22 import DHT22Sensor
# Initialize the sensor
sensor = DHT22Sensor("living_room", 4) # name, GPIO pin
# Read temperature
temperature = sensor.read()
print(f"Temperature: {temperature}°C")
# Read humidity
humidity = sensor.read_humidity()
print(f"Humidity: {humidity}%")
# Get temperature in Fahrenheit
fahrenheit = sensor.to_fahrenheit()
print(f"Temperature: {fahrenheit}°F")
Configuration-Based Usage
from src.esp_sensors.dht22 import DHT22Sensor
# Initialize using configuration
sensor_config = {
"name": "bedroom",
"pin": 5,
"interval": 30,
"temperature": {
"name": "Bedroom Temperature",
"unit": "F"
},
"humidity": {
"name": "Bedroom Humidity"
}
}
sensor = DHT22Sensor(sensor_config=sensor_config)
Advanced Usage
from src.esp_sensors.dht22 import DHT22Sensor
import time
# Initialize with custom parameters
sensor = DHT22Sensor(
name="outdoor",
pin=5,
interval=30, # Read every 30 seconds
temperature_unit="F" # Use Fahrenheit
)
# Continuous reading
try:
while True:
temp = sensor.read()
humidity = sensor.read_humidity()
# Get metadata
metadata = sensor.get_metadata()
print(f"Sensor: {metadata['name']}")
print(f"Temperature: {temp}°F ({sensor.to_celsius()}°C)")
print(f"Humidity: {humidity}%")
time.sleep(metadata['interval'])
except KeyboardInterrupt:
print("Monitoring stopped")
API Reference
Class: DHT22Sensor
Extends both the TemperatureSensor and HumiditySensor classes to provide DHT22-specific functionality for reading both temperature and humidity from a single sensor.
Constructor
DHT22Sensor(
name: str = None,
pin: int = None,
interval: int = None,
temperature_unit: str = None,
sensor_config: Dict[str, Any] = None
)
- name: A string identifier for the sensor (if None, loaded from config)
- pin: The GPIO pin number the sensor is connected to (if None, loaded from config)
- interval: Reading interval in seconds (if None, loaded from config)
- temperature_unit: Temperature unit, either "C" for Celsius or "F" for Fahrenheit (if None, loaded from config)
- sensor_config: Sensor configuration dictionary (if provided, used instead of loading from file)
Methods
- read(): Reads the current temperature and updates humidity
- read_temperature(): Reads the current temperature (same as read())
- read_humidity(): Returns the current humidity reading
- to_fahrenheit(): Converts the last reading to Fahrenheit if it was in Celsius
- to_celsius(): Converts the last reading to Celsius if it was in Fahrenheit
- get_metadata(): Returns a dictionary with sensor information including temperature unit and humidity
- apply_parameters(): Internal method to apply configuration parameters
Example
See the examples/dht22_example.py file for a complete example of how to use the DHT22 sensor with an ESP32.
Troubleshooting
- No readings or errors: Check your wiring and ensure the DHT22 is properly connected
- Inconsistent readings: Make sure you have a pull-up resistor between VCC and DATA
- ImportError: Ensure you're running on MicroPython with the required modules
- ValueError: Check that you're using a valid temperature unit ("C" or "F")
License
This implementation is provided under the same license as the main project.