GY-63_MS5611/libraries/DHT20/README.md
2022-09-17 13:50:11 +02:00

5.3 KiB

Arduino CI Arduino-lint JSON check License: MIT GitHub release

DHT20

Arduino library for I2C DHT20 temperature and humidity sensor.

Description

The library must be initiated by calling the begin() function, or begin(dataPin, clockPin) for ESP32 and similar platforms.

Thereafter one has to call the read() function to do the actual reading, and with getTemperature() and getHumidity() to get the measured values. Calling these latter again will return the same values until a new read() is called.

The read() call of this sensor is blocking for 80+ milliseconds (datasheet 7.4) so the library also has a asynchronous interface. See below.

Verified to work with Arduino UNO and ESP32.

Connection

Always check datasheet

Front view

          +--------------+
  VDD ----| 1            |
  SDA ----| 2    DHT20   |
  GND ----| 3            |
  SCL ----| 4            |
          +--------------+

Tested

Examples verified to work with Arduino UNO and ESP32.

Interface

Constructor

  • DHT20(TwoWire *wire = &Wire) constructor, using a specific Wire (I2C bus).
  • bool begin(uint8_t dataPin, uint8_t clockPin) begin for ESP32 et al, to set I2C bus pins.
  • bool begin() initializer for non ESP32. Returns true if connected.
  • bool isConnected() returns true if the address of the DHT20 can be seen on the I2C bus.

Core

  • int8_t read() read the sensor and store the values internally. It returns the status of the read which should be 0.
  • float getHumidity() returns last Humidity read.
  • float getTemperature() returns last Temperature read.

Offset

  • void setHumOffset(float offset) set an offset to calibrate (1st order) the sensor.
  • float getHumOffset() return current offset, default 0.
  • void setTempOffset(float offset) set an offset to calibrate (1st order) the sensor.
  • float getTempOffset() return current offset, default 0.

Asynchronous interface

Note the async interface is not 100% functional yet. Expect functional complete in 0.2.0.

There are two timings that need to be considdered,

  • time between requests = 1000 ms
  • time between request and data ready.

The async interface allows one to continue processing whatever after a requestData() has been made. Note that there should be at least 1000 milliseconds between subsequent requests.

After DHT20_ACQUISITION_TIME == 85 ms enough time after the request has passed to read the data of the measurement. So the sensor can be read with readData().

To interpret the read bits to temperature, humidity and status one needs to call convert() as last step.

  • int requestData() signals the sensor to make a new measurement. Note there must be at least 1000 milliseconds between requests!
  • int readData() does the actual reading of the data.
  • int convert() converts the read bits to temperature and humidity.

See the example DHT20_async.ino

Status

  • uint8_t readStatus() forced read of the status only.
  • bool isCalibrated() idem, wrapper around readStatus()
  • bool isMeasuring() idem, wrapper around readStatus()
  • bool isIdle() idem, wrapper around readStatus()
  • int internalStatus() returns the internal status of the sensor. (debug ).
status bit meaning
7 busy making measurement
6 - 4 unknown
3 1 = calibrated, 0 is not
2 - 0 unknown

Timing

  • uint32_t lastRead() last time the sensor is read in milliseconds since start.
  • uint32_t lastRequest() last time a request is made to make a measurement.

Return codes

name value notes
DHT20_OK 00 OK
DHT20_ERROR_CHECKSUM -10 values might be OK if they are like recent previous ones.
DHT20_ERROR_CONNECT -11 check connection
DHT20_MISSING_BYTES -12 check connection
DHT20_ERROR_BYTES_ALL_ZERO -13 check connection
DHT20_ERROR_READ_TIMEOUT -14
DHT20_ERROR_LASTREAD -15

Operation

See examples

Future

must

  • update documentation
  • comments in .h file

should

  • add examples
  • check TODO's in code.

could

  • improve unit tests.
  • investigate
    • sensor calibration (website aosong?)

won't

  • void setIgnoreChecksum(bool = false) ignore checksum flag speeds up communication a bit
  • bool getIgnoreChecksum() get status. for completeness.