본문 바로가기
만들기/아두이노

esp 8266에서 DHT 온습도센서 2147483647 혹은 nan 오류

by 훨훨날아 2021. 6. 25.

DHT 온습도 센서는 가장 간단하게 사용되는 아두이노 센서이다. 사용법도 간단해서 DHT 라이브러리를 다운받고 data 케이블을 디지털핀에 연결해서 데이터를 받으면 작동한다.

하지만, 데이터 출력값이  2147483647 로 나오면서 작동하지 않는 경우가 있다.  2147483647 은 int 정수 32비트로 나타낼수 있는 최댓값인데 DHT센서로부터 데이터가 정상적으로 수신되지 않을 때 시리얼모니터로 정수값을 출력하면 나타나는 오류이다.

DHT 센서의 오류원인

1. 센서의 종류
DHT 센서는 DHT11과 DHT22가 있는데 아두이노 IDE에서 센서종류를 정의할때 다르게 작성하면 올바른 데이터가 수집되지 않는다.

2. 전원
DHT 센서는 3 - 5.5 혹은 6V 의 전압에서 작동하는데 전원이 부족하거나 연결이 끊겨있으면 정상적인 값이 출력되지 않는다.

3. 데이터 핀 연결
DHT의 데이터 선이 잘못 연결되어 있으면 당연하게 데이터가 불러와지지 않는다.

4. 센서 초기화(?)
아두이노에서는 DHT센서를 일반적으로 연결하면 바로 데이터가 수집되는데 왠지모르지만 esp 8266에서는 DHT센서를 불러오는 작업이 setup 에 있어야한다. void setup() 부분에 dht.begin(); 을 추가해주면 esp 8266에서 데이터를 받아오기 시작한다.

void setup() {
  Serial.begin(115200);
  dht.begin();  // DHT 센서 작동시키기
}

 

기타

 

DHT 센서의 값을 불러오는 dht.readHumidity 혹은 dht.readTemperature를 int 로 정의하면 2147483647 오류가 나타나고 float 로 정의하면 nan 값으로 오류가 출력된다.

#include <DHT.h>  // 라이브러리에서 DHT 추가

#define DHTPIN 5     // DHT 센서 데이터선을 디지털핀에 연결
#define DHTTYPE DHT11 // DHT 센서 정의

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);         
  dht.begin();  // DHT 센서 연결
}

void loop() {
  int h = dht.readHumidity(); // DHT 센서에서 습도데이터 읽기
  int t = dht.readTemperature();  // DHT 센서에서 온도데이터 읽기

  // int 로 값을 정의했을 때 오류가 나면 2147483647 이 출력되고
  // float으로 값을 정의하면 오류났을 때 nan 으로 출력된다.

  // 데이터가 없을 때 처리하는 방식 
  // 습도 혹은 온도 데이터가 nan 일때 출력되는 메시지
  if (isnan(h) || isnan(t)) {              
    Serial.println(F("센서와 연결되지 않았습니다"));
    return;
  }

  Serial.print("humidity:"); 
  Serial.println(h);                 // 습도출력

  Serial.print("temperature:");
  Serial.println(t);                 // 온도출력

  delay(1000);
}

 

다른 아두이노 프로젝트

https://kyoungin90.tistory.com/309

 

공대생 감성 아두이노 스마트 전등 스위치봇 만들기

밤에 자기 전 전등 스위치를 끄러 움직이는 것은 귀찮은 일이다. 그래서 스마트 스위치를 검색하면 크게 세 종류의 스마트 스위치를 찾아볼 수 있다. 1. 전등에 스위치를 연결하여 원하는 곳에

kyoungin90.tistory.com

 

참고

https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/

반응형