ESP32

ESP32 with DHT11/DHT22 Temperature and Humidity Sensor using Arduino IDE

기하 2022. 2. 21. 22:20

이 튜토리얼은 Arduino IDE를 사용하여

ESP32와 함께 DHT11 및 DHT22 온도 및 습도 센서를 사용하는 방법을 보여줍니다. 

이러한 센서, 핀아웃, 배선 다이어그램 및 마지막으로 Arduino 스케치에 대한 간략한 소개를 살펴보겠습니다.

ESP32 또는 ESP8266 보드를 사용하여 웹 서버에 온도 및 습도 판독값을 표시하는 방법을 알아보세요.

 

DHT11 및 DHT22 온도 및 습도 센서

DHT11 및 DHT22 센서는 온도 및 상대 습도를 측정하는 데 사용됩니다. 

이들은 제조업체와 전자 제품 애호가들 사이에서 매우 인기가 있습니다.

이 센서에는 아날로그에서 디지털로 변환하는 칩이 포함되어 있으며

온도 및 습도와 함께 디지털 신호를 내보냅니다. 

따라서 모든 마이크로 컨트롤러와 함께 사용하기가 매우 쉽습니다.

Arduino 보드와 함께 이러한 센서를 사용하려는 경우 다음 자습서를 읽을 수 있습니다.

 

DHT11 대 DHT22

DHT11과 DHT22는 매우 유사하지만 사양이 다릅니다. 

다음 표는 DHT11 및 DHT22 온도 및 습도 센서의 가장 중요한 사양을 비교합니다. 

이러한 센서에 대한 보다 심층적인 분석은 센서의 데이터시트를 확인하십시오.

DHT22 센서는

더 나은 분해능과 더 넓은 온도 및 습도 측정 범위를 제공합니다. 

단, 가격이 조금 더 비싸고 2초 간격으로만 판독을 요청할 수 있습니다.

 

DHT11은 범위가 더 작고 정확도가 떨어집니다. 

그러나 1초마다 센서 판독값을 요청할 수 있습니다. 가격도 조금 저렴합니다.

 

차이점에도 불구하고 비슷한 방식으로 작동하며

동일한 코드를 사용하여 온도와 습도를 읽을 수 있습니다.

 사용 중인 센서 유형을 코드에서 선택하기만 하면 됩니다.

 

DHT 핀아웃

DHT 센서에는 다음 그림과 같이 4개의 핀이 있습니다. 

그러나 브레이크아웃 보드에 DHT 센서를 사용하는 경우

핀 3개와 핀 2에 내부 풀업 저항만 제공됩니다

다음 표는 DHT22/DHT11 핀아웃을 보여줍니다.

센서가 사용자를 향하고 있을 때 핀 번호는 왼쪽에서 오른쪽으로 1부터 시작합니다.

필요한 부품

이 튜토리얼을 따르려면

DHT11 또는 DHT22 온도 센서를 ESP32에 연결해야 합니다. 

10k Ohm 풀업 저항을 사용해야 합니다.

다음은 회로를 구축하는 데 필요한 부품 목록입니다.

 

Schematic Diagram

다음 회로도와 같이 DHT22 또는 DHT11 센서를 ESP32 개발 보드에 연결합니다.

이 예에서는 DHT 데이터 핀을GPIO 4. 그러나 다른 적절한 디지털 핀을 사용할 수 있습니다.

다음 가이드에서 ESP32 GPIO를 사용하는 방법을 알아보세요.

 ESP32 핀아웃 참조: 어떤 GPIO 핀을 사용해야 합니까?

 

라이브러리 설치

DHT 센서에서 읽기 위해 Adafruit의 DHT 라이브러리를 사용합니다 . 

이 라이브러리를 사용하려면 Adafruit Unified Sensor 라이브러리 도 설치해야 합니다 . 

다음 단계에 따라 해당 라이브러리를 설치하십시오.

 

Arduino IDE를 열고 Sketch > Include Library > Manage Libraries 로 이동 합니다. 

라이브러리 관리자가 열려야 합니다.

검색 상자에서 " DHT "를 검색하고 Adafruit에서 DHT 라이브러리를 설치합니다.

Adafruit에서 DHT 라이브러리를 설치한 후 

검색 상자에 " Adafruit Unified Sensor "를 입력합니다. 

