Expand description
This is a platform agnostic Rust driver for the HDC2080, HDC2021 and
HDC2010 low-power humidity and temperature digital sensor using
the embedded-hal
traits.
This driver allows you to:
- Set the measurement mode. Temperature only or temperature and humidity. See:
set_measurement_mode()
. - Make one shot measurement. See:
read()
. - Read the data and interrupt status. See:
status()
. - Trigger a software reset. See:
software_reset()
. - Read the manufacturer ID. See:
manufacturer_id()
. - Read the device ID. See:
device_id()
.
§The devices
The HDC2080 device is an integrated humidity and temperature sensor that provides high accuracy measurements with very low power consumption in a small DFN package. The capacitive-based sensor includes new integrated digital features and a heating element to dissipate condensation and moisture.
The HDC2080 digital features include programmable interrupt thresholds to provide alerts and system wake-ups without requiring a microcontroller to be continuously monitoring the system. Combined with programmable sampling intervals, a low power consumption, and a support for a 1.8-V supply voltage, the HDC2080 is designed for battery-operated systems.
This driver is compatible with HDC2080, HDC2021 and HDC2010.
Datasheets: HDC2080, HDC2021, HDC2010
§Usage examples (see also examples folder)
To use this driver, import this crate and an embedded_hal
implementation,
then instantiate the device.
Please find additional examples using hardware in this repository: driver-examples
§Make a one-shot temperature and humidity measurement
extern crate linux_embedded_hal as hal;
use hdc20xx::{Hdc20xx, SlaveAddr};
use nb::block;
let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Hdc20xx::new(dev, address);
loop {
let data = block!(sensor.read()).unwrap();
println!(
"Temperature: {:2}°C, Humidity: {:2}%",
data.temperature,
data.humidity.unwrap()
);
}
§Use an alternative address
extern crate linux_embedded_hal as hal;
use hdc20xx::{Hdc20xx, SlaveAddr};
let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::Alternative(true);
let sensor = Hdc20xx::new(dev, address);
§Configure measuring only the temperature
extern crate linux_embedded_hal as hal;
use hdc20xx::{Hdc20xx, MeasurementMode, SlaveAddr};
let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Hdc20xx::new(dev, address);
sensor.set_measurement_mode(MeasurementMode::TemperatureOnly).unwrap();
§Read the manufacturer and device ID
extern crate linux_embedded_hal as hal;
use hdc20xx::{Hdc20xx, SlaveAddr};
let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Hdc20xx::new(dev, address);
let manuf_id = sensor.manufacturer_id().unwrap();
let dev_id = sensor.device_id().unwrap();
println!(
"Manufacturer ID: {}, Device ID: {}",
manuf_id, dev_id
);
§Read the data and interrupt status
extern crate linux_embedded_hal as hal;
use hdc20xx::{Hdc20xx, SlaveAddr};
let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Hdc20xx::new(dev, address);
let status = sensor.status().unwrap();
println!("Status: {:?}", status);
Modules§
- mode
- Mode marker
Structs§
- Hdc20xx
- HDC2080, HDC2021 and HDC2010 device driver
- Measurement
- Measurement result
- Status
- Status
Enums§
- Error
- All possible errors in this crate
- Measurement
Mode - Measurement mode
- Slave
Addr - Possible slave addresses