sht4x - driver for Sensirion SHT40/SHT41 digital temperature and humidity sensors

group sht4x

ESP-IDF driver for Sensirion SHT40/SHT41 digital temperature and humidity sensor.

Copyright (c) 2021 Ruslan V. Uss unclerus@gmail.com

BSD Licensed as described in the file LICENSE

Defines

SHT4X_I2C_ADDRESS
SHT4X_RAW_DATA_SIZE

Typedefs

typedef uint8_t sht4x_raw_data_t[SHT4X_RAW_DATA_SIZE]

Enums

enum sht4x_heater_t

Possible heater modes.

Values:

enumerator SHT4X_HEATER_OFF

Heater is off, default.

enumerator SHT4X_HEATER_HIGH_LONG

High power (~200mW), 1 second pulse.

enumerator SHT4X_HEATER_HIGH_SHORT

High power (~200mW), 0.1 second pulse.

enumerator SHT4X_HEATER_MEDIUM_LONG

Medium power (~110mW), 1 second pulse.

enumerator SHT4X_HEATER_MEDIUM_SHORT

Medium power (~110mW), 0.1 second pulse.

enumerator SHT4X_HEATER_LOW_LONG

Low power (~20mW), 1 second pulse.

enumerator SHT4X_HEATER_LOW_SHORT

Low power (~20mW), 0.1 second pulse.

enum sht4x_repeat_t

Possible repeatability modes.

Values:

enumerator SHT4X_HIGH
enumerator SHT4X_MEDIUM
enumerator SHT4X_LOW

Functions

esp_err_t sht4x_init_desc(sht4x_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 sht4x_free_desc(sht4x_t *dev)

Free device descriptor.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t sht4x_init(sht4x_t *dev)

Initialize sensor.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t sht4x_reset(sht4x_t *dev)

Soft-reset sensor.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t sht4x_measure(sht4x_t *dev, float *temperature, float *humidity)

High level measurement function.

For convenience this function comprises all three steps to perform one measurement in only one function:

  1. Starts a measurement

  2. Waits using vTaskDelay() until measurement results are available

  3. Returns the results in kind of floating point sensor values

This function is the easiest way to use the sensor. It is most suitable for users that don’t want to have the control on sensor details.

Note

The function delays the calling task up to 1.1 s to wait for the measurement results. This might lead to problems when the function is called from a software timer callback function.

Parameters:
  • dev – Device descriptor

  • temperature – Temperature in degree Celsius

  • humidity – Humidity in percent

Returns:

ESP_OK on success

esp_err_t sht4x_start_measurement(sht4x_t *dev)

Start the measurement.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

size_t sht4x_get_measurement_duration(sht4x_t *dev)

Get the duration of a measurement in RTOS ticks.

The function returns the duration in RTOS ticks required by the sensor to perform a measurement for the given repeatability and heater setting. Once a measurement is started with function sht4x_start_measurement() the user task can use this duration in RTOS ticks directly to wait with function vTaskDelay() until the measurement results can be fetched.

Parameters:

dev – Device descriptor

Returns:

Measurement duration given in RTOS ticks

esp_err_t sht4x_get_raw_data(sht4x_t *dev, sht4x_raw_data_t raw)

Read measurement results from sensor as raw data.

The function read measurement results from the sensor, checks the CRC checksum and stores them in the byte array as following.

 data[0] = Temperature MSB
 data[1] = Temperature LSB
 data[2] = Temperature CRC
 data[3] = Humidity MSB
 data[4] = Humidity LSB
 data[5] = Humidity CRC
In case that there are no new data that can be read, the function fails.

Parameters:
  • dev – Device descriptor

  • raw[out] Byte array in which raw data are stored

Returns:

ESP_OK on success

esp_err_t sht4x_compute_values(sht4x_raw_data_t raw_data, float *temperature, float *humidity)

Computes sensor values from raw data.

Parameters:
  • raw_data – Byte array that contains raw data

  • temperature[out] Temperature in degree Celsius

  • humidity[out] Humidity in percent

Returns:

ESP_OK on success

esp_err_t sht4x_get_results(sht4x_t *dev, float *temperature, float *humidity)

Get measurement results in form of sensor values.

The function combines function sht4x_get_raw_data() and function sht4x_compute_values() to get the measurement results.

In case that there are no results that can be read, the function fails.

Parameters:
  • dev – Device descriptor

  • temperature[out] Temperature in degree Celsius

  • humidity[out] Humidity in percent

Returns:

ESP_OK on success

struct sht4x_t
#include <sht4x.h>

Device descriptor.

Public Members

i2c_dev_t i2c_dev

I2C device descriptor.

uint32_t serial

device serial number

sht4x_heater_t heater

used measurement mode

sht4x_repeat_t repeatability

used repeatability

bool meas_started

indicates whether measurement started

uint64_t meas_start_time

measurement start time in us