Rust 语言 实现 ESP32 温湿度传感器读取 I2C 协议访问 DHT22

Rust阿木 发布于 1 天前 4 次阅读


ESP32 使用 DHT22 温湿度传感器读取的 Rust 代码实现

ESP32 是一款功能强大的低功耗微控制器,广泛应用于物联网(IoT)项目中。DHT22 是一款常见的温湿度传感器,通过 I2C 协议与 ESP32 进行通信。本文将使用 Rust 语言,结合 ESP-IDF(ESP32 的官方开发框架),实现 ESP32 通过 I2C 读取 DHT22 传感器的温湿度数据。

环境准备

在开始编写代码之前,我们需要准备以下环境:

1. ESP-IDF:ESP32 的官方开发框架,可以从官网下载并安装。
2. Rust:Rust 编程语言,可以从官网下载并安装。
3. VSCode:一款流行的代码编辑器,用于编写和调试 Rust 代码。

代码实现

1. 创建新项目

我们需要创建一个新的 Rust 项目。在命令行中,执行以下命令:

sh
cargo new esp32_dht22
cd esp32_dht22

2. 添加依赖

在 `Cargo.toml` 文件中,添加以下依赖:

toml
[dependencies]
esp-idf = { version = "0.9", features = ["i2c", "dht22"] }

3. 配置 I2C

在 `src/main.rs` 文件中,首先配置 I2C 通信接口:

rust
use esp_idf::i2c::{I2cDriver, I2cMode};
use esp_idf::prelude::;

[entry]
[esp::main]
fn main() -> esp_idf::Result {
// 初始化 ESP-IDF
esp_idf::init().unwrap();

// 创建 I2C 驱动
let i2c = I2cDriver::new(0).unwrap();
let mut i2c = i2c.init(i2c::I2cMode::Master).unwrap();

// 设置 I2C 参数
i2c.set_speed(i2c::I2cSpeed::Standard).unwrap();

// 获取 DHT22 传感器地址
let dht22_addr = 0x44;

Ok(())
}

4. 读取 DHT22 数据

接下来,我们需要编写读取 DHT22 传感器数据的函数:

rust
use esp_idf::i2c::{I2cDriver, I2cMode};
use esp_idf::prelude::;
use esp_idf::dht22::{Dht22, Dht22Config};

fn read_dht22_data(i2c: &mut I2cDriver) -> esp_idf::Result {
// 创建 DHT22 配置
let config = Dht22Config {
i2c_addr: dht22_addr,
i2c: i2c.clone(),
};

// 创建 DHT22 传感器实例
let mut dht22 = Dht22::new(config).unwrap();

// 读取温湿度数据
let (temp, hum) = dht22.read().unwrap();

Ok((temp, hum))
}

5. 主循环

在主循环中调用 `read_dht22_data` 函数,并打印读取到的温湿度数据:

rust
[entry]
[esp::main]
fn main() -> esp_idf::Result {
// 初始化 ESP-IDF
esp_idf::init().unwrap();

// 创建 I2C 驱动
let i2c = I2cDriver::new(0).unwrap();
let mut i2c = i2c.init(i2c::I2cMode::Master).unwrap();

// 设置 I2C 参数
i2c.set_speed(i2c::I2cSpeed::Standard).unwrap();

// 获取 DHT22 传感器地址
let dht22_addr = 0x44;

loop {
// 读取 DHT22 数据
let (temp, hum) = read_dht22_data(&mut i2c).unwrap();

// 打印温湿度数据
println!("Temperature: {} C", temp);
println!("Humidity: {} %", hum);

// 等待一段时间后再次读取
esp_idf::task::delay_for(esp_idf::time::Duration::from_millis(2000));
}
}

总结

本文介绍了如何使用 Rust 语言和 ESP-IDF 框架,实现 ESP32 通过 I2C 读取 DHT22 传感器的温湿度数据。通过以上步骤,我们可以轻松地将 ESP32 与 DHT22 传感器连接,并获取实时温湿度数据。在实际应用中,可以根据需求对代码进行修改和扩展,实现更丰富的功能。