Crates.io | sht31 |
lib.rs | sht31 |
version | |
source | src |
created_at | 2023-02-04 06:29:21.670551 |
updated_at | 2024-12-01 18:11:07.180466 |
description | A library for the SHT31 temperature and humidity sensor |
homepage | |
repository | https://github.com/FloppyDisck/SHT31-rs |
max_upload_size | |
id | 776226 |
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` |
size | 0 |
A cargo library for the SHT31 temperature / humidity sensors
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()?;
}
}
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 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 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()?;
}
}
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()?;
}