scd30 - Driver for SCD30 CO₂ sensor¶
- group scd30
ESP-IDF driver for Sensirion SCD30 CO2 sensor.
Adapted from https://github.com/UncleRus/esp-idf-lib/tree/master/components/scd4x
Copyright (c) 2021, Sensirion AG Copyright (c) 2021 Ruslan V. Uss unclerus@gmail.com Copyright (c) 2021 Nate Usher n.usher87@gmail.com
BSD Licensed as described in the file LICENSE
Defines
-
SCD30_I2C_ADDR¶
Functions
-
esp_err_t scd30_init_desc(i2c_dev_t *dev, i2c_port_t port, gpio_num_t sda_gpio, gpio_num_t scl_gpio)¶
Initialize device descriptor.
- Parameters
dev – Device descriptor
port – I2C port
sda_gpio – SDA GPIO
scl_gpio – SCL GPIO
- Returns
ESP_OK
on success
-
esp_err_t scd30_free_desc(i2c_dev_t *dev)¶
Free device descriptor.
- Parameters
dev – Device descriptor
- Returns
ESP_OK
on success
-
esp_err_t scd30_trigger_continuous_measurement(i2c_dev_t *dev, uint16_t p_comp)¶
Trigger continuous measurement.
Signal update interval default is 2 seconds.
- Parameters
dev – Device descriptor
p_comp – Optional ambient pressure compensation in mBar, 0 to deactivate
- Returns
ESP_OK
on success
-
esp_err_t scd30_stop_continuous_measurement(i2c_dev_t *dev)¶
Stop continuous measurement.
Stops the continuous measurement of the SCD30.
- Parameters
dev – Device descriptor
- Returns
ESP_OK
on success
-
esp_err_t scd30_get_measurement_interval(i2c_dev_t *dev, uint16_t *interval_seconds)¶
Get measurement interval.
Gets the interval used bythe SCD30 sensor to measure in continuous measurement mode. Saved in non-volatile memory.
- Parameters
dev – Device descriptor
interval_seconds – Measurement interval in seconds
- Returns
ESP_OK
on success
-
esp_err_t scd30_set_measurement_interval(i2c_dev_t *dev, uint16_t interval_seconds)¶
Set measurement interval.
Sets the interval used bythe SCD30 sensor to measure in continuous measurement mode. Saved in non-volatile memory.
- Parameters
dev – Device descriptor
interval_seconds – Measurement interval in seconds
- Returns
ESP_OK
on success
-
esp_err_t scd30_get_data_ready_status(i2c_dev_t *dev, bool *data_ready)¶
Check whether new measurement data is available for read-out.
- Parameters
dev – Device descriptor
data_ready – true if data is ready, false otherwise
- Returns
ESP_OK
on success
-
esp_err_t scd30_read_measurement(i2c_dev_t *dev, float *co2, float *temperature, float *humidity)¶
Read sensor output and convert.
When new measurement data is available it can be read out with the following command. Make sure that the measurement is completed by calling scd30_get_data_ready_status()
- Parameters
dev – Device descriptor
co2 – CO₂ concentration in ppm
temperature – Temperature in degrees Celsius (°C)
humidity – Relative humidity in percent RH
- Returns
ESP_OK
on success
-
esp_err_t scd30_get_automatic_self_calibration(i2c_dev_t *dev, bool *enabled)¶
Get automatic self calibration (ASC) state.
By default, the ASC is disabled.
- Parameters
dev – Device descriptor.
enabled – true if ASC is enabled, false otherwise
- Returns
ESP_OK
on success
-
esp_err_t scd30_set_automatic_self_calibration(i2c_dev_t *dev, bool enabled)¶
Enable or disable automatic self calibration (ASC).
By default, the ASC is disabled.
- Parameters
dev – Device descriptor.
enabled – true to enable ASC, false to disable ASC
- Returns
ESP_OK
on success
-
esp_err_t scd30_get_forced_recalibration_value(i2c_dev_t *dev, uint16_t *correction_value)¶
Get Forced Recalibration Value.
See scd_30_set_forced_recalibration_value.
The most recently used reference value is retained in volatile memory and can be read out with the command sequence given below. After repowering the sensor, the command will return the standard reference value of 400 ppm.
- Parameters
dev – Device descriptor.
correction_value – FRC correction value in CO₂ ppm
- Returns
ESP_OK
on success
-
esp_err_t scd30_set_forced_recalibration_value(i2c_dev_t *dev, uint16_t target_co2_concentration)¶
Set Forced Recalibration Value.
Forced recalibration (FRC) is used to compensate for sensor drifts when a reference value of the CO2 concentration in close proximity to the SCD30 is available. For best results,the sensor has to be run in a stable environment in continuous mode at a measurement rateof 2s for at least two minutes before applying the FRC command and sending the reference value. Setting a reference CO2 concentration by the method described here will always supersede corrections from the ASC
Imposes a permanent update to the calibration curve which persists after repowering the sensor.
- Parameters
dev – Device descriptor.
target_co2_concentration – Target CO₂ concentration in ppm. (400 <= val <= 2000)
- Returns
ESP_OK
on success
-
esp_err_t scd30_get_temperature_offset_ticks(i2c_dev_t *dev, uint16_t *t_offset)¶
Get temperature offset in ticks.
Get the current temperature offset value saved in non-volatile memory.
Note
Only available in idle mode.
- Parameters
dev – Device descriptor
t_offset – Temperature offset. Convert value to °C by: value * 100;
- Returns
ESP_OK
on success
-
esp_err_t scd30_get_temperature_offset(i2c_dev_t *dev, float *t_offset)¶
Get temperature offset in °C.
See scd30_get_temperature_offset_ticks() for more details.
- Parameters
dev – Device descriptor
t_offset – Temperature offset in degrees Celsius (°C)
- Returns
ESP_OK
on success
-
esp_err_t scd30_set_temperature_offset_ticks(i2c_dev_t *dev, uint16_t t_offset)¶
Set temperature offset in ticks.
Set the temperature offset value to be saved in non-volatile memory. The last set value will be used for temperature offset compensation after repowering.
- Parameters
dev – Device descriptor
t_offset – Temperature offset. Convert °C to value by: T / 100;
- Returns
ESP_OK
on success
-
esp_err_t scd30_set_temperature_offset(i2c_dev_t *dev, float t_offset)¶
Set temperature offset in °C.
See scd30_set_temperature_offset_ticks() for more details.
- Parameters
dev – Device descriptor
t_offset – Temperature offset in degrees Celsius (°C)
- Returns
ESP_OK
on success
-
esp_err_t scd30_get_sensor_altitude(i2c_dev_t *dev, uint16_t *altitude)¶
Get configured sensor altitude.
Get configured sensor altitude in meters above sea level. Per default, the sensor altitude is set to 0 meter above sea-level.
Note
Only available in idle mode.
- Parameters
dev – Device descriptor.
altitude – Sensor altitude in meters.
- Returns
ESP_OK
on success
-
esp_err_t scd30_set_sensor_altitude(i2c_dev_t *dev, uint16_t altitude)¶
Set sensor altitude in meters above sea level.
Note that setting a sensor altitude to the sensor overrides any pressure compensation based on a previously set ambient pressure.
- Parameters
dev – Device descriptor.
altitude – Sensor altitude in meters.
- Returns
ESP_OK
on success
-
esp_err_t scd30_read_firmware_version(i2c_dev_t *dev, uint16_t *firmware_version)¶
Get firmware version.
Following command can be used to read out the firmware version of SCD30 module The MSB is the major firmware version, the LSB is the minor firmware version
- Parameters
dev – Device descriptor
firmware_version – Firmware version
- Returns
ESP_OK
on success
-
SCD30_I2C_ADDR¶