sht31

Crates.iosht31
lib.rssht31
version
sourcesrc
created_at2023-02-04 06:29:21.670551
updated_at2024-12-01 18:11:07.180466
descriptionA library for the SHT31 temperature and humidity sensor
homepage
repositoryhttps://github.com/FloppyDisck/SHT31-rs
max_upload_size
id776226
Cargo.toml error:TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Guy S Garcia (FloppyDisck)

documentation

README

SHT31-rs   Build Status Latest Version

A cargo library for the SHT31 temperature / humidity sensors


Usage

The default sensor usage includes a blocking sensor read that blocks the current thread until the sensor does a reading.

use sht31::prelude::*;

fn main() -> Result<()> {
    // Requires an i2c connection + delay (both from embedded_hal 1.x.x)
    let sht = SHT31::new(i2c, delay);
    
    loop {
        let reading = sht.read()?;
    }
}

Advanced Single Shot Usage

Breaks down the simple usage into two commands, one where the sensor is notified to start reading and another where the reading is requested

use sht31::prelude::*;

fn main() -> Result<()> {
    // i2c setup
    
    // Use single shot, with high accuracy, an alternate I2C address 
    // and return temp data in Fahrenheit
    let sht = SHT31::single_shot(i2c, SingleShot::new())
        .with_accuracy(Accuracy::High)
        .with_unit(TemperatureUnit::Fahrenheit)
        .with_address(DeviceAddr::AD1);

    loop {
        // Start measuring before you need the reading, 
        // this is more efficient than waiting for readings
        sht.measure()?;

        // Some other code here...

        let reading = sht.read()?;
    }
}

Periodic Usage

Periodic mode continually reads data at a rate of the given measurements per second (MPS) and at a quality of the given Accuracy. This means that you dont have to worry about running SHT31::measure() every time you want to read data

use sht31::prelude::*;

fn main() -> Result<()> {
    // i2c setup
    
    // In periodic mode, the sensor keeps updating the reading
    // without needing to measure
    let mut sht = SHT31::periodic(
        i2c, 
        Periodic::new().with_mps(MPS::Normal)
    )
        .with_accuracy(Accuracy::High);
    
    // Trigger the measure before running your loop to initialize the periodic mode
    sht.measure()?;
    
    loop {
        let reading = sht.read()?;
    }
}

Periodic with Accelerated Response Time

Periodic mode has a unique mode that allows the sensor to read data at 4Hz

use sht31::prelude::*;

fn main() -> Result<()> {
    
    // Makes the sensor acquire the data at 4 Hz
    let mut sht = SHT31::periodic(i2c, Periodic::new().with_art());
    sht.measure()?;
    
    loop {
        let reading = sht.read()?;
    }
}

Mode switching

This crate also supports more complex case scenarios where you might want to switch between period to single shot for example

use sht31::prelude::*;

fn main() -> Result<()> {
    // i2c setup
    
    let mut sht = SHT31::periodic(i2c, Periodic::new());
    
    // Trigger the measure before running your loop to initialize the periodic mode
    sht.measure()?;
    
    // Do a periodic read
    let reading = sht.read()?;
    
    // Cancel the currently running command (periodic)
    sht.break_command()?;
    
    sht = sht.with_mode(SingleShot::new());
    
    sht.measure()?;
    
    let new_reading = sht.read()?;
}
Commit count: 22

cargo fmt