DHT22/11 프로토콜

문주은·2021년 1월 2일
0

메디컬IOT

목록 보기
9/13

DHT11 온습도 센서 모듈

1번pin : 전원(3.3V~5V)
2번pin : 데이터선(시리얼 양방향)
3번pin : GND(접지)

1. 데이터 신호

👉 MCU가 start 신호를 보내서 센서한테 데이터를 읽어올테니 준비 완료 상태일 때 low level, high level 신호를 발생시켜 보내라는 의미
AM2302 모듈 : 센서가 MCU의 동작을 waiting하고 있었으면 이 신호를 만들어내도록 센서를 하드웨어적으로 만들어낸 것
MCU는 160us 동안 기다렸다가 다음 클럭부터 습도 배열 16비트, 온도 배열 16비트 생성

  • 40비트의 온습도 데이터에서 0의 신호 포멧 (평균 77us)

  • 40비트의 온습도 데이터에서 1의 신호 포멧 (평균 120us)
    👉 Low 신호의 시간은 50us로 동일
        But, 첫 번째 데이터 비트를 보내는 High 신호를 가지고 0과 1을 구분
#define MAXTIMINGS 85	// level이 바뀐 횟수(1,0이 바뀐 횟수)
pinMode(pin, OUTPUT);	// digitalWrite(pin,LOW)
pinMode(pin, INTPUT);	// digitalRead(pin)

transition이 발생할 때 마다 i++된다.

if((i>=4) && (i%2==0))

   i<4 일땐 센서 준비로 유효하지 않은 데이터이다.
   i가 짝수일 때만 HighLevel로 0 or 1인지 확인하는 것은 시간을 측정하여 데이터를 저장한다.

dht22_dat[j/8] << =1;

   j값이 0~7 : 습도 정수 데이터(8bit)
          8~15 : 습도 소수점 데이터(8bit)
          16~23 : 온도 정수 데이터(8bit)
          24~31 : 온도 소수점 데이터(8bit)
          32~39 : 패러티 비트(8bit)

if((j>=40) && (dht22_dat[4] == ((dht22_dat[0] + ... + dht22_dat[3]) & 0xFF)))

   40bit 이후이고 패러티 비트(dht22_dat[4])는 온습도 데이터를 모두 합한 값일 때 온습도 값을 계산.

profile
Data Engineer

0개의 댓글