6.1 KiB
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 at ~500 KHz so to be safe I recommend not to use it above 400 KHz. Also the differences in readtime 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() returns relative humidity in %. Needs a read() to update.
- getTemperature() returns temperature in °C. Needs a read() to update.
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. (typical 15 millis)
- 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 cmd executed successfully |
'1': last cmd 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
- investigate command ART (auto sampling at 4 Hz)
- investigate command BREAK (stop auto sampling)
- direct Fahrenheit formula
Operation
See examples