ESP32

ESP32 Arduino: Getting temperature from a DHT22 sensor

기하 2021. 8. 16. 04:28

이 ESP32 자습서에서는 DHT22 온도 및 습도 센서를 사용하여 ESP32에서 실행되는 Arduino 코어에서 온도 측정을 얻는 방법을 확인합니다. 테스트는 ESP32 개발 보드에  통합된  DFRobot의 ESP32 모듈을 사용하여 수행되었습니다  .

 

 

소개

이 ESP32 자습서에서는 DHT22 온도 및 습도 센서를 사용하여 ESP32에서 실행되는 Arduino 코어에서 온도 측정을 얻는 방법을 확인합니다.

DHT22는 장치에 부여된 일반 이름이지만 실제 이름은 AM2302[1]입니다. 여기 에서 데이터시트를 참조할 수 있습니다 .

DHT22와의 인터페이스는 단일 와이어 프로토콜[2]을 사용하기 때문에 매우 간단합니다. 즉, 마이크로컨트롤러의 단일 GPIO에 연결하기만 하면 됩니다.

3.3V ~ 5.5V[2] 범위의 공급 전압으로 작동하므로 ESP32와 함께 쉽게 사용할 수 있습니다.

단선 통신의 하위 수준 세부 정보를 추상화하는 상위 수준 API를 사용하여 센서와 상호 작용하기 위해  Arduino 라이브러리를 사용 합니다 .

센서와의 상호 작용을 용이하게 하기 위해 이미 필요한 모든 전자 장치가 있고 연결을 용이하게 하는 배선 터미널을 노출하는 DFRobot DHT22 모듈  사용 하고 있습니다.

테스트는 ESP32 개발 보드에  통합된  DFRobot의 ESP32 모듈을 사용하여 수행되었습니다  .

 

라이브러리 설치

라이브러리를 설치하는 가장 쉬운 방법은 Arduino IDE 라이브러리 관리자를 사용하는 것입니다. 그것을 열려면 스케치 -> 라이브러리 포함 -> 라이브러리 관리 로 이동 하면 라이브러리 관리자가 나타납니다.

거기 에서 검색 표시줄에 " DHT22 "를 입력 하고 그림 1에 강조 표시된 대로 " ESPx용 DHT 센서 라이브러리 "라는 이름을 설치합니다 .

그림 1 - ESP32용 DHT22 라이브러리 설치

 

전기 다이어그램

언급했듯이 마이크로컨트롤러의 단일 핀만 DHT22에 연결하면 되므로 ESP32를 센서에 연결하는 개략도는 그림 2에서 볼 수 있듯이 매우 간단합니다.

그림 2 - ESP32와 DHT22를 연결하는 전기 다이어그램.

센서 모듈에 따라 데이터 핀의 레이블이 다르게 지정될 수 있으므로 이전 회로도에서 일반 이름 "data"로 표시됩니다. 다른 것들은 내가 사용하는 모듈과 같이 레이블이 지정되지 않을 수도 있습니다. 여기서 핀은 와이어 색상으로 구별될 수 있습니다.

  • 블랙: GND
  • 빨간색: VCC
  • 녹색: 데이터

ESP32에 연결할 때 손상되지 않도록 DHT22 모듈의 핀과 라벨을 주의 깊게 확인하십시오.

ESP32 보드에 따라 DHT22의 전원 공급 장치로 사용할 수 있는 3.3V 출력 핀이 있을 수 있습니다. 핀이 존재하거나 공급할 수있는 최대 전류가 어떤 경우에 당신이 확실하지 않은 경우 그럼에도 불구하고, 최선의 선택은 다음과 같은 외부 전원 공급 장치를 사용하는 것입니다  . 이 경우 ESP32와 DHT22 사이에 공통 GND 연결을 갖는 것을 잊지 마십시오.

 

코드

가장 먼저 해야 할 일은 새로 설치된 DHT 라이브러리를 포함하여 온도 측정에 필요한 기능에 액세스할 수 있도록 하는 것입니다.

1 #include "DHTesp.h"

그런 다음 DHTesp 클래스의 개체를 선언해야 합니다. 이 개체 는 온도를 얻는 데 필요한 메서드를 노출합니다. 나중에 Arduino 설정과 루프 기능에서 액세스할 수 있도록 전역적으로 선언합니다.

1 DHTesp dht;

Arduino 설정으로 이동하여 직렬 연결을 열어 시작하여 나중에 DHT 센서에서 얻을 온도 측정값을 출력합니다.

1 Serial.begin(115200);

Arduino 설정 기능을 완료하려면 센서 인터페이스를 초기화하고 연결되는 핀을 지정해야 합니다. 이전에 선언한 DHTesp 개체 에서 setup 메서드를  호출하여 이를 수행 합니다.

입력으로 센서가 연결된 마이크로컨트롤러 핀의 번호를 받습니다[3]. 나는 GPIO 27을 사용할 것이지만 다른 사람들과 함께 사용해 볼 수 있습니다.

이 함수 호출에는 사용 중인 센서 모듈을 지정하기 위한 추가 선택적 인수가 있습니다. 라이브러리는 DHT22 [3] 이외의 센서와 호환되기 때문입니다. 이 값은 열거된 값으로 전달됩니다.

이 매개변수에 대한 인수를 지정하지 않으면 기본적으로 열거형 값 AUTO_DETECT [3]이 사용되며, 이는 센서 유형을 자동으로 감지하려고 시도함을 의미합니다.

그런 다음 이 기능을 활용하고 추가 매개변수를 전달하지 않으므로 라이브러리가 센서 유형을 자동으로 감지하려고 시도합니다.

1 dht.setup(27);

메인 루프 기능으로 이동하여 이전에 초기화된 DHTesp 개체 에서 getTemperature 메서드를 호출하여 주기적으로 현재 온도를 얻습니다 .

이 함수는 인수를 사용하지 않고 부동 소수점으로 온도를 섭씨 온도로 반환합니다[3].

1 float temperature = dht.getTemperature();

그런 다음 얻은 값을 직렬 인터페이스에 인쇄합니다.

1
2
Serial.print("Temperature: ");
Serial.println(temperature);

마무리를 위해 다른 온도 측정을 하기 전에 10초 정도 지연을 둡니다.

1 delay(10000);

최종 소스 코드는 아래에서 볼 수 있습니다.

1
2

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "DHTesp.h"


DHTesp dht;


void setup()
{
  Serial.begin(115200);


  dht.setup(27);
}


void loop()
{
  float temperature = dht.getTemperature();


  Serial.print("Temperature: ");
  Serial.println(temperature);


  delay(10000);


}

 

코드 테스트

코드를 테스트하려면 간단히 컴파일하고 Arduino IDE를 사용하여 ESP32 장치에 업로드하십시오. 전체 절차가 완료되면 직렬 모니터를 열고 결과를 확인합니다.

여러 온도 측정값이 인쇄되는 것을 보여주는 그림 3과 유사한 출력을 얻어야 합니다.

그림 3 - ESP32를 사용하여 DHT22에서 얻은 온도 측정값.

 

참고문헌

[1]  http://www.kandrsmith.org/RJS/Misc/Hygrometers/calib_many.html

[2]  http://image.dfrobot.com/image/data/SEN0137/AM2302_manual.pdf

[3]  https://github.com/beegee-tokyo/DHTesp