I2C HUMIDITY AND TEMPERATURE SENSOR
SI7021.h@1:54da1ce19764, 2018-02-05 (annotated)
- Committer:
- mcm
- Date:
- Mon Feb 05 12:31:34 2018 +0000
- Revision:
- 1:54da1ce19764
- Parent:
- 0:3d466d4c2cd2
- Child:
- 3:75cece7f7329
The header file is ready to be tested.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 1:54da1ce19764 | 1 | /** |
mcm | 1:54da1ce19764 | 2 | * @brief SI7021.h |
mcm | 1:54da1ce19764 | 3 | * @details I2C HUMIDITY AND TEMPERATURE SENSOR. |
mcm | 1:54da1ce19764 | 4 | * Header file. |
mcm | 1:54da1ce19764 | 5 | * |
mcm | 1:54da1ce19764 | 6 | * |
mcm | 1:54da1ce19764 | 7 | * @return NA |
mcm | 1:54da1ce19764 | 8 | * |
mcm | 1:54da1ce19764 | 9 | * @author Manuel Caballero |
mcm | 1:54da1ce19764 | 10 | * @date 5/February/2018 |
mcm | 1:54da1ce19764 | 11 | * @version 5/February/2018 The ORIGIN |
mcm | 1:54da1ce19764 | 12 | * @pre NaN. |
mcm | 1:54da1ce19764 | 13 | * @warning NaN |
mcm | 1:54da1ce19764 | 14 | * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). |
mcm | 1:54da1ce19764 | 15 | */ |
mcm | 1:54da1ce19764 | 16 | #ifndef SI7021_H |
mcm | 1:54da1ce19764 | 17 | #define SI7021_H |
mcm | 1:54da1ce19764 | 18 | |
mcm | 1:54da1ce19764 | 19 | #include "mbed.h" |
mcm | 1:54da1ce19764 | 20 | |
mcm | 1:54da1ce19764 | 21 | |
mcm | 1:54da1ce19764 | 22 | /** |
mcm | 1:54da1ce19764 | 23 | Example: |
mcm | 1:54da1ce19764 | 24 | |
mcm | 1:54da1ce19764 | 25 | [todo] |
mcm | 1:54da1ce19764 | 26 | |
mcm | 1:54da1ce19764 | 27 | */ |
mcm | 1:54da1ce19764 | 28 | |
mcm | 1:54da1ce19764 | 29 | |
mcm | 1:54da1ce19764 | 30 | /*! |
mcm | 1:54da1ce19764 | 31 | Library for the SI7021 I2C Humidity and Temperature sensor. |
mcm | 1:54da1ce19764 | 32 | */ |
mcm | 1:54da1ce19764 | 33 | class SI7021 |
mcm | 1:54da1ce19764 | 34 | { |
mcm | 1:54da1ce19764 | 35 | public: |
mcm | 1:54da1ce19764 | 36 | /** |
mcm | 1:54da1ce19764 | 37 | * @brief DEFAULT ADDRESSES |
mcm | 1:54da1ce19764 | 38 | */ |
mcm | 1:54da1ce19764 | 39 | typedef enum { |
mcm | 1:54da1ce19764 | 40 | SI7021_ADDRESS = ( 0x40 << 1 ) /*!< SI7021 I2C Address */ |
mcm | 1:54da1ce19764 | 41 | } SI7021_address_t; |
mcm | 1:54da1ce19764 | 42 | |
mcm | 1:54da1ce19764 | 43 | |
mcm | 1:54da1ce19764 | 44 | // REGISTERS |
mcm | 1:54da1ce19764 | 45 | /** |
mcm | 1:54da1ce19764 | 46 | * @brief COMMAND CODE |
mcm | 1:54da1ce19764 | 47 | */ |
mcm | 1:54da1ce19764 | 48 | typedef enum { |
mcm | 1:54da1ce19764 | 49 | SI7021_MEASURE_RELATIVE_HUMIDITY_HOLD_MASTER_MODE = 0xE5, /*!< Measure Relative Humidity, Hold Master Mode */ |
mcm | 1:54da1ce19764 | 50 | SI7021_MEASURE_RELATIVE_HUMIDITY_NO_HOLD_MASTER_MODE = 0xF5, /*!< Measure Relative Humidity, No Hold Master Mode */ |
mcm | 1:54da1ce19764 | 51 | SI7021_MEASURE_TEMPERATURE_HOLD_MASTER_MODE = 0xE3, /*!< Measure Temperature, Hold Master Mode */ |
mcm | 1:54da1ce19764 | 52 | SI7021_MEASURE_TEMPERATURE_NO_HOLD_MASTER_MODE = 0xF3, /*!< Measure Temperature, No Hold Master Mode */ |
mcm | 1:54da1ce19764 | 53 | SI7021_READ_TEMPERATURE_VALUE_FROM_PREVIOUS_RH_MEASUREMENT = 0xE0, /*!< Read Temperature Value from Previous RH Measurement */ |
mcm | 1:54da1ce19764 | 54 | SI7021_RESET = 0xFE, /*!< Reset */ |
mcm | 1:54da1ce19764 | 55 | SI7021_WRITE_RH_T_USER_REGISTER_1 = 0xE6, /*!< Write RH/T User Register 1 */ |
mcm | 1:54da1ce19764 | 56 | SI7021_READ_RH_T_USER_REGISTER_1 = 0xE7, /*!< Read RH/T User Register 1 */ |
mcm | 1:54da1ce19764 | 57 | SI7021_WRITE_HEATER_CONTROL_REGISTER = 0x51, /*!< Write Heater Control Register */ |
mcm | 1:54da1ce19764 | 58 | SI7021_READ_HEATER_CONTROL_REGISTER = 0x11, /*!< Read Heater Control Register */ |
mcm | 1:54da1ce19764 | 59 | SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD1 = 0xFA, /*!< Read Electronic ID 1st Byte */ |
mcm | 1:54da1ce19764 | 60 | SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD2 = 0x0F, /*!< Read Electronic ID 1st Byte */ |
mcm | 1:54da1ce19764 | 61 | SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD1 = 0xFC, /*!< Read Electronic ID 2nd Byte */ |
mcm | 1:54da1ce19764 | 62 | SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD2 = 0xC9, /*!< Read Electronic ID 2nd Byte */ |
mcm | 1:54da1ce19764 | 63 | SI7021_READ_FIRMWARE_VERSION_CMD1 = 0x84, /*!< Read Firmware Revision */ |
mcm | 1:54da1ce19764 | 64 | SI7021_READ_FIRMWARE_VERSION_CMD2 = 0xB8 /*!< Read Firmware Revision */ |
mcm | 1:54da1ce19764 | 65 | } SI7021_command_code_t; |
mcm | 1:54da1ce19764 | 66 | |
mcm | 1:54da1ce19764 | 67 | |
mcm | 1:54da1ce19764 | 68 | |
mcm | 1:54da1ce19764 | 69 | // MASTER MODE |
mcm | 1:54da1ce19764 | 70 | /** |
mcm | 1:54da1ce19764 | 71 | * @brief MEASUREMENT RESOLUTION |
mcm | 1:54da1ce19764 | 72 | */ |
mcm | 1:54da1ce19764 | 73 | typedef enum { |
mcm | 1:54da1ce19764 | 74 | SI7021_HOLD_MASTER_MODE = 0x01, /*!< SI7021 HOLD MASTER MODE enabled */ |
mcm | 1:54da1ce19764 | 75 | SI7021_NO_HOLD_MASTER_MODE = 0x00 /*!< SI7021 NO HOLD MASTER MODE enabled */ |
mcm | 1:54da1ce19764 | 76 | } SI7021_master_mode_t; |
mcm | 1:54da1ce19764 | 77 | |
mcm | 1:54da1ce19764 | 78 | |
mcm | 1:54da1ce19764 | 79 | |
mcm | 1:54da1ce19764 | 80 | // USER REGISTER 1 |
mcm | 1:54da1ce19764 | 81 | /* |
mcm | 1:54da1ce19764 | 82 | NOTE: Reset Settings = 0011_1010. |
mcm | 1:54da1ce19764 | 83 | Except where noted, reserved register bits will always read back as “1,” and are not affected by write operations. For |
mcm | 1:54da1ce19764 | 84 | future compatibility, it is recommended that prior to a write operation, registers should be read. Then the values read |
mcm | 1:54da1ce19764 | 85 | from the RSVD bits should be written back unchanged during the write operation. |
mcm | 1:54da1ce19764 | 86 | */ |
mcm | 1:54da1ce19764 | 87 | /** |
mcm | 1:54da1ce19764 | 88 | * @brief MEASUREMENT RESOLUTION |
mcm | 1:54da1ce19764 | 89 | */ |
mcm | 1:54da1ce19764 | 90 | typedef enum { |
mcm | 1:54da1ce19764 | 91 | SI7021_RESOLUTION_MASK = 0x81, /*!< SI7021 Measurement Resolution */ |
mcm | 1:54da1ce19764 | 92 | SI7021_RESOLUTION_RH_12_TEMP_14 = 0x00, /*!< SI7021 12b RH 14b Temp. */ |
mcm | 1:54da1ce19764 | 93 | SI7021_RESOLUTION_RH_8_TEMP_12 = 0x01, /*!< SI7021 9b RH 12b Temp. */ |
mcm | 1:54da1ce19764 | 94 | SI7021_RESOLUTION_RH_10_TEMP_13 = 0x80, /*!< SI7021 10b RH 13b Temp. */ |
mcm | 1:54da1ce19764 | 95 | SI7021_RESOLUTION_RH_11_TEMP_11 = 0x81 /*!< SI7021 11b RH 11b Temp. */ |
mcm | 1:54da1ce19764 | 96 | } SI7021_measurement_resolution_t; |
mcm | 1:54da1ce19764 | 97 | |
mcm | 1:54da1ce19764 | 98 | |
mcm | 1:54da1ce19764 | 99 | |
mcm | 1:54da1ce19764 | 100 | /** |
mcm | 1:54da1ce19764 | 101 | * @brief VDDS |
mcm | 1:54da1ce19764 | 102 | */ |
mcm | 1:54da1ce19764 | 103 | /* |
mcm | 1:54da1ce19764 | 104 | NOTE: The minimum recommended operating voltage is 1.9 V. A transition |
mcm | 1:54da1ce19764 | 105 | of the VDD status bit from 0 to 1 indicates that VDD is |
mcm | 1:54da1ce19764 | 106 | between 1.8 V and 1.9 V. If the VDD drops below 1.8 V, the |
mcm | 1:54da1ce19764 | 107 | device will no longer operate correctly. |
mcm | 1:54da1ce19764 | 108 | */ |
mcm | 1:54da1ce19764 | 109 | typedef enum { |
mcm | 1:54da1ce19764 | 110 | SI7021_VDDS_STATUS_MASK = 0x40, /*!< SI7021 VDD mask. */ |
mcm | 1:54da1ce19764 | 111 | SI7021_VDDS_STATUS_VDD_OK = ( 0 << 6 ), /*!< VDD OK. */ |
mcm | 1:54da1ce19764 | 112 | SI7021_VDDS_STATUS_VDD_LOW = ( 1 << 6 ) /*!< VDD Low. */ |
mcm | 1:54da1ce19764 | 113 | } SI7021_vdds_status_t; |
mcm | 1:54da1ce19764 | 114 | |
mcm | 1:54da1ce19764 | 115 | |
mcm | 1:54da1ce19764 | 116 | |
mcm | 1:54da1ce19764 | 117 | /** |
mcm | 1:54da1ce19764 | 118 | * @brief HTRE |
mcm | 1:54da1ce19764 | 119 | */ |
mcm | 1:54da1ce19764 | 120 | typedef enum { |
mcm | 1:54da1ce19764 | 121 | SI7021_HTRE_MASK = 0x03, /*!< SI7021 HTRE Mask */ |
mcm | 1:54da1ce19764 | 122 | SI7021_HTRE_ENABLED = ( 1 << 2 ), /*!< SI7021 On-chip Heater Enable */ |
mcm | 1:54da1ce19764 | 123 | SI7021_HTRE_DISABLED = ( 0 << 2 ) /*!< SI7021 On-chip Heater Disable */ |
mcm | 1:54da1ce19764 | 124 | } SI7021_heater_t; |
mcm | 1:54da1ce19764 | 125 | |
mcm | 1:54da1ce19764 | 126 | |
mcm | 1:54da1ce19764 | 127 | |
mcm | 1:54da1ce19764 | 128 | |
mcm | 1:54da1ce19764 | 129 | |
mcm | 1:54da1ce19764 | 130 | |
mcm | 1:54da1ce19764 | 131 | #ifndef SI7021_VECTOR_STRUCT_H |
mcm | 1:54da1ce19764 | 132 | #define SI7021_VECTOR_STRUCT_H |
mcm | 1:54da1ce19764 | 133 | typedef struct { |
mcm | 1:54da1ce19764 | 134 | float RelativeHumidity; |
mcm | 1:54da1ce19764 | 135 | float Temperature; |
mcm | 1:54da1ce19764 | 136 | |
mcm | 1:54da1ce19764 | 137 | uint32_t ElectronicSerialNumber_LSB; |
mcm | 1:54da1ce19764 | 138 | uint32_t ElectronicSerialNumber_MSB; |
mcm | 1:54da1ce19764 | 139 | |
mcm | 1:54da1ce19764 | 140 | uint8_t FirmwareRevision; |
mcm | 1:54da1ce19764 | 141 | SI7021_vdds_status_t BatteryStatus; |
mcm | 1:54da1ce19764 | 142 | } SI7021_vector_data_t; |
mcm | 1:54da1ce19764 | 143 | #endif |
mcm | 1:54da1ce19764 | 144 | |
mcm | 1:54da1ce19764 | 145 | |
mcm | 1:54da1ce19764 | 146 | |
mcm | 1:54da1ce19764 | 147 | /** |
mcm | 1:54da1ce19764 | 148 | * @brief INTERNAL CONSTANTS |
mcm | 1:54da1ce19764 | 149 | */ |
mcm | 1:54da1ce19764 | 150 | typedef enum { |
mcm | 1:54da1ce19764 | 151 | SI7021_SUCCESS = 0, |
mcm | 1:54da1ce19764 | 152 | SI7021_FAILURE = 1, |
mcm | 1:54da1ce19764 | 153 | I2C_SUCCESS = 0 /*!< I2C communication was fine */ |
mcm | 1:54da1ce19764 | 154 | } SI7021_status_t; |
mcm | 1:54da1ce19764 | 155 | |
mcm | 1:54da1ce19764 | 156 | |
mcm | 1:54da1ce19764 | 157 | |
mcm | 1:54da1ce19764 | 158 | |
mcm | 1:54da1ce19764 | 159 | /** Create an SI7021 object connected to the specified I2C pins. |
mcm | 1:54da1ce19764 | 160 | * |
mcm | 1:54da1ce19764 | 161 | * @param sda I2C data pin |
mcm | 1:54da1ce19764 | 162 | * @param scl I2C clock pin |
mcm | 1:54da1ce19764 | 163 | * @param addr I2C slave address |
mcm | 1:54da1ce19764 | 164 | * @param freq I2C frequency in Hz. |
mcm | 1:54da1ce19764 | 165 | */ |
mcm | 1:54da1ce19764 | 166 | SI7021 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); |
mcm | 1:54da1ce19764 | 167 | |
mcm | 1:54da1ce19764 | 168 | /** Delete SI7021 object. |
mcm | 1:54da1ce19764 | 169 | */ |
mcm | 1:54da1ce19764 | 170 | ~SI7021(); |
mcm | 1:54da1ce19764 | 171 | |
mcm | 1:54da1ce19764 | 172 | /** It configures the device: resolution and heater. |
mcm | 1:54da1ce19764 | 173 | */ |
mcm | 1:54da1ce19764 | 174 | SI7021_status_t SI7021_Conf ( SI7021_measurement_resolution_t myResolution, SI7021_heater_t myHeater ); |
mcm | 1:54da1ce19764 | 175 | |
mcm | 1:54da1ce19764 | 176 | /** It performs a software reset. |
mcm | 1:54da1ce19764 | 177 | */ |
mcm | 1:54da1ce19764 | 178 | SI7021_status_t SI7021_SoftReset ( void ); |
mcm | 1:54da1ce19764 | 179 | |
mcm | 1:54da1ce19764 | 180 | /** It gets the electronic serial number. |
mcm | 1:54da1ce19764 | 181 | */ |
mcm | 1:54da1ce19764 | 182 | SI7021_status_t SI7021_GetElectronicSerialNumber ( SI7021_vector_data_t* mySerialNumber ); |
mcm | 1:54da1ce19764 | 183 | |
mcm | 1:54da1ce19764 | 184 | /** It gets the firmware revision. |
mcm | 1:54da1ce19764 | 185 | */ |
mcm | 1:54da1ce19764 | 186 | SI7021_status_t SI7021_GetFirmwareRevision ( SI7021_vector_data_t* myFirmwareRevision ); |
mcm | 1:54da1ce19764 | 187 | |
mcm | 1:54da1ce19764 | 188 | /** It sets the heater current. |
mcm | 1:54da1ce19764 | 189 | */ |
mcm | 1:54da1ce19764 | 190 | SI7021_status_t SI7021_SetHeaterCurrent ( char myHeaterCurrent ); |
mcm | 1:54da1ce19764 | 191 | |
mcm | 1:54da1ce19764 | 192 | /** It performs a new temperature measurement. |
mcm | 1:54da1ce19764 | 193 | */ |
mcm | 1:54da1ce19764 | 194 | SI7021_status_t SI7021_TriggerTemperature ( SI7021_master_mode_t myMode ); |
mcm | 1:54da1ce19764 | 195 | |
mcm | 1:54da1ce19764 | 196 | /** It read the temperature. |
mcm | 1:54da1ce19764 | 197 | */ |
mcm | 1:54da1ce19764 | 198 | SI7021_status_t SI7021_ReadTemperature ( SI7021_vector_data_t* myTemperature ); |
mcm | 1:54da1ce19764 | 199 | |
mcm | 1:54da1ce19764 | 200 | /** It reads the raw data from temperature. |
mcm | 1:54da1ce19764 | 201 | */ |
mcm | 1:54da1ce19764 | 202 | SI7021_status_t SI7021_ReadRawTemperature ( SI7021_vector_data_t* myTemperature ); |
mcm | 1:54da1ce19764 | 203 | |
mcm | 1:54da1ce19764 | 204 | /** It reads the raw temperature data after a relative humidity measurement was done. |
mcm | 1:54da1ce19764 | 205 | */ |
mcm | 1:54da1ce19764 | 206 | SI7021_status_t SI7021_ReadRawTemperatureFromRH ( SI7021_vector_data_t* myTemperature ); |
mcm | 1:54da1ce19764 | 207 | |
mcm | 1:54da1ce19764 | 208 | /** It reads the temperature after a relative humidity measurement was done. |
mcm | 1:54da1ce19764 | 209 | */ |
mcm | 1:54da1ce19764 | 210 | SI7021_status_t SI7021_ReadTemperatureFromRH ( SI7021_vector_data_t* myTemperature ); |
mcm | 1:54da1ce19764 | 211 | |
mcm | 1:54da1ce19764 | 212 | /** It performs a new relative humidity measurement. |
mcm | 1:54da1ce19764 | 213 | */ |
mcm | 1:54da1ce19764 | 214 | SI7021_status_t SI7021_TriggerHumidity ( SI7021_master_mode_t myMode ); |
mcm | 1:54da1ce19764 | 215 | |
mcm | 1:54da1ce19764 | 216 | /** It reads the relative humidity. |
mcm | 1:54da1ce19764 | 217 | */ |
mcm | 1:54da1ce19764 | 218 | SI7021_status_t SI7021_ReadHumidity ( SI7021_vector_data_t* myHumidity ); |
mcm | 1:54da1ce19764 | 219 | |
mcm | 1:54da1ce19764 | 220 | /** It reads the raw data from relative humidity. |
mcm | 1:54da1ce19764 | 221 | */ |
mcm | 1:54da1ce19764 | 222 | SI7021_status_t SI7021_ReadRawHumidity ( SI7021_vector_data_t* myHumidity ); |
mcm | 1:54da1ce19764 | 223 | |
mcm | 1:54da1ce19764 | 224 | /** It gets the battery status. |
mcm | 1:54da1ce19764 | 225 | */ |
mcm | 1:54da1ce19764 | 226 | SI7021_status_t SI7021_GetBatteryStatus ( SI7021_vector_data_t* myBatteryStatus ); |
mcm | 1:54da1ce19764 | 227 | |
mcm | 1:54da1ce19764 | 228 | |
mcm | 1:54da1ce19764 | 229 | |
mcm | 1:54da1ce19764 | 230 | |
mcm | 1:54da1ce19764 | 231 | private: |
mcm | 1:54da1ce19764 | 232 | I2C _i2c; |
mcm | 1:54da1ce19764 | 233 | uint32_t _SI7021_Addr; |
mcm | 1:54da1ce19764 | 234 | }; |
mcm | 1:54da1ce19764 | 235 | |
mcm | 1:54da1ce19764 | 236 | #endif |