83 #include <Adafruit_BusIO_Register.h> 84 #include <Adafruit_I2CDevice.h> 85 #include <Adafruit_Sensor.h> 91 #define MS8607_PT_ADDRESS \ 93 #define MS8607_HUM_ADDRESS \ 97 #define HSENSOR_RESET_COMMAND 0xFE 98 #define HSENSOR_READ_HUMIDITY_W_HOLD_COMMAND \ 100 #define HSENSOR_READ_HUMIDITY_WO_HOLD_COMMAND \ 102 #define HSENSOR_READ_SERIAL_FIRST_8BYTES_COMMAND \ 104 #define HSENSOR_READ_SERIAL_LAST_6BYTES_COMMAND \ 106 #define HSENSOR_WRITE_USER_REG_COMMAND 0xE6 107 #define HSENSOR_READ_USER_REG_COMMAND 0xE7 110 #define HSENSOR_TEMPERATURE_COEFFICIENT \ 112 #define HSENSOR_CONSTANT_A (float)(8.1332) 113 #define HSENSOR_CONSTANT_B (float)(1762.39) 114 #define HSENSOR_CONSTANT_C (float)(235.66) 117 #define TEMPERATURE_COEFF_MUL (175.72) 118 #define TEMPERATURE_COEFF_ADD (-46.85) 121 #define HUMIDITY_COEFF_MUL (125) 122 #define HUMIDITY_COEFF_ADD (-6) 125 #define HSENSOR_CONVERSION_TIME_12b 16 126 #define HSENSOR_CONVERSION_TIME_10b 5 127 #define HSENSOR_CONVERSION_TIME_8b 3 128 #define HSENSOR_CONVERSION_TIME_11b 9 131 #define HSENSOR_USER_REG_RESOLUTION_MASK 0x81 132 #define HSENSOR_USER_REG_END_OF_BATTERY_MASK \ 134 #define HSENSOR_USER_REG_ENABLE_ONCHIP_HEATER_MASK \ 136 #define HSENSOR_USER_REG_DISABLE_OTP_RELOAD_MASK \ 139 #define MS8607_RH_ADDRESS (0x40) 140 #define MS8607_RH_LSB \ 144 #define PROM_ADDRESS_READ_ADDRESS_0 0xA0 147 #define P_T_RESET 0x1E 148 #define CONVERT_D1_OSR_256 0x40 149 #define CONVERT_D1_OSR_512 0x42 150 #define CONVERT_D1_OSR_1024 0x44 151 #define CONVERT_D1_OSR_2048 0x46 152 #define CONVERT_D1_OSR_4096 0x48 153 #define CONVERT_D1_OSR_8192 0x4A 154 #define CONVERT_D2_OSR_256 0x50 155 #define CONVERT_D2_OSR_512 0x52 156 #define CONVERT_D2_OSR_1024 0x54 157 #define CONVERT_D2_OSR_2048 0x56 158 #define CONVERT_D2_OSR_4096 0x58 159 #define CONVERT_D2_OSR_8192 0x5A 160 #define ADC_READ 0x00 164 #define HUM_RESET 0xFE 165 #define HUM_WRITE_REGISTER 0xE6 166 #define HUM_READ_REGISTER 0xE7 167 #define HUM_MEASURE_RH_HOLD \ 169 #define HUM_MEASURE_RH_NO_HOLD \ 173 #define PSENSOR_RESET_COMMAND 0x1E 174 #define PSENSOR_START_PRESSURE_ADC_CONVERSION \ 176 #define PSENSOR_START_TEMPERATURE_ADC_CONVERSION \ 178 #define PSENSOR_READ_ADC 0x00 198 MS8607_HUMIDITY_RESOLUTION_OSR_12b = 0x00,
199 MS8607_HUMIDITY_RESOLUTION_OSR_11b = 0x81,
200 MS8607_HUMIDITY_RESOLUTION_OSR_10b = 0x80,
201 MS8607_HUMIDITY_RESOLUTION_OSR_8b = 0x01,
209 MS8607_I2C_HOLD = 0xE5,
210 MS8607_I2C_NO_HOLD = 0xF5,
215 #define HSENSOR_READ_HUMIDITY_W_HOLD_COMMAND \ 217 #define HSENSOR_READ_HUMIDITY_WO_HOLD_COMMAND \ 224 class Adafruit_MS8607_Temp : public Adafruit_Sensor { 232 void getSensor(sensor_t *);
235 int _sensorID = 0x8600;
253 int _sensorID = 0x8601;
272 int _sensorID = 0x8602;
284 bool begin(TwoWire *wire = &Wire, int32_t sensor_id = 0);
285 bool init(int32_t sensor_id);
295 bool enableHumidityClockStretching(
bool enable_stretching);
297 bool getEvent(sensors_event_t *pressure, sensors_event_t *temp,
298 sensors_event_t *humidity);
299 Adafruit_Sensor *getTemperatureSensor(
void);
300 Adafruit_Sensor *getPressureSensor(
void);
301 Adafruit_Sensor *getHumiditySensor(
void);
309 Adafruit_I2CDevice *pt_i2c_dev = NULL;
310 Adafruit_I2CDevice *hum_i2c_dev =
322 bool _read_humidity(
void);
323 bool _psensor_crc_check(uint16_t *n_prom, uint8_t crc);
324 bool _hsensor_crc_check(uint16_t value, uint8_t crc);
326 bool _fetch_temp_calibration_values(
void);
327 uint8_t _read_humidity_user_register(
void);
328 bool _write_humidity_user_register(uint8_t new_reg_value);
337 void fillTempEvent(sensors_event_t *temp, uint32_t timestamp);
338 void fillPressureEvent(sensors_event_t *temp, uint32_t timestamp);
339 void fillHumidityEvent(sensors_event_t *humidity, uint32_t timestamp);
341 void _applyTemperatureCorrection(
void);
342 bool _applyPTCorrections(int32_t raw_temp, int32_t raw_pressure);
348 uint16_t press_sens, press_offset, press_sens_temp_coeff,
349 press_offset_temp_coeff, ref_temp,
352 _hum_sensor_i2c_read_mode;
bool getEvent(sensors_event_t *)
Gets the pressure as a standard sensor event.
Definition: Adafruit_MS8607.cpp:366
Definition: Adafruit_MS8607.h:279
Adafruit_MS8607_Humidity(Adafruit_MS8607 *parent)
Create an Adafruit_Sensor compatible object for the Humidity sensor.
Definition: Adafruit_MS8607.h:266
Adafruit Unified Sensor interface for the temperature sensor component of the MS8607.
Definition: Adafruit_MS8607.h:224
bool getEvent(sensors_event_t *pressure, sensors_event_t *temp, sensors_event_t *humidity)
Gets the humidity sensor and temperature values as sensor events.
Definition: Adafruit_MS8607.cpp:272
2
Definition: Adafruit_MS8607.h:187
Adafruit_MS8607_Pressure(Adafruit_MS8607 *parent)
Create an Adafruit_Sensor compatible object for the Pressure sensor.
Definition: Adafruit_MS8607.h:247
Adafruit_MS8607_Temp(Adafruit_MS8607 *parent)
Create an Adafruit_Sensor compatible object for the temperature sensor.
Definition: Adafruit_MS8607.h:229
ms8607_humidity_resolution_t
Options for setHumidityResolution.
Definition: Adafruit_MS8607.h:197
3
Definition: Adafruit_MS8607.h:188
5
Definition: Adafruit_MS8607.h:190
1
Definition: Adafruit_MS8607.h:186
Adafruit Unified Sensor interface for the pressure sensor component of the MS8607.
Definition: Adafruit_MS8607.h:243
void getSensor(sensor_t *)
Gets the sensor_t object describing the MS8607's pressure sensor.
Definition: Adafruit_MS8607.cpp:315
uint16_t _sensorid_humidity
ID number for humidity.
Definition: Adafruit_MS8607.h:307
uint16_t _sensorid_temp
ID number for temperature.
Definition: Adafruit_MS8607.h:305
4
Definition: Adafruit_MS8607.h:189
0
Definition: Adafruit_MS8607.h:185
Adafruit Unified Sensor interface for the pressure sensor component of the MS8607.
Definition: Adafruit_MS8607.h:262
uint16_t _sensorid_pressure
ID number for pressure.
Definition: Adafruit_MS8607.h:306
ms8607_hum_clock_stretch_t
Options for I2C clock stretch for humidity readings.
Definition: Adafruit_MS8607.h:208
ms8607_pressure_resolution_t
Pressure sensor resolution options.
Definition: Adafruit_MS8607.h:184