I2C HUMIDITY AND TEMPERATURE SENSOR

Dependents:   dashboard_f1

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?

UserRevisionLine numberNew 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