Interfacing ASAIR DHT20 Temperature & Humidity Sensor with Arduino

Learn how to interface the DHT20 compact temperature and humidity sensor from Asair with Arduino.

Interfacing ASAIR DHT20 Temperature Humidity Sensor Featured Image by CIRCUITSTATE Electronics

In the last post, we introduced you to the AGS02MA TVOC sensor. This time, it is the DHT20 temperature and humidity sensor from the same company Asair. The DHT20 is a new-generation sensor with better performance and reliability according to the manufacturer. Inside the DHT20 is the AHT20 sensor module. The IC is soldered on a small PCB and the pins are broken out. The entire circuit is enclosed in a plastic case. The dimensions of the plastic enclosure and the pinout are the same across this type of sensors from Asair. This makes it easy to swap the sensors in your application. In this post, we will take a closer look at the sensor and learn how you can interface this sensor with any of your Arduino microcontroller boards.

How-To-Use-VS-Code-To-Create-and-Upload-Arduino-Sketches-Featured-Image-01-1-1

How to Use VS Code for Creating and Uploading Arduino Sketches

Learn how to use the popular VS Code IDE to develop Arduino projects and upload your sketches to Arduino boards directly, without using Arduino IDE.

ASAIR DHT20

DHT20 is compact and low-cost temperature and humidity sensor. It is a new-generation sensor that replaces the popular DHT11/DHT22 class sensors from the same brand. The form-factor of the sensor remain the same. However, the new DHT20 uses I2C interface instead of a simple data output found in the DHT11/DHT22. Inside the DHT20 is the actual sensor AHT20 soldered on a small PCB. If you are planning to use this sensor in your project and you want to keep things small, it is better to use the AHT20 sensor directly. You can use this sensor in applications like HVAC (Heating Ventilation & Air Conditioning), air quality monitor, dehumidifiers etc.

The sensor module breaks out four pins for power and the I2C interface. There are no internal I2C pull-ups, and so you need to add them externally. The sensor can be powered from 2.2~5.5V. Though we do not recommend exceeding the 5V mark. The humidity measurement range is from 0~100% RH (Relative Humidity) with an accuracy of ±3% RH at 25°C, and a repeatability of 0.1% RH/Y. The temperature measurement range is from -40~+80 °C with an accuracy of ±0.5 °C. The sensor is pre-calibrated and works out of the box. We bought the DHT20 sensor from Robu for INR 120. You can also get the AHT20 for almost half the price.

Specifications

ModelDHT20
Supply Voltage2.2~5.5V DC
Temperature Range-40 ~ +80°C
Humidity Range0 ~ 100% RH
Temperature Accuracy0.5 °C
Humidity Accuracy±3% RH (25°C)
Temp. Repeatability0.1 °C/Y
Humidity Repeatability0.1% RH/Y
Temp. Resolution0.01 °C
Humidity Resolution0.024% RH
Response TimeTemp.: 5~30s (τ 63%)
RH: <85 (τ 63%)
MaterialABS + PC
InterfaceI2C

Pinout

#PinNameFunction
1VDDPower Input
2SDASerial Data
3GNDGround
4SCLSerial Clock

Dimensions

Asair DHT20 Temperature and Humidity Sensor Pinout and Mechanical Dimensions by CIRCUITSTATE Electronics

Wiring

We will use the FireBeetle-ESP32E board for interfacing the sensor. Connecting the DHT20 to the ESP32 board is easy. You just need to supply the power and connect the I2C pins to the I2C interface of the microcontroller. Wire them up the following way.

DHT20FireBeetle-ESP32E
#PinName#PinGPIO
1VDD3V3
2SDASDAGPIO21
3GNDGND
4SCLSCLGPIO22

If you are using a 5V microcontroller, supply 5V for the sensor also. The sensor works reliably between 3.3V to 5.5V. But it is not recommended to exceed the 5V level. The sensor does not have on-board I2C pull-ups. Therefore, we need to add them externally. We are using a breadboard to connect everything.

ASAIR DHT20 Temperature Humidity Sensor Wiring by CIRCUITSTATE Electronics
Our wiring setup

Code

We are going to use the Adafruit AHTX0 Arduino library for reading the measurements from the DHT20 sensor. The library is written for the AHT10 & AHT20 sensors. Since DHT20 also uses AHT20 inside, the library is compatible with our sensor. We will use the FireBeetle-ESP32E microcontroller board for this demo and create the project using PlatformIO and VS Code. Following is the main.cpp file.

//======================================================================================//

#include <Arduino.h>
#include <Adafruit_AHTX0.h>

