I²C 传感器读取练习

在本练习中,我们将学习如何读取 I²C 总线上的传感器。

Rust ESP 开发板上有两个可以通过 I²C 总线读取的传感器

外设型号参考资料Crate地址
IMUICM-42670-PDatasheetLink0x68
温湿度SHTC3DatasheetLink0x70

任务是使用 crates.io 的现有驱动程序通过 I²C 读取温湿度传感器。之后,使用 shared-bus 通过同一 I²C 总线读取第二个传感器。

第一部分:读取温湿度

创建温湿度传感器 SHTC3 的实例,每 600 毫秒读取并打印湿度和温度值。

i2c-sensor-reading/examples/part_1.rs 包含第一部分的解答。要运行第一部分的解答:

cargo run --example part_1

i2c-sensor-reading/src/main.rs 包含代码框架,其中已经包含了第一部分所需的导入语句。

步骤:

✅ 进入 i2c-sensor-reading/ 目录,使用以下命令打开相关文档:

cargo doc --open

✅ 定义两个引脚,一个作为 SDA,一个作为 SCL。

信号GPIO
SDAGPIO10
SCLGPIO8

✅ 借助刚刚生成的文档,创建一个 I²C 外设的实例。频率使用 400 kHz。

✅ 使用驱动 crate shtcx,创建一个 SHTC3 传感器实例,将 I²C 实例传递给它们。查看文档以获取指导。

✅ 要检查传感器是否被正确寻址,可以读取它的设备 ID 并打印该值。

期望的输出:

Device ID SHTC3: 71

✅ 进行测量,读取传感器值并打印出来。查看文档以获取有关传感器的方法的指导。

期望的输出:

TEMP: [当地温度] °C
HUM: [当地湿度] %

❗ 一些传感器在测量和读取结果之间需要一点时间。 ❗ 注意数值单位!

💡 有一些方法可以将传感器值转换为所需的单位。

第二部分:读取加速度计数据

使用总线管理器,驱动第二个传感器。读出它的值并打印两个传感器的值。

从第一部分你自己的解答开始。或者也可以从第一部分提供的部分解答开始:i2c-sensor-reading/examples/part_1.rs

i2c-sensor-reading/examples/part_2.rs 包含第二部分的解答。如果你需要帮助,可以参考它。要运行它,使用:

cargo run --example part_2

步骤

✅ 导入 ICM42670p 的驱动 crate。


#![allow(unused)]
fn main() {
use icm42670::{Address, Icm42670, PowerMode as imuPowerMode};
}

✅ 创建传感器的实例。

✅ 为什么将同一个 I²C 实例传递给两个传感器不管用,尽管它们都在同一个 I²C 总线上?

解答

这是一个所有权问题。内存中的每个位置都需要归某物所有。如果我们将 I²C 总线传递给 SHTC3,则该传感器拥有 I²C 总线。且它不能再由另一个传感器拥有,借用也是不可能的,因为 I²C 总线需要可变,两个传感器都需要能够改变它。我们通过引入总线管理器来解决这个问题,该管理器创建多个 I²C 总线的代理。这些代理可以由相应的传感器拥有。

✅ 导入总线管理器 crate。


#![allow(unused)]
fn main() {
use shared_bus::BusManagerSimple;
}

✅ 创建一个简单的总线管理器的实例。创建两个代理,并用它们代替原来的 I²C 实例传递给传感器。

✅ 从两个传感器读取并打印设备 ID。

期望的输出:

Device ID SHTC3: 71
Device ID ICM42670p: 96

✅ 在低噪声模式下启动 ICM42670p。

✅ 读取陀螺仪传感器值,并将它们与温度和湿度值一起打印,精确到小数点后两位。

期望的输出:

GYRO: X: 0.00 Y: 0.00 Z: 0:00
TEMP: [当地温度] °C
HUM: [当地湿度] %

Simulation

This project is available for simulation through two methods:

  • Wokwi projects
  • Wokwi files are also present in the project folder to simulate it with Wokwi VS Code extension:
    1. Press F1, select Wokwi: Select Config File and choose advanced/i2c-sensor-reading/wokwi.toml
      • Edit the wokwi.toml file to select between exercise and solutions simulation
    2. Build you project
    3. Press F1 again and select Wokwi: Start Simulator

When simulating this project, expect the following hardcoded values: TEMP: 24.61 °C | HUM: 36.65 % | GYRO: X= 0.00 Y= 0.00 Z= 0.00