4个版本 (破坏性更新)
0.4.0 | 2024年1月9日 |
---|---|
0.3.0 | 2023年11月4日 |
0.2.0 | 2023年1月2日 |
0.1.1 | 2022年5月31日 |
0.1.0 |
|
#339 在 嵌入式开发
12KB
206 代码行
dht-embedded
dht-embedded
是一个Rust包,用于从DHT11和DHT22传感器读取温度和湿度数据。
先决条件
- 您已经使用GPIO引脚将DHT传感器连接到您的设备(如Raspberry Pi或ESP32)。
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
dht-embedded = "0.4"
此包依赖于稳定的 embedded-hal
1.x系列。
您需要为您的硬件使用一个 embedded-hal
实现。以下是一个简单的使用 linux-embedded-hal
和 gpio-cdev
的实现,这可以在Raspberry Pi上使用。
use dht_embedded::{Dht22, DhtSensor, NoopInterruptControl};
use gpio_cdev::{Chip, LineRequestFlags};
use linux_embedded_hal::{CdevPin, Delay};
use std::{thread::sleep, time::Duration};
fn main() -> anyhow::Result<()> {
let mut gpiochip = Chip::new("/dev/gpiochip0")?;
let line = gpiochip.get_line(17)?;
let handle = line.request(LineRequestFlags::INPUT | LineRequestFlags::OUTPUT, 1, "dht-sensor")?;
let pin = CdevPin::new(handle)?;
let mut sensor = Dht22::new(NoopInterruptControl, Delay, pin);
loop {
match sensor.read() {
Ok(reading) => println!("{}°C, {}% RH", reading.temperature(), reading.humidity()),
Err(e) => eprintln!("Error: {}", e),
}
sleep(Duration::from_millis(2100));
}
}
请注意,如果您的硬件支持,您应该将GPIO引脚设置为“开漏”模式。
(诚实地讲,Linux内核包括DHT传感器的驱动程序,而且诚实地讲,使用该驱动程序可能更好,因为内核空间可以禁用中断并获得比我们更精确的计时。)
原因
在crates.io上的搜索可能会找到这个驱动程序的几种不同实现。我写这个是因为其他的都不适用于我,而且在检查它们的代码后,我发现它们使用了完全不同的从传感器读取的协议,这些协议我在任何地方都找不到文档化的应该工作的方式。这个包实现了其中一种简单的协议,不需要访问系统时钟,但似乎在大多数情况下都能正常工作。
依赖项
~56KB