//======================================================================================//
// Global variables

Adafruit_AHTX0 dht; // Create a new sensor object.

//======================================================================================//
// Forward declarations

bool initDHT20();
void readSensor();

//======================================================================================//

void setup() {
  Serial.begin (115200);
  Serial.println();
  Serial.println ("Asair DHT20 - Temperature & Humidity Sensor Example");
  Serial.println();

  initDHT20();
}

//======================================================================================//

bool initDHT20() {
  Serial.println (F("initDHT20 [INFO]: Initializing DHT20 sensor.."));

  if (!dht.begin()) {
    Serial.println ("initDHT20 [ERROR]: Couldn't find the DHT20 sensor. Check your wiring and pull-up resistors.");
    while (1) yield();
  }

  Serial.println();
  return true;
}

//======================================================================================//

void loop() {
  readSensor();
  delay (1000);
}

//======================================================================================//

void readSensor() {
  sensors_event_t humidity, temp;
  dht.getEvent (&humidity, &temp); // Read the temperature and humidity

  Serial.print ("Temperature: ");
  Serial.print (temp.temperature);
  Serial.println (" °C");

  Serial.print ("Humidity: ");
  Serial.print (humidity.relative_humidity);
  Serial.println (" % RH");
  Serial.println();
}

//======================================================================================//
main.cpp

Following is the platformio.ini configuration file.

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
lib_deps = 
  Adafruit_AGS02MA=https://github.com/adafruit/Adafruit_AHTX0.git
platformio.ini

Following is the compilation and upload log.

Executing task: C:\PIO\penv\Scripts\platformio.exe run --target upload 


