이 튜토리얼에서는 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
'ESP32' 카테고리의 다른 글
ESP32 Arduino: Getting temperature from a DHT22 sensor (0) | 2021.08.16 |
---|---|
ESP32 Arduino: Getting humidity measurements from a DHT22 sensor (0) | 2021.08.16 |
ESP32 Arduino: Temperature, humidity and CO2 concentration web server (0) | 2021.08.16 |
ESP32 / ESP8266 Arduino: Using structs (0) | 2021.08.16 |
ESP32 Arduino: Software reset (0) | 2021.08.16 |