(C/개발/공개)-Raspberry Pi DHT22 센서를 이용한 온도 체크 (1) #INPUT

1 minute read

개요

여름철 사내 서버실 온도 증가로 인해 원격 및 알람을 통한 온도 확인을 할 수 있는 모니터링 시스템 구축 필요


필요 사항

  1. 알람 기능
  2. 현재 온도 확인 View

아두이노, USB 형태 온도계 등 검토 결과 추가 센서 이용 확장성도 좋고 간편한 Raspberry Pi로 선택


시스템 구성

구조


버전

기존 회사에 Raspberry Pi3 버전이 있었지만, 최신 버전을 사용하고 싶어 Raspberry Pi3 B+ 제품 구매


C VS Python

예제 샘플을 확인할 때 CPython두 개로 된 예제가 제일 많았다. Python인 경우 그나마 스크립트 언어라 쉬울 것 같았지만, 공부를 위해 C로 개발하였다.


전자 회로

빵판(Bread Board) 고등학교 수업시간에 배웠었는데 잘 배워 놓을 걸 그랬다.
지금 와서 보니 뭐가 뭔지 하나도 알 수 없어서 빵판(Bread Board)을 사용하지 않고 했더니 다행히도 사용안 하고도 정상적으로 동작하였다.


소스

GitHub Source


예시

예시 케이스를 사줘야겠다…


특이 사항

개발 진행 중 데이터를 정상적으로 가져오는지 테스트하는데 동일 소스로 Raspberry Pi3 에서는 정상적으로 동작 하나 Raspberry Pi3 B+에서는 동작하지 않는 현상이 있었다. Python소스로 테스트하니 이번에는 둘 다 정상 동작 되었다.
Raspberry Pi3 B+에서 뭐가 문제인지 삽질 하던 중 printf로 출력하며 테스트 시 데이터가 출력 될 때도 있는 걸 보고 Delay Time 문제란 걸 깨닫고 소스 수정하니 정상 출력되었다.

    // dht_temp_data.c
    for (i = 0; i < MAX_TIMINGS; i++)
    {
        counter = 0;
        while (digitalRead(DHT_PIN) == laststate)
        {
            counter++;
36          delayMicroseconds(2);
            if (counter == 255)
            {
                break;
            }
        }
        laststate = digitalRead(DHT_PIN);
        if (counter == 255)
            break;
        /* ignore first 3 transitions */
        if ((i >= 4) && (i % 2 == 0))
        {
            /* shove each bit into the storage bytes */
            data[j / 8] <<= 1;
            if (counter > 16)
                data[j / 8] |= 1;
            j++;
        }
    }

마무리

오픈 소스 예제 들을 참고하면서 만들었지만 여태 다른 언어들과 달리 어려웠던 거 같다.
C는 공부가 많이 필요할 것 같으며 위에 특이사항 같은 현상을 경험 후 예상치도 못한 경우는 언제든지 있다는 것을 느꼈다.

Updated: