mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
165 lines
6.1 KiB
Markdown
165 lines
6.1 KiB
Markdown
|
|
|||
|
[![Arduino CI](https://github.com/robtillaart/SHT85/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
|||
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/SHT85.svg?maxAge=3600)](https://github.com/RobTillaart/SHT85/releases)
|
|||
|
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/SHT85/blob/master/LICENSE)
|
|||
|
|
|||
|
|
|||
|
# 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<EFBFBD>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 <20>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 <20>clear status register<65> 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
|
|||
|
|