Processing esp32doit-devkit-v1 (platform: espressif32; board: esp32doit-devkit-v1; framework: arduino)
-----------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32doit-devkit-v1.html
PLATFORM: Espressif 32 (6.10.0) > DOIT ESP32 DEVKIT V1
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES: 
 - framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b 
 - tool-esptoolpy @ 1.40501.0 (4.5.1) 
 - tool-mkfatfs @ 2.0.1 
 - tool-mklittlefs @ 1.203.210628 (2.3) 
 - tool-mkspiffs @ 2.230.0 (2.30) 
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 38 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Adafruit AHTX0 @ 2.0.5+sha.805eab7
Building in release mode
Compiling .pio\build\esp32doit-devkit-v1\src\main.cpp.o
Building .pio\build\esp32doit-devkit-v1\bootloader.bin
Generating partitions .pio\build\esp32doit-devkit-v1\partitions.bin
esptool.py v4.5.1
Creating esp32 image...
Merged 1 ELF section
Successfully created esp32 image.
Compiling .pio\build\esp32doit-devkit-v1\lib265\Wire\Wire.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\lib2bb\SPI\SPI.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\lib8c8\Adafruit BusIO\Adafruit_BusIO_Register.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\lib8c8\Adafruit BusIO\Adafruit_GenericDevice.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\lib8c8\Adafruit BusIO\Adafruit_I2CDevice.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\lib8c8\Adafruit BusIO\Adafruit_SPIDevice.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\libaf2\Adafruit Unified Sensor\Adafruit_Sensor.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\lib860\Adafruit_AGS02MA\Adafruit_AHTX0.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\Esp.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\FirmwareMSC.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\HWCDC.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\Print.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\USB.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\USBCDC.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\USBMSC.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\WString.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\base64.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-adc.c.o
Archiving .pio\build\esp32doit-devkit-v1\lib265\libWire.a
Archiving .pio\build\esp32doit-devkit-v1\lib2bb\libSPI.a
Archiving .pio\build\esp32doit-devkit-v1\lib8c8\libAdafruit BusIO.a
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-i2c-slave.c.o
Archiving .pio\build\esp32doit-devkit-v1\libaf2\libAdafruit Unified Sensor.a
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-matrix.c.o
Indexing .pio\build\esp32doit-devkit-v1\lib265\libWire.a
Indexing .pio\build\esp32doit-devkit-v1\lib2bb\libSPI.a
Indexing .pio\build\esp32doit-devkit-v1\lib8c8\libAdafruit BusIO.a
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-misc.c.o
Indexing .pio\build\esp32doit-devkit-v1\libaf2\libAdafruit Unified Sensor.a
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-rgb-led.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-rmt.c.o
Archiving .pio\build\esp32doit-devkit-v1\lib860\libAdafruit_AGS02MA.a
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-spi.c.o
Indexing .pio\build\esp32doit-devkit-v1\lib860\libAdafruit_AGS02MA.a
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-time.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-tinyusb.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\firmware_msc_fat.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\libb64\cdecode.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\libb64\cencode.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\main.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\esp32doit-devkit-v1\libFrameworkArduino.a
Indexing .pio\build\esp32doit-devkit-v1\libFrameworkArduino.a
Linking .pio\build\esp32doit-devkit-v1\firmware.elf
Retrieving maximum program size .pio\build\esp32doit-devkit-v1\firmware.elf
Checking size .pio\build\esp32doit-devkit-v1\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]   6.7% (used 21816 bytes from 327680 bytes)
Flash: [==        ]  22.0% (used 288833 bytes from 1310720 bytes)
Building .pio\build\esp32doit-devkit-v1\firmware.bin
esptool.py v4.5.1
Creating esp32 image...
Merged 2 ELF sections
Successfully created esp32 image.
Configuring upload protocol...
AVAILABLE: cmsis-dap, esp-bridge, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port...
Auto-detected: COM8
Uploading .pio\build\esp32doit-devkit-v1\firmware.bin
esptool.py v4.5.1
Serial port COM8
Connecting......
Chip is ESP32-D0WD-V3 (revision v3.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: e0:5a:1b:55:d1:bc
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x00005fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00010000 to 0x00056fff...
Compressed 17536 bytes to 12202...
Writing at 0x00001000... (100 %)
Wrote 17536 bytes (12202 compressed) at 0x00001000 in 0.6 seconds (effective 217.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 146...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (146 compressed) at 0x00008000 in 0.1 seconds (effective 340.8 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 47...
Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 491.3 kbit/s)...
Hash of data verified.
Compressed 289200 bytes to 161514...
Writing at 0x00010000... (10 %)
Writing at 0x0001bcee... (20 %)
Writing at 0x000248c5... (30 %)
Writing at 0x00029f7a... (40 %)
Writing at 0x0002f5bb... (50 %)
Writing at 0x00034830... (60 %)
Writing at 0x0003b867... (70 %)
Writing at 0x0004524f... (80 %)
Writing at 0x0004c5b1... (90 %)
Writing at 0x00051ad3... (100 %)
Wrote 289200 bytes (161514 compressed) at 0x00010000 in 3.8 seconds (effective 611.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
============================================ [SUCCESS] Took 12.67 seconds ============================================
 *  Terminal will be reused by tasks, press any key to close it.
Terminal

After uploading the code, you can open the serial monitor to see the measurements. The sensor instantly report the temperature and humidity measurements. Though we recommend waiting at least a minute for the readings to settle.

ets Jul 29 2019 12:21:46

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13232
load:0x40080400,len:3028
entry 0x400805e4

Asair DHT20 - Temperature & Humidity Sensor Example

initDHT20 [INFO]: Initializing DHT20 sensor..

Temperature: 26.35 °C
Humidity: 60.61 % RH

Temperature: 26.35 °C
Humidity: 60.21 % RH

Temperature: 26.34 °C
Humidity: 59.80 % RH

Temperature: 26.32 °C
Humidity: 59.40 % RH

Temperature: 26.34 °C
Humidity: 59.08 % RH

Temperature: 26.33 °C
Humidity: 58.71 % RH
Serial Monitor

We will be posting more similar tutorials on environmental sensing soon. If you have any difficulty in using this sensor, please let us know in the comments. If you are new PlatformIO and VS Code, please check out our following tutorials. Happy coding 🖥️

How-To-Use-VS-Code-To-Create-and-Upload-Arduino-Sketches-Featured-Image-01-1-1

How to Use VS Code for Creating and Uploading Arduino Sketches

Learn how to use the popular VS Code IDE to develop Arduino projects and upload your sketches to Arduino boards directly, without using Arduino IDE.
Getting Started with Platform IDE with VS Code for Embedde Software Development Featured Image CIRCUITSTATE Electronics

Getting Started with PlatformIO – Unified IDE for Embedded Software Development

Learn how to use the PlatformIO unified ecosystem for embedded software development with the help of modern Visual Studio Code IDE.
  1. ASAIR DHT20 – Product Page
  2. DHT20 – Datasheet [PDF]
  3. DHT20 – Product Design Guide [PDF]
  4. Buy Asair DHT20 Temperature & Humidity Sensor – Robu
  5. Buy Asair AHT20 Temperature & Humidity Sensor – Robu
Share to your friends
Vishnu Mohanan

Vishnu Mohanan

Founder and CEO at CIRCUITSTATE Electronics

Articles: 100

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.