dht11-driver

Crates.iodht11-driver
lib.rsdht11-driver
version0.1.2
created_at2025-12-21 15:51:32.125868+00
updated_at2025-12-21 16:17:44.074552+00
descriptionA platform-agnostic no-std driver for the DHT11 sensor using typestates for safety.
homepage
repositoryhttps://github.com/Wkesther2/dht11-driver-rust.git
max_upload_size
id1998158
size2,116,502
Gabriel Zuser (Wkesther2)

documentation

README

🌑️ dht11-driver

rust embedded stm32


πŸ“– Table of Contents


πŸ“ Overview

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.


πŸ“¦ Features

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.

πŸ“‚ Repository Structure

└── 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

πŸš€ Getting Started

1. Installation

Add the library to your Cargo.toml:

[dependencies]
dht11-driver = "0.1.2"

Or use the cargo CLI:

cargo add dht11-driver

2. Hardware Setup (STM32F407)

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

πŸ›  Technical Details

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);

πŸ“– License

Distributed under the MIT License. See the LICENSE file for more information.

Commit count: 0

cargo fmt