아래로 스크롤하여 라이브러리를 찾아 설치합니다.

라이브러리를 설치한 후 Arduino IDE를 다시 시작합니다.

 

ESP32 읽기 온도 및 습도 스케치

DHT 센서에서 온도와 습도를 읽기 위해

Adafruit DHT 라이브러리를 기반으로 한 예제를 사용합니다. 

다음 코드를 Arduino IDE에 복사합니다.

// Example testing sketch for various DHT humidity/temperature sensors written by ladyada
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include "DHT.h"

#define DHTPIN 4     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}

코드 전체에 유용한 정보가 포함된 많은 주석이 있습니다. 

따라서 의견을 살펴보고 싶을 수도 있습니다. 

코드 작동 방식을 배우려면 계속 읽으십시오.

 

코드 작동 방식

먼저 DHT 라이브러리를 import 해야 합니다 

그런 다음 DHT 센서 데이터 핀이 연결된 디지털 핀을 정의합니다.

이 경우 다음과 연결됩니다.GPIO 4.

그런 다음 사용 중인 DHT 센서 유형을 선택해야 합니다. 

라이브러리는 DHT11, DHT22 및 DHT21을 지원합니다. 

사용 중인 센서 유형의 주석 처리를 제거하고 나머지 유형은 모두 주석 처리하십시오. 

이 경우 DHT22 센서를 사용합니다.

앞서 선언한 DHTPIN과 DHTTYPE 를 인수로한 DHT객체인 dht를 인스턴스(변수)를 선언합니다

 

setup()함수에서  시리얼모니터를 9600으로시작하고 메세지를 출력합니다

마지막으로 DHT 센서를 초기화합니다.

DHT22의 최대 샘플링 기간이 2초이기 때문에 2000ms(2초) 지연으로 시작합니다(loop()함수에서)

따라서 우리는 2초마다 판독값을 얻을 수 있습니다.

 

온도와 습도는 float 형으로 반환되므로 이를 받아들일 float 형 h, t 변수를 선언하고

화씨(Farenheit)를 저장할 float형 f 변수도 선언합니다

만약 화씨 온드를 받기 원한다면  readTemperature() 함수의 파라미터로  true값을 

전달하면 된다

센서가 유효한 온도 및 습도 판독값을 반환했는지 확인하는 if 문도 있습니다.

습도와 온도를 얻은 후 라이브러리에는 열 지수를 계산하는 방법이 있습니다. 

아래와 같이 섭씨와 화씨로 열 지수heat index를 얻을 수 있습니다.

 

마지막으로 다음 명령을 사용하여 직렬 모니터의 모든 판독값을 인쇄합니다.

 

데모

ESP32 보드에 코드를 업로드합니다. 

Arduino IDE 설정에서 올바른 보드와 COM 포트를 선택했는지 확인하십시오.

코드를 업로드한 후 직렬 모니터를 9600의 전송 속도로 엽니다.

직렬 모니터에서 2초마다 최신 온도 및 습도 판독값을 가져와야 합니다.

 

마무리

 

이 튜토리얼을 통해 Arduino IDE와 함께 ESP32를 사용하여

DHT11 또는 DHT22 센서에서 온도 및 습도 판독값을 얻는 방법을 배웠습니다. 

Adafruit DHT 라이브러리로 온도 및 습도 판독값을 얻는 것은 매우 간단합니다.

DHT 객체의 메쏘드 readTemperature(), readHumidity() 를 사용합니다.

 

 

이제 이 프로젝트를 한 단계 더 발전시키고

스마트폰의 브라우저를 사용하여 참조할 수 있는

웹 서버에 센서 판독값을 표시할 수 있습니다. 

ESP32로 웹 서버를 구축하여 센서 판독값을 표시하는 방법을 알아보세요. 

ESP32 DHT11/DHT22 웹 서버 – Arduino IDE를 사용한 온도 및 습도 

 

 

[번역인용] https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/

 

ESP32 with DHT11/DHT22 Temperature and Humidity Sensor using Arduino IDE | Random Nerd Tutorials

Learn how to use the DHT11 and DHT22 temperature and humidity sensors with ESP32 using Arduino IDE. It includes wiring, circuit diagram and Arduino sketch.

randomnerdtutorials.com