I2C HUMIDITY AND TEMPERATURE SENSOR
Diff: SI7021.h
- Revision:
- 1:54da1ce19764
- Parent:
- 0:3d466d4c2cd2
- Child:
- 3:75cece7f7329
diff -r 3d466d4c2cd2 -r 54da1ce19764 SI7021.h --- a/SI7021.h Mon Feb 05 12:28:41 2018 +0000 +++ b/SI7021.h Mon Feb 05 12:31:34 2018 +0000 @@ -0,0 +1,236 @@ +/** + * @brief SI7021.h + * @details I2C HUMIDITY AND TEMPERATURE SENSOR. + * Header file. + * + * + * @return NA + * + * @author Manuel Caballero + * @date 5/February/2018 + * @version 5/February/2018 The ORIGIN + * @pre NaN. + * @warning NaN + * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). + */ +#ifndef SI7021_H +#define SI7021_H + +#include "mbed.h" + + +/** + Example: + +[todo] + +*/ + + +/*! + Library for the SI7021 I2C Humidity and Temperature sensor. +*/ +class SI7021 +{ +public: + /** + * @brief DEFAULT ADDRESSES + */ + typedef enum { + SI7021_ADDRESS = ( 0x40 << 1 ) /*!< SI7021 I2C Address */ + } SI7021_address_t; + + +// REGISTERS + /** + * @brief COMMAND CODE + */ + typedef enum { + SI7021_MEASURE_RELATIVE_HUMIDITY_HOLD_MASTER_MODE = 0xE5, /*!< Measure Relative Humidity, Hold Master Mode */ + SI7021_MEASURE_RELATIVE_HUMIDITY_NO_HOLD_MASTER_MODE = 0xF5, /*!< Measure Relative Humidity, No Hold Master Mode */ + SI7021_MEASURE_TEMPERATURE_HOLD_MASTER_MODE = 0xE3, /*!< Measure Temperature, Hold Master Mode */ + SI7021_MEASURE_TEMPERATURE_NO_HOLD_MASTER_MODE = 0xF3, /*!< Measure Temperature, No Hold Master Mode */ + SI7021_READ_TEMPERATURE_VALUE_FROM_PREVIOUS_RH_MEASUREMENT = 0xE0, /*!< Read Temperature Value from Previous RH Measurement */ + SI7021_RESET = 0xFE, /*!< Reset */ + SI7021_WRITE_RH_T_USER_REGISTER_1 = 0xE6, /*!< Write RH/T User Register 1 */ + SI7021_READ_RH_T_USER_REGISTER_1 = 0xE7, /*!< Read RH/T User Register 1 */ + SI7021_WRITE_HEATER_CONTROL_REGISTER = 0x51, /*!< Write Heater Control Register */ + SI7021_READ_HEATER_CONTROL_REGISTER = 0x11, /*!< Read Heater Control Register */ + SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD1 = 0xFA, /*!< Read Electronic ID 1st Byte */ + SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD2 = 0x0F, /*!< Read Electronic ID 1st Byte */ + SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD1 = 0xFC, /*!< Read Electronic ID 2nd Byte */ + SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD2 = 0xC9, /*!< Read Electronic ID 2nd Byte */ + SI7021_READ_FIRMWARE_VERSION_CMD1 = 0x84, /*!< Read Firmware Revision */ + SI7021_READ_FIRMWARE_VERSION_CMD2 = 0xB8 /*!< Read Firmware Revision */ + } SI7021_command_code_t; + + + +// MASTER MODE + /** + * @brief MEASUREMENT RESOLUTION + */ + typedef enum { + SI7021_HOLD_MASTER_MODE = 0x01, /*!< SI7021 HOLD MASTER MODE enabled */ + SI7021_NO_HOLD_MASTER_MODE = 0x00 /*!< SI7021 NO HOLD MASTER MODE enabled */ + } SI7021_master_mode_t; + + + +// USER REGISTER 1 + /* + NOTE: Reset Settings = 0011_1010. + Except where noted, reserved register bits will always read back as “1,” and are not affected by write operations. For + future compatibility, it is recommended that prior to a write operation, registers should be read. Then the values read + from the RSVD bits should be written back unchanged during the write operation. + */ + /** + * @brief MEASUREMENT RESOLUTION + */ + typedef enum { + SI7021_RESOLUTION_MASK = 0x81, /*!< SI7021 Measurement Resolution */ + SI7021_RESOLUTION_RH_12_TEMP_14 = 0x00, /*!< SI7021 12b RH 14b Temp. */ + SI7021_RESOLUTION_RH_8_TEMP_12 = 0x01, /*!< SI7021 9b RH 12b Temp. */ + SI7021_RESOLUTION_RH_10_TEMP_13 = 0x80, /*!< SI7021 10b RH 13b Temp. */ + SI7021_RESOLUTION_RH_11_TEMP_11 = 0x81 /*!< SI7021 11b RH 11b Temp. */ + } SI7021_measurement_resolution_t; + + + + /** + * @brief VDDS + */ + /* + NOTE: The minimum recommended operating voltage is 1.9 V. A transition + of the VDD status bit from 0 to 1 indicates that VDD is + between 1.8 V and 1.9 V. If the VDD drops below 1.8 V, the + device will no longer operate correctly. + */ + typedef enum { + SI7021_VDDS_STATUS_MASK = 0x40, /*!< SI7021 VDD mask. */ + SI7021_VDDS_STATUS_VDD_OK = ( 0 << 6 ), /*!< VDD OK. */ + SI7021_VDDS_STATUS_VDD_LOW = ( 1 << 6 ) /*!< VDD Low. */ + } SI7021_vdds_status_t; + + + + /** + * @brief HTRE + */ + typedef enum { + SI7021_HTRE_MASK = 0x03, /*!< SI7021 HTRE Mask */ + SI7021_HTRE_ENABLED = ( 1 << 2 ), /*!< SI7021 On-chip Heater Enable */ + SI7021_HTRE_DISABLED = ( 0 << 2 ) /*!< SI7021 On-chip Heater Disable */ + } SI7021_heater_t; + + + + + + +#ifndef SI7021_VECTOR_STRUCT_H +#define SI7021_VECTOR_STRUCT_H + typedef struct { + float RelativeHumidity; + float Temperature; + + uint32_t ElectronicSerialNumber_LSB; + uint32_t ElectronicSerialNumber_MSB; + + uint8_t FirmwareRevision; + SI7021_vdds_status_t BatteryStatus; + } SI7021_vector_data_t; +#endif + + + + /** + * @brief INTERNAL CONSTANTS + */ + typedef enum { + SI7021_SUCCESS = 0, + SI7021_FAILURE = 1, + I2C_SUCCESS = 0 /*!< I2C communication was fine */ + } SI7021_status_t; + + + + + /** Create an SI7021 object connected to the specified I2C pins. + * + * @param sda I2C data pin + * @param scl I2C clock pin + * @param addr I2C slave address + * @param freq I2C frequency in Hz. + */ + SI7021 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); + + /** Delete SI7021 object. + */ + ~SI7021(); + + /** It configures the device: resolution and heater. + */ + SI7021_status_t SI7021_Conf ( SI7021_measurement_resolution_t myResolution, SI7021_heater_t myHeater ); + + /** It performs a software reset. + */ + SI7021_status_t SI7021_SoftReset ( void ); + + /** It gets the electronic serial number. + */ + SI7021_status_t SI7021_GetElectronicSerialNumber ( SI7021_vector_data_t* mySerialNumber ); + + /** It gets the firmware revision. + */ + SI7021_status_t SI7021_GetFirmwareRevision ( SI7021_vector_data_t* myFirmwareRevision ); + + /** It sets the heater current. + */ + SI7021_status_t SI7021_SetHeaterCurrent ( char myHeaterCurrent ); + + /** It performs a new temperature measurement. + */ + SI7021_status_t SI7021_TriggerTemperature ( SI7021_master_mode_t myMode ); + + /** It read the temperature. + */ + SI7021_status_t SI7021_ReadTemperature ( SI7021_vector_data_t* myTemperature ); + + /** It reads the raw data from temperature. + */ + SI7021_status_t SI7021_ReadRawTemperature ( SI7021_vector_data_t* myTemperature ); + + /** It reads the raw temperature data after a relative humidity measurement was done. + */ + SI7021_status_t SI7021_ReadRawTemperatureFromRH ( SI7021_vector_data_t* myTemperature ); + + /** It reads the temperature after a relative humidity measurement was done. + */ + SI7021_status_t SI7021_ReadTemperatureFromRH ( SI7021_vector_data_t* myTemperature ); + + /** It performs a new relative humidity measurement. + */ + SI7021_status_t SI7021_TriggerHumidity ( SI7021_master_mode_t myMode ); + + /** It reads the relative humidity. + */ + SI7021_status_t SI7021_ReadHumidity ( SI7021_vector_data_t* myHumidity ); + + /** It reads the raw data from relative humidity. + */ + SI7021_status_t SI7021_ReadRawHumidity ( SI7021_vector_data_t* myHumidity ); + + /** It gets the battery status. + */ + SI7021_status_t SI7021_GetBatteryStatus ( SI7021_vector_data_t* myBatteryStatus ); + + + + +private: + I2C _i2c; + uint32_t _SI7021_Addr; +}; + +#endif