| Crates.io | dht11-driver |
| lib.rs | dht11-driver |
| version | 0.1.2 |
| created_at | 2025-12-21 15:51:32.125868+00 |
| updated_at | 2025-12-21 16:17:44.074552+00 |
| description | A platform-agnostic no-std driver for the DHT11 sensor using typestates for safety. |
| homepage | |
| repository | https://github.com/Wkesther2/dht11-driver-rust.git |
| max_upload_size | |
| id | 1998158 |
| size | 2,116,502 |
This project provides a highly optimized, no_std Rust driver for the DHT11 temperature and humidity sensor.
Designed with safety and precision in mind, it supports both hardware-accelerated timing via ARM DWT and a portable software-based timing engine.
| Component | Description |
|---|---|
| Agnostic | Platform-independent core; works on any MCU via embedded-hal. |
| Safety | Uses Typestates to prevent reading from an uninitialized sensor. |
| Precision | DWT hardware support for sub-microsecond pulse measurement. |
| Observability | Native integration with defmt for zero-overhead logging. |
βββ dht11-driver/
βββ src/
β βββ lib.rs # Core driver and Typestate logic
β βββ examples/ # STM32F407 reference implementations
β βββ stm32f407_dwt.rs
β βββ stm32f407_no_dwt.rs
βββ .cargo/
β βββ config.toml # Runner & Linker settings
βββ Cargo.toml # Feature gate definitions
Add the library to your Cargo.toml:
[dependencies]
dht11-driver = "0.1.2"
Or use the cargo CLI:
cargo add dht11-driver
1. Sensor Connection: Connect the DHT11 DATA pin to PA0 on your STM32F407 Discovery/Black-Pill board.
2. Pull-Up Resistor: The DHT11 uses a single-wire bidirectional protocol. You must configure the pin as Open-Drain. A physical 4.7kΞ© to 10kΞ© pull-up resistor to VCC is highly recommended for signal integrity.
Running the Examples This repository includes pre-configured examples using probe-rs. Use the following commands to flash your board:
| Mode | Command | Active Features |
|---|---|---|
| High Precision | cargo run --example stm32f407f_dwt --features use-dwt | use-dwt, use-defmt |
| Universal Timing | cargo run --example stm32407f_no_dwt | use-defmt |
Typestate Safety
To eliminate logic errorsβsuch as attempting to read data before the sensor has finished its 2-second power-on stabilizationβthis driver implements the Typestate Pattern. The sensor object transitions through different types in your code:
// 1. Create the driver in 'Uninitialized' state
let dht11 = DHT11::new(pin, clocks.sysclk());
// 2. Initialize
// This consumes the old state and returns the 'Initialized' version
let mut dht11 = dht11.initialize(&mut delay).expect("Initialization failed");
// 3. Only now is the .read_temp_and_hum() method available in your IDE!
let measurement = dht11.read_temp_and_hum(&mut delay);
Distributed under the MIT License. See the LICENSE file for more information.