GY-63_MS5611/libraries/SHT85/README.md
2021-08-07 12:34:52 +02:00

6.6 KiB
Raw Blame History

Arduino CI GitHub release License: MIT

SHT85

Arduino library for the SHT85 temperature and humidity sensor

Based upon the SHT31 library - https://github.com/RobTillaart/SHT31

Warning: to keep self-heating below 0.1°C, the SHT85 sensor should not be used for more than 10% of the time.

Description

    // TOPVIEW
    //            +-------+
    // +-----\    | SDA 4 -----
    // | /-+  ----+ VCC 3 -----
    // | +-+  ----+ GND 2 -----
    // +-----/    | SCL 1 -----
    //            +-------+

The SHT85 sensors should work up to 1000 KHz, however during tests with an Arduino UNO it stopped between 500 - 550 KHz so to be safe I recommend not to use it above 400 KHz. Also the differences in read time becomes quite small. (max 15% gain). See output example sketch.

I2C speed read ms notes
100 KHz 5.11
150 KHz 4.79
200 KHz 4.64
250 KHz 4.56
300 KHz 4.50
350 KHz 4.47
400 KHz 4.45
450 KHz 4.43
500 KHz 4.42
550 KHz ---- fail

Compatibility

This library should also work for SHT30, SHT31 and SHT35 but this is not verified yet.

SENSOR Temperature accuracy Humidity accuracy
SHT30 ~0.3 2.0
SHT31 ~0.3 1.5
SHT35 ~0.2 1.5
SHT85 ~0.2 1.5

Need to investigate if the interface is identical? If so the libraries might be merged.

Interface

Base interface

  • SHT85() constructor.
  • begin(address, dataPin, clockPin) begin function for ESP8266 & ESP32; WARNING: not verified yet returns false if device address is incorrect or device cannot be reset.
  • begin(address, TwoWire *wire = &Wire) for platforms with multiple I2C busses.
  • read(bool fast = true) blocks 4 (fast) or 15 (slow) milliseconds + actual read + math. Does read both the temperature and humidity.
  • isConnected() check sensor is reachable over I2C. Returns false if not connected.
  • uint16_t readStatus() details see datasheet and Status fields below
  • uint32_t lastRead() in milliSeconds since start of program.
  • reset(bool hard = false) resets the sensor, soft reset by default. Returns false if fails.
  • getHumidity() computes the relative humidity in % based off the latest raw reading, and returns it
  • getTemperature() computes the temperature in °C based off the latest raw reading, and returns it
  • getRawHumidity() returns the raw two-byte representation of humidity directly from the sensor
  • getRawTemperature() returns the raw two-byte representation of temperature directly from the sensor

Note that the temperature and humidity values are recalculated on every call to getHumidity() and getTemperature(). If you're worried about the extra cycles, you should make sure to cache these values or only request them after you've performed a new reading.

Error interface

  • getError() returns last set error flag and clear it. Be sure to clear the error flag by calling getError() before calling any command as the error flag could be from a previous command.
Error Symbolic Description
0x00 SHT_OK no error
0x81 SHT_ERR_WRITECMD I2C write failed
0x82 SHT_ERR_READBYTES I2C read failed
0x83 SHT_ERR_HEATER_OFF Could not switch off heater
0x84 SHT_ERR_NOT_CONNECT Could not connect
0x85 SHT_ERR_CRC_TEMP CRC error in temperature
0x86 SHT_ERR_CRC_HUM CRC error in humidity
0x87 SHT_ERR_CRC_STATUS CRC error in statusfield

Heater interface

Use the heater for max 180 seconds, and let it cool down an equal period of time.

WARNING: Do not use heater for long periods.

WARNING: The user is responsible to switch the heater off manually! The class does NOT do this automatically.

  • setHeatTimeout(uint8_t seconds) Set the time out of the heat cycle. This value is truncated to max 180 seconds.
  • heatOn() switches heat cycle on. Returns false if fails.
  • heatOff() switches heat cycle off. Returns false if fails.
  • isHeaterOn() is the sensor still in heating cycle? replaces heatUp(). Will switch heat off if max heating time has passed.
  • heatUp() will be obsolete in the future.

Async interface

See async example for usage

  • requestData() requests a new measurement. Returns false if this fails.
  • dataReady() checks if enough time has passed to read the data. (15 milliseconds)
  • readData(bool fast = true) fast skips CRC check. Returns false if reading fails or in case of a CRC fail.

Status fields

BIT Description values
15 Alert pending status '0' : no pending alerts
'1' : at least one pending alert - default
14 Reserved '0'
13 Heater status '0 : Heater OFF - default
'1 : Heater ON
12 Reserved '0'
11 Humidity tracking alert '0 : no alert - default
'1 : alert
10 Temperature tracking alert '0 : no alert - default
'1 : alert
9-5 Reserved '00000'
4 System reset detected '0' : no reset since last clear status register command
'1' : reset detected (hard or soft reset command or supply fail) - default
3-2 Reserved '00'
1 Command status '0' : last command executed successfully
'1' : last command not processed. Invalid or failed checksum
0 Write data checksum status '0' : checksum of last write correct
'1' : checksum of last write transfer failed

Future

  • verify working with ESP32
  • merge with other SHT sensors if possible
  • SHT_BASE class ?
  • investigate command ART (auto sampling at 4 Hz)
  • investigate command BREAK (stop auto sampling)

Operation

See examples