ESP32

ESP32 Arduino: DHT22 Minimum Sampling Period

기하 2021. 8. 16. 04:27

이 튜토리얼에서는 DHT22의 최소 샘플링 주기를 얻는 방법과 최대 샘플링 속도를 넘지 않고 온도를 측정하는 데 사용하는 방법을 확인할 것입니다. 센서와의 상호 작용을 용이하게 하기 위해  이미 필요한 모든 전자 장치가 있고 연결을 용이하게 하는 배선 터미널을 노출하는 DFRobot DHT22 모듈  사용  하고 있습니다.

 


소개

이 튜토리얼에서는 DHT22의 최소 샘플링 기간을 얻는 방법과 이를 사용하여 센서가 지원하는 최대 샘플링 속도를 초과하지 않고 일부 온도 측정을 수행하는 방법을 확인할 것입니다.

우리는 사용하려고   아두 이노 코어를 사용하여 ESP32에서 DHT22와 상호 작용하는 라이브러리를. Arduino IDE 라이브러리 관리자에 설치할 수 있는 이 라이브러리 설치에 대한 세부 정보는 여기에서 볼 수 있습니다 . 센서와 ESP32 간의 연결에 대한 전자 회로도도 해당 게시물에 자세히 설명되어 있습니다.

따라서 최소 샘플링 기간은 센서에서 두 번의 연속 측정 사이에 기다려야 하는 최소 시간 간격입니다. DHT22의 경우 이 값은 2초[1]입니다.

애플리케이션에 따라 이 값이 허용되거나 허용되지 않을 수 있습니다. 그럼에도 불구하고, 일반적인 조건에서 매우 빠른 변화가 없는 환경 온도 및 습도 측정의 일반적인 응용 프로그램의 경우 이 샘플링 기간이 허용되어야 합니다.

코딩 섹션에서 볼 수 있듯이 앞에서 언급한 라이브러리를 사용하여 코드에서 이 최소 샘플링 기간 값을 얻을 수 있습니다.

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

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


코드

코드의 초기 부분은 이전 게시물과 유사합니다. DHT 라이브러리를 포함하는 것으로 시작한 다음 DHTesp 클래스의 객체를 선언합니다 .

1
2
#include "DHTesp.h"


DHTesp dht;

Arduino 설정 기능으로 이동하여 프로그램 결과를 출력하기 위해 직렬 연결을 열어 시작합니다.

그 다음, 방금 생성  DHTesp 클래스 개체 에서 setup 메서드를 호출하여 센서 인터페이스를 초기화합니다 . 이 메소드는 DHT22에 연결된 ESP32의 핀을 입력으로 받습니다.

1
2
Serial.begin(115200);


dht.setup(27);

이제 설정 함수에서 객체  getMinimumSamplingPeriod 메서드를 호출하여 최소 샘플링 기간을 얻고 인쇄  합니다.

이 메서드는 인수를 사용하지 않으며 최소 샘플링 기간(밀리초)을 정수로 반환합니다.

센서 데이터시트에서 값을 쉽게 얻고 애플리케이션에서 하드 코딩할 수 있다는 점을 고려할 때 이는 불필요해 보일 수 있습니다. 그럼에도 불구하고 이 접근 방식을 따르면 라이브러리에서 지원하는 여러 센서와 함께 작동할 수 있는 일반 프로그램을 개발할 수 있으며, 이 경우 최소 샘플링 기간이 다를 수 있습니다.

1
2
Serial.print("Minimum Sampling Period: ");
Serial.println(dht.getMinimumSamplingPeriod());

Arduino 루프 기능으로 이동하여 주기적으로 일부 온도 측정값을 수집합니다. 소개 섹션에서 언급했듯이 연속 측정 사이에 최소 2초 간격을 기다려야 합니다. 따라서 getMinimumSamplingPeriod  메서드 에서 반환된 값을 Arduino 루프에서 지연으로 사용할 수 있습니다  .

그러나 이것이 초당 0.5의 속도로 샘플을 얻는 것을 보장하지는 않습니다(최소 샘플링 기간의 역수는 샘플을 얻을 수 있는 최대 등급임).

지연 기능이 코드의 실행 기간을 보장하지 않기 때문 입니다. 해당 함수 호출에 의해 도입된 2초 외에 나머지 모든 코드의 실행을 고려해야 합니다.

따라서 이 지연은 최대 샘플링 속도를 초과하지 않도록 보장하기 위해서만 사용합니다. 고정된 잘 정의된 샘플링 속도를 유지해야 하는 경우 하드웨어 타이머를 사용하는 것과 같이 따를 수 있는 다른 접근 방식이 있습니다.

1 delay(dht.getMinimumSamplingPeriod());

다음으로 우리는 이전 게시물 에서 했던 것처럼 dh 객체 에서 getTemperature 메소드를 호출하여 간단히 온도 측정값을 얻을 수 있습니다  .

1 float temperature = dht.getTemperature();

최종 소스 코드는 아래에서 볼 수 있습니다. 여기에는 이미 얻은 온도 측정값을 직렬 인터페이스로 인쇄하는 작업이 포함되어 있습니다.

1
2

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


DHTesp dht;


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


  dht.setup(27);


  Serial.print("Minimum Sampling Period: ");
  Serial.println(dht.getMinimumSamplingPeriod());
}


void loop()
{


  delay(dht.getMinimumSamplingPeriod());


  float temperature = dht.getTemperature();


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


}


코드 테스트

코드를 테스트하려면 센서와 ESP32 사이의 배선이 완료된 후 코드를 컴파일하고 Arduino IDE로 업로드하는 일반적인 절차를 따르십시오.

절차가 완료되면 Arduino IDE 직렬 모니터를 엽니다. 프로그램 시작 부분에 최소 샘플링 기간이 인쇄되어 있는 그림 1과 유사한 출력을 얻어야 합니다.

그 후 주기적으로 온도 측정값을 출력하기 시작해야 합니다.

그림 1 – 프로그램의 출력.

인쇄된 기간은 서론 섹션에서 언급한 내용과 일치합니다. 센서 데이터 시트에 명시된 대로 2초인 2000ms에 해당합니다.


참고문헌

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