#humidity-sensor #sensirion #temperature-sensor #embedded-hal-driver #i2c-driver #sht40

no-std sensor-temp-humidity-sht40

SHT40温度和湿度传感器的驱动程序

3个版本

0.2.601 2022年1月25日
0.2.600 2022年1月25日
0.2.6 2022年1月12日

#1067 in 嵌入式开发

BSD-3-Clause OR Apache-2.0

53KB
498

sensor-temp-humidity-sht40

这是一个用于Sensirion SHT40温度和相对湿度传感器的Rust嵌入式库。

状态

软件

驱动程序针对嵌入式-hal的稳定版0.2.6进行开发。所有从这个分支发布的版本都是0.2.6xx,xx在每次发布中递增。

请使用main分支以支持hal-1.0.0。

硬件特性

  • 目前,驱动程序功能完善,支持向传感器发送的所有命令。
  • 驱动程序应该与SHT4x系列中的其他传感器(如SHT41或SHT45)一起工作,但这尚未经过测试。

库特性

  • "fp": 如果您的CPU或MCU具有浮点单元并且您想能够将测量值转换为常见单位(摄氏度、华氏度对于温度和%对于相对湿度),请启用此功能

    cargobuild --featuresfp --release

    默认情况下,驱动程序以毫度摄氏度或毫度华氏度的形式存储温度测量值,以每千分之一(pcm)的形式存储相对湿度,使用定点算术进行转换。

    23.89摄氏度的温度将存储为23890,56.2%的湿度将存储为56200。

    使用"fp"功能,API用户可以使用一个实用函数直接将测量值转换为常见单位,该函数接受一个测量值并返回一个MeasurementFp。除非您需要这种便利,否则最好不启用"fp",并将值作为整数传播,直到在向最终用户显示之前。

用法

详细API文档这里

导入此库和嵌入式-hal实现,然后实例化驱动程序

  • 例如,假设您已将SH40传感器连接到Linux机器,并且它被检测为i2c设备
use linux_embedded_hal as hal;

use hal::{I2cdev, Delay};
use sensor_temp_humidity_sht40::{SHT40Driver, I2CAddr, Precision,
                                 Measurement, TempUnit};

fn main() {
    let i2c_dev = I2cdev::new("/dev/i2c-1").unwrap();
    let mut sht40 = SHT40Driver::new(i2c_dev, I2CAddr::SHT4x_A, Delay);

    if let Ok(measurement) =
        sht40.get_temp_and_rh(Precision::High, TempUnit::MilliDegreesCelsius) {
      println!("Temp: {temp} C, Relative Humidity: {rh} %",
               temp = measurement.temp,
               rh = measurement.rel_hum_pcm);
    }
}
  • 同样,如果您使用基于ESP32的板
use esp_idf_sys;
use esp_idf_hal::delay;
use esp_idf_hal::i2c;
use esp_idf_hal::prelude::*;
use sensor_temp_humidity_sht40::{SHT40Driver, I2CAddr, Precision, TempUnit};

fn main() {
    let peripherals = Peripherals::take().unwrap();
    let pins = peripherals.pins;

    let i2c = peripherals.i2c0;
    let scl = pins.gpio9;
    let sda = pins.gpio8;
    let i2c_config = <i2c::config::MasterConfig as Default>::default()
                     .baudrate(400.kHz().into());

    let mut sensor_drv = SHT40Driver::new(
        i2c::Master::<i2c::I2C0, _, _>::new(i2c, 
                                            i2c::MasterPins { sda, scl }, 
                                            i2c_config).unwrap(), 
        I2CAddr::SHT4x_A, 
        delay::Ets);

    let measurement = sensor_drv.get_temp_and_rh(Precision::High,
                                                 TempUnit::MilliDegreesCelsius);
    println!("Measurement {:#?}", measurement);
}

许可证

库在Apache License,Version 2.0或BSD 3-clause许可证下双重授权(您可以选择在哪种许可证下使用代码)。

贡献

如果您想为此项目贡献代码,您同意您提交的任何代码都应如上双重授权,并将您的版权详细信息添加到相关源文件中。

依赖项

~80KB