/* * THIS FILE IS AUTOMATICALLY GENERATED * * Generator: sensirion-driver-generator 0.33.0 * Product: sht3x * Model-Version: 2.0.0 */ /* * Copyright (c) 2023, Sensirion AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of Sensirion AG nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef SHT3X_I2C_H #define SHT3X_I2C_H #ifdef __cplusplus extern "C" { #endif #include "sensirion_config.h" #define SHT30A_I2C_ADDR_44 0x44 #define SHT30A_I2C_ADDR_45 0x45 #define SHT30_I2C_ADDR_44 0x44 #define SHT30_I2C_ADDR_45 0x45 #define SHT31A_I2C_ADDR_44 0x44 #define SHT31A_I2C_ADDR_45 0x45 #define SHT31_I2C_ADDR_44 0x44 #define SHT31_I2C_ADDR_45 0x45 #define SHT33_I2C_ADDR_44 0x44 #define SHT33_I2C_ADDR_45 0x45 #define SHT35A_I2C_ADDR_44 0x44 #define SHT35A_I2C_ADDR_45 0x45 #define SHT35_I2C_ADDR_44 0x44 #define SHT35_I2C_ADDR_45 0x45 #define SHT85_I2C_ADDR_44 0x44 typedef enum { MEASURE_SINGLE_SHOT_HIGH_REPEATABILITY_CMD_ID = 0x2400, MEASURE_SINGLE_SHOT_HIGH_REPEATABILITY_CLOCK_STRETCHING_CMD_ID = 0x2c06, MEASURE_SINGLE_SHOT_MEDIUM_REPEATABILITY_CMD_ID = 0x240b, MEASURE_SINGLE_SHOT_MEDIUM_REPEATABILITY_CLOCK_STRETCHING_CMD_ID = 0x2c0d, MEASURE_SINGLE_SHOT_LOW_REPEATABILITY_CMD_ID = 0x2416, MEASURE_SINGLE_SHOT_LOW_REPEATABILITY_CLOCK_STRETCHING_CMD_ID = 0x2c10, START_MEASUREMENT_0_5_MPS_HIGH_REPEATABILITY_CMD_ID = 0x2032, START_MEASUREMENT_0_5_MPS_MEDIUM_REPEATABILITY_CMD_ID = 0x2024, START_MEASUREMENT_0_5_MPS_LOW_REPEATABILITY_CMD_ID = 0x202f, START_MEASUREMENT_1_MPS_HIGH_REPEATABILITY_CMD_ID = 0x2130, START_MEASUREMENT_1_MPS_MEDIUM_REPEATABILITY_CMD_ID = 0x2126, START_MEASUREMENT_1_MPS_LOW_REPEATABILITY_CMD_ID = 0x212d, START_MEASUREMENT_2_MPS_HIGH_REPEATABILITY_CMD_ID = 0x2236, START_MEASUREMENT_2_MPS_MEDIUM_REPEATABILITY_CMD_ID = 0x2220, START_MEASUREMENT_2_MPS_LOW_REPEATABILITY_CMD_ID = 0x222b, START_MEASUREMENT_4_MPS_HIGH_REPEATABILITY_CMD_ID = 0x2334, START_MEASUREMENT_4_MPS_MEDIUM_REPEATABILITY_CMD_ID = 0x2322, START_MEASUREMENT_4_MPS_LOW_REPEATABILITY_CMD_ID = 0x2329, START_MEASUREMENT_10_MPS_HIGH_REPEATABILITY_CMD_ID = 0x2737, START_MEASUREMENT_10_MPS_MEDIUM_REPEATABILITY_CMD_ID = 0x2721, START_MEASUREMENT_10_MPS_LOW_REPEATABILITY_CMD_ID = 0x273a, START_ART_MEASUREMENT_CMD_ID = 0x2b32, READ_MEASUREMENT_CMD_ID = 0xe000, STOP_MEASUREMENT_CMD_ID = 0x3093, ENABLE_HEATER_CMD_ID = 0x306d, DISABLE_HEATER_CMD_ID = 0x3066, READ_STATUS_REGISTER_CMD_ID = 0xf32d, CLEAR_STATUS_REGISTER_CMD_ID = 0x3041, SOFT_RESET_CMD_ID = 0x30a2, } cmd_id_t; typedef enum { REPEATABILITY_LOW = 0, REPEATABILITY_MEDIUM = 1, REPEATABILITY_HIGH = 2, } repeatability; typedef enum { MPS_EVERY_TWO_SECONDS = 0, MPS_ONE_PER_SECOND = 1, MPS_TWO_PER_SECOND = 2, MPS_FOUR_PER_SECOND = 4, MPS_TEN_PER_SECOND = 10, } mps; /** * @brief Initialize i2c address of driver * * @param[in] i2c_address Used i2c address * */ void sht3x_init(uint8_t i2c_address); /** * @brief Convert temperature ticks to physical value (approximation) * * @param[in] temperature_ticks * * @return temperature in milli degrees celsius */ int32_t signal_temperature(uint16_t temperature_ticks); /** * @brief Convert humidity ticks to physical value (approximation) * * @param[in] humidity_ticks * * @return relative humidity in milli percent RH */ int32_t signal_humidity(uint16_t humidity_ticks); /** * @brief Single shot measurement with the specified properties * * @param[in] measurement_repeatability The repeatability of the periodic * measurement * @param[in] is_clock_stretching Toggle clock stretching * @param[out] a_temperature Measured temperature in milli degree celsius * @param[out] a_humidity Measured humidity in milli percent RH * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_measure_single_shot(repeatability measurement_repeatability, bool is_clock_stretching, int32_t* a_temperature, int32_t* a_humidity); /** * @brief sht3x_start_periodic_measurement * * Start the periodic measurement measurement mode. * * This is a convenience method that selects the correct measurement command * based on the provided arguments. * * @param[in] measurement_repeatability The repeatability of the periodic * measurement * @param[in] messages_per_second The messages per second of the periodic * measurement * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_periodic_measurement(repeatability measurement_repeatability, mps messages_per_second); /** * @brief sht3x_blocking_read_measurement * * This is a convenience method that combines polling the data ready flag and * reading out the data. As the minimal measurement interval is 2s and we sleep * for 100ms we iterate at most 200 times. Note that this is blocking the system * for a considerable amount of time! * * @param[out] a_temperature Measured temperature in milli degree celsius * @param[out] a_humidity Measured humidity in milli percent RH * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_blocking_read_measurement(int32_t* a_temperature, int32_t* a_humidity); /** * @brief Read the contents of the status register * * @param[out] a_status_register * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_read_status_register(uint16_t* a_status_register); /** * @brief sht3x_measure_single_shot_high_repeatability * * Single shot measurement with high repeatability * * @param[out] temperature_ticks Temperature ticks. Convert to degrees celsius * by -45 + 175 * value / 65535 * @param[out] humidity_ticks Humidity ticks. Convert to relative humidity by * 100 * value / 65535 * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_measure_single_shot_high_repeatability(uint16_t* temperature_ticks, uint16_t* humidity_ticks); /** * @brief sht3x_measure_single_shot_high_repeatability_clock_stretching * * Single shot measurement with high repeatability and clock stretching enabled * * @param[out] temperature_ticks Temperature ticks. Convert to degrees celsius * by -45 + 175 * value / 65535 * @param[out] humidity_ticks Humidity ticks. Convert to relative humidity by * 100 * value / 65535 * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_measure_single_shot_high_repeatability_clock_stretching( uint16_t* temperature_ticks, uint16_t* humidity_ticks); /** * @brief sht3x_measure_single_shot_medium_repeatability * * Single shot measurement with medium repeatability * * @param[out] temperature_ticks Temperature ticks. Convert to degrees celsius * by -45 + 175 * value / 65535 * @param[out] humidity_ticks Humidity ticks. Convert to relative humidity by * 100 * value / 65535 * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_measure_single_shot_medium_repeatability(uint16_t* temperature_ticks, uint16_t* humidity_ticks); /** * @brief sht3x_measure_single_shot_medium_repeatability_clock_stretching * * Single shot measurement with medium repeatability and clock stretching * enabled * * @param[out] temperature_ticks Temperature ticks. Convert to degrees celsius * by -45 + 175 * value / 65535 * @param[out] humidity_ticks Humidity ticks. Convert to relative humidity by * 100 * value / 65535 * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_measure_single_shot_medium_repeatability_clock_stretching( uint16_t* temperature_ticks, uint16_t* humidity_ticks); /** * @brief sht3x_measure_single_shot_low_repeatability * * Single shot measurement with low repeatability * * @param[out] temperature_ticks Temperature ticks. Convert to degrees celsius * by -45 + 175 * value / 65535 * @param[out] humidity_ticks Humidity ticks. Convert to relative humidity by * 100 * value / 65535 * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_measure_single_shot_low_repeatability(uint16_t* temperature_ticks, uint16_t* humidity_ticks); /** * @brief sht3x_measure_single_shot_low_repeatability_clock_stretching * * Single shot measurement with low repeatability and clock stretching enabled * * @param[out] temperature_ticks Temperature ticks. Convert to degrees celsius * by -45 + 175 * value / 65535 * @param[out] humidity_ticks Humidity ticks. Convert to relative humidity by * 100 * value / 65535 * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_measure_single_shot_low_repeatability_clock_stretching( uint16_t* temperature_ticks, uint16_t* humidity_ticks); /** * @brief sht3x_start_measurement_0_5_mps_high_repeatability * * Start periodic measurement mode with 0.5 mps and high repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_0_5_mps_high_repeatability(); /** * @brief sht3x_start_measurement_0_5_mps_medium_repeatability * * Start periodic measurement mode with 0.5 mps and medium repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_0_5_mps_medium_repeatability(); /** * @brief sht3x_start_measurement_0_5_mps_low_repeatability * * Start periodic measurement mode with 0.5 mps and low repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_0_5_mps_low_repeatability(); /** * @brief sht3x_start_measurement_1_mps_high_repeatability * * Start periodic measurement mode with 1 mps and high repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_1_mps_high_repeatability(); /** * @brief sht3x_start_measurement_1_mps_medium_repeatability * * Start periodic measurement mode with 1 mps and medium repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_1_mps_medium_repeatability(); /** * @brief sht3x_start_measurement_1_mps_low_repeatability * * Start periodic measurement mode with 1 mps and low repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_1_mps_low_repeatability(); /** * @brief sht3x_start_measurement_2_mps_high_repeatability * * Start periodic measurement mode with 2 mps and high repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_2_mps_high_repeatability(); /** * @brief sht3x_start_measurement_2_mps_medium_repeatability * * Start periodic measurement mode with 2 mps and medium repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_2_mps_medium_repeatability(); /** * @brief sht3x_start_measurement_2_mps_low_repeatability * * Start periodic measurement mode with 2 mps and low repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_2_mps_low_repeatability(); /** * @brief sht3x_start_measurement_4_mps_high_repeatability * * Start periodic measurement mode with 4 mps and high repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_4_mps_high_repeatability(); /** * @brief sht3x_start_measurement_4_mps_medium_repeatability * * Start periodic measurement mode with 4 mps and medium repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_4_mps_medium_repeatability(); /** * @brief sht3x_start_measurement_4_mps_low_repeatability * * Start periodic measurement mode with 4 mps and low repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_4_mps_low_repeatability(); /** * @brief sht3x_start_measurement_10_mps_high_repeatability * * Start periodic measurement mode with 10 mps and high repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_10_mps_high_repeatability(); /** * @brief sht3x_start_measurement_10_mps_medium_repeatability * * Start periodic measurement mode with 10 mps and medium repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_10_mps_medium_repeatability(); /** * @brief sht3x_start_measurement_10_mps_low_repeatability * * Start periodic measurement mode with 10 mps and low repeatability. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_measurement_10_mps_low_repeatability(); /** * @brief sht3x_start_art_measurement * * Start ART (accelerated response time) measurement * * @note After issuing the ART command the sensor will start acquiring data with * a frequency of 4Hz. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_start_art_measurement(); /** * @brief sht3x_read_measurement * * Read out data after a "start measurement" or "start art measurement" command * has been issued. * * @param[out] temperature_ticks Temperature ticks. Convert to degrees celsius * by -45 + 175 * value / 65535 * @param[out] humidity_ticks Humidity ticks. Convert to relative humidity by * 100 * value / 65535 * * @note After the read out command fetch data has been issued, the data memory * is cleared, i.e. no measurement data is present. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_read_measurement(uint16_t* temperature_ticks, uint16_t* humidity_ticks); /** * @brief sht3x_stop_measurement * * Stop the periodic measurement mode. * * @note Upon reception of this command the sensor will abort the ongoing * measurement and enter the single shot mode. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_stop_measurement(); /** * @brief sht3x_enable_heater * * Enable the heater * * @note The SHT3x is equipped with an internal heater, which is meant for * plausibility checking only. The temperature increase achieved by the heater * depends on various parameters and lies in the range of a few degrees * centigrade. * * After a reset the heater is disabled (default condition). * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_enable_heater(); /** * @brief sht3x_disable_heater * * Disable the heater * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_disable_heater(); /** * @brief ll_sht3x_read_status_register * * Read out the status register * * @param[out] status_register The contents of the status register * * @note The status register contains information on the operational status of * the heater, the alert mode and on the execution status of the last command * and the last write sequence. * * @return error_code 0 on success, an error code otherwise. */ int16_t ll_sht3x_read_status_register(uint16_t* status_register); /** * @brief sht3x_clear_status_register * * Clear (set to zero) all flags (Bit 4) in the status register. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_clear_status_register(); /** * @brief sht3x_soft_reset * * Perform a soft reset. * * @note A system reset of the SHT3x can be achieved in multiple ways: - Soft * reset: use this command - I2C general call: all devices on the I2C bus are * reset by sending the command 0x06 to the I2C address 0x00 - Reset pin: send a * pulse to the dedicated nReset pin. The nReset pin has to be pulled low for a * minimum of 1 µs to generate a reset of the sensor. - Hard reset: Power down * (incl. pulling SDA, SCL and ADDR low) * * During the reset procedure the sensor will not process commands. * * @return error_code 0 on success, an error code otherwise. */ int16_t sht3x_soft_reset(); #ifdef __cplusplus } #endif #endif // SHT3X_I2